首页 > 其他分享 >字符串习题-金额转换

字符串习题-金额转换

时间:2024-07-05 14:53:45浏览次数:13  
标签:顺序 转换 Scanner moneyStr 叁伍 sc money 字符串 习题

金额转换

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 ;

字符串拼接顺序的问题

  1. 顺序2
    • " " + "伍" = "伍" 第一次循环
    • "伍 " + "叁" = "伍叁" 第二次循环
  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

相关文章