【题目】
将输入的阿拉伯数字进行判断,如果合规转化成大写数字,并进行输出
【思路】
对题目进行拆分,一步一步进行分析
- 首先,应该输入金额,对金额是否超出范围
- 接着。要将每个数字分别装化成大写数字,并且拼接成一个字符串,补全格式
- 最后,输出字符串
【代码实现】
第一步,创建变量,并且将输入的金额数值存放到变量中,并且对金额进行范围判断,如果不满足要求就要重新输入,直到输入正确的数为止
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int money = 0;
while (true) {
System.out.println("请输入金额");
money = sc.nextInt();
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金额错误");
}
}
说明:while(true)这个结构主要就是让输入错误的金额后不断要求引导输入,直到输入的金额数目符合要求。引导重复输入的时候要注意把输入语句放到while(true)循环里面,否则就会出现输入金额错误后不断提示金额错误的情况。而money这个变量定义的时候要定义到while(true)外面,因为money不是while(true)的局部变量。money要在整个程序中发挥作用。
第二步,将每个数字分别转化为大写数字,然后进行字符串拼接,最后将格式补全,把要补上的单位补上,把不够的数字用零补上,最后输出
String montyStr = "";
while (true) {
int ge = money % 10;
String captialNumber = getCapitalNumber(ge);
montyStr = captialNumber + montyStr;
money = money / 10;
if (money == 0) {
break;
}
}
说明:程序从上往下以此进行,在while(true)的循环结构中先利用求余不断把money的最后一位数字取出到ge里面然后利用getCapitalNumber方法将这个数字进行转化,再接着将转化出来的大写数字进行拼接,然后用求商让money去掉去掉最后一位,最后一个判断,当money的所有数字都转化为大写数字时,money再进行求商后就变为了0,这就要跳出循环
知识点补充
这里用到字符串的拼接方法是直接用“+”来拼接两部分,要注意前后顺序。这是Java的拼接字符串的一种方法,后续文章会补充
public static String getCapitalNumber(int number) {
String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
return arr[number];
}
这就是将数字转化为大写数字的getCapitalNumber方法,主要利用了查表法。利用了数字作为下标对应的数组包含的内容的性质,将数字对应的大写数字输出
已有的数字全部转化为大写数字并且拼接到数组后,就要对不满7位的数字进行补零。首先我们要判断还有几位需要补零,然后将零拼接到字符串上。拼接完字符串后就会得到一个全部大写数字的字符串,没有单位表示数目的大小。于是就要把单位补上
int count = 7 - montyStr.length();
for (int i = 0; i < count; i++) {
montyStr = "零" + montyStr;
}
String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
for (int i = 0; i < montyStr.length(); i++) {
char c = montyStr.charAt(i);
System.out.print(c);
System.out.print(arr[i]);
}
知识点补充
在Java中将字符串中的每个字符取出不用十分麻烦,只需要引用charAt()j就可以做到
说明:根据字符串长度拼接零的时候要注意是把零拼接到现有字符串的前面还是后面。利用for循环将字符串一个一个的拆成字符,然后利用程序顺序进行的特点将其挨个输出(输出字符串中的一个字符后输出一个单位)保证最后的结果是大写数字和单位间隔的样子。
【总代码】
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int money = 0;
while (true) {
System.out.println("请输入金额");
money = sc.nextInt();
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金额错误");
}
}
String montyStr = "";
while (true) {
int ge = money % 10;
String captialNumber = getCapitalNumber(ge);
montyStr = captialNumber + montyStr;
money = money / 10;
if (money == 0) {
break;
}
}
//在前面补零
int count = 7 - montyStr.length();
for (int i = 0; i < count; i++) {
montyStr = "零" + montyStr;
}
String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
for (int i = 0; i < montyStr.length(); i++) {
char c = montyStr.charAt(i);
System.out.print(c);
System.out.print(arr[i]);
}
}
public static String getCapitalNumber(int number) {
String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
return arr[number];
}
}