金额转换
import java.util.Scanner;
public class 统计金额 {
/*
把数字转换成繁体字,一共7位数,数字前面补零。查表法思想!!!
例如:2135
↓ 转繁体字
贰壹叁伍
↓ 前面补0
零零零贰壹叁伍
↓ 插入单位
零佰零拾零万贰壹叁伍
*/
public static void main(String[] args) {
//1.键盘录入一个金额,并限定范围。钱没有负数。
Scanner sc = new Scanner(System.in);
int money;
/*
问题 1:
如果在循环体内定义Scanner对象的引用money,会使得while循环外的money无效。
因为 定义的变量只在最近的方法体内生效。(最近的大括号,这里是while的方法体。)
问题 2:
选择语句内的判断条件,该条件的变量需要初始化。如 money=1 or money = sc.nextInt();
我错误地把 money = sc.nextInt();写进了if中。
问题 3:
money = sc.nextInt();
System.out.println("请输入一个金额:");
顺序错误,这样的结果是先输入数据再显示输出语句。
Tip 1:
while的使用场景:存在数字无效的情况需要重新输入且不限次数。
*/
while(true){
System.out.println("请输入一个金额:");
money = sc.nextInt();
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("请重新输入:");
}
}
//定义一个变量用于拼接字符串
String moneyStr = "" ;
//2.得到money中的每一位数字,并转成中文。
while(true){
/*
其一:根据不同金额,会有不同次数的循环,所以不适用for()。
其二:整数除整数得到整数。
其三:把数字转换成繁体,然后拼接繁体字。
*/
//先从右边开始,即个位。
//获取个位
int ge = money % 10;
//获得个位后就可以转换繁体字,调用方法。
String CapitalNumber = getCapitalNumber(ge);
moneyStr = CapitalNumber + moneyStr;
//去掉已获得的数字
money = money / 10;
//如果数字上的每一位都获取到了,那么money=0。
if(money == 0){
break;
}
}
//3.在字符串前面补"零"
//因为金额不同,所以补零的个数也不同。
int count = 7 - moneyStr.length();
//重点是知道补"零"的次数
for (int i = 0; i < count; i++) {
moneyStr = "零" + moneyStr;
}
String result ="";
//4.插入单位
//查表法,定义一个数组表示单位。字符和数组的长度相同,字符的索引可以认为是数组的索引。
String[] arr = {"佰","拾","万","仟","佰","拾","元"};
//遍历moneyStr,依次得到 零 零 零 贰 壹 叁 伍
//把arr的单位插入 快捷moneyStr.length().fori
for (int i = 0; i < moneyStr.length(); i++) {
//charAt()把moneyStr按索引转成字符
char c =moneyStr.charAt(i);
result = result + c + arr[i];
}
//打印结果
System.out.println(result);
}
//2.定义一个方法把数字变成繁体字
//***错误:把方法写在main方法中。
public static String getCapitalNumber(int number){
//定义一个数组,让数字和中文有一个对应关系。
String[] arr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
return arr[number];
}
}
// 2135 贰壹叁伍
//顺序1
int moneyStr = "";
String CapitalNumber = getCapitalNumber(ge);
moneyStr = CapitalNumber + moneyStr;
//顺序2
int moneyStr = "";
String CapitalNumber = getCapitalNumber(ge);
moneyStr = moneyStr + CapitalNumber ;
字符串拼接顺序的问题
- 顺序2
- " " + "伍" = "伍" 第一次循环
- "伍 " + "叁" = "伍叁" 第二次循环
- 顺序1
- " 伍" + "" = "伍" 第一次循环
- "叁 " + "伍" = "叁伍" 第二次循环
- "壹叁伍" + " 贰" ="贰壹叁伍" 最后一次循环
插入单位问题
//查表法,定义一个数组表示单位。索引和数组的顺序相同
String[] arr = {"佰","拾","万","仟","佰","拾","元"};
//遍历moneyStr,依次得到 零 零 零 贰 壹 叁 伍
//把arr的单位插入 快捷moneyStr.length().fori
for (int i = 0; i < moneyStr.length(); i++) {
//charAt()把moneyStr按索引转成字符
char c =moneyStr.charAt(i);
system.out.print(c);
//打印单位
system.out.print(arr[i]);
}
根据运行顺序,会先打印一个 c 在打印一个arr[i]。相当于拼接。
标签:顺序,转换,Scanner,moneyStr,叁伍,sc,money,字符串,习题 From: https://www.cnblogs.com/jjhdbk/p/18285814