JAVA 练习 (6)

该博客介绍了一种程序实现方法,将用户输入的阿拉伯数字(上限为5位数)转换为大写中文汉字。程序通过键盘读取数字,然后利用数组存储中文汉字和数字单位,根据输入数值的位数进行相应处理。整数部分和小数部分分别转换,最后输出完整的中文金额表示。在处理过程中,特别注意了数据操作的正确性和无小数情况的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生活中会遇到阿拉伯数字转化成对应的大写中文汉字的形式(设置一个上限5位数)

请用程序实现一个从键盘录入一串数字,要求将输入的阿拉伯数字转成对应的大写中文汉字。

如图所示:

 分析:我使用的是double数据类型,将输入的数字分为两部分,整数部分和小数部分

1.需要键盘录入数字,使用System类

        Scanner s = new Scanner(System.in);
        System.out.println("输入金额:");
        double a = s.nextDouble();

2.将数字转换为汉字需要定义数组来存储

一个数组用于存储大写汉字{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}

一个数组用于存储数字,提供遍历数字数组获取下标来查找中文汉字{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

一个数组用于存储单位,{"万", "千", "百", "十", "圆"}

        String wei[] = {"万", "千", "百", "十", "圆"};
        int shu[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        String han[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
int f=(int)a;//这里加入强转将录入的double类型转换为int类型,也就是将输入值的小数位数去掉

3.因为需要给你输入的每个数字带上单位,所以需要判断你输入的数为几位数,然后定义一个数组来存储你输入数字的每一位

        //判断位数
        int b = (int) a;
        int count = 0;
        while (b >= 1) {
            b = b / 10;
            count++;
        }
        int r[] = new int[count];
        for (int i = 0; i < count; i++) {
            int v = (int) c % 10;
            c = c / 10;
            r[i] = v;
        }

4.对新数组的每个值进行遍历,通过遍历得到的值得到下标来获取中文汉字

整数部分

        int cut = 5 - count;
        for (int i = count - 1; i >= 0; i--) {//整数位数
            if (r[i] != 0) {
                for (int j = 0; j < shu.length; j++) {
                    if (r[i] == shu[j]) {
                        System.out.print(han[j] + wei[cut]);
                    }
                }
                cut++;
            } else if (r[i] == 0) {
                System.out.print(han[0] + wei[cut]);
                cut++;
            }
        }
        if

在这段代码中 int cut = 5 - count;这段代码最关键,这是输出你所录入几位数就输出几位数

 小数部分

            double l = a * 100;
            //小数位数输出
            int d = (int) l;
            int m = 0, n = 0;
            for (int i = 0; i < 1; i++) {
                m = d % 10;
                int j = d / 10;
                n = j % 10;
            }
            for (int j = 0; j < shu.length; j++) {
                if (n == shu[j]) {
                    System.out.print(han[j] + "毛");
                }
            }
                for (int j = 0; j < shu.length; j++) {
                    if (m == shu[j]) {
                        System.out.print(han[j] + "分");
                    }
            }

在这里我将输入的数乘以一百,然后对最后两个数取余就得到了两个数,这两个数就是输入数字的小数部分,然后对这两位数遍历找到对应的中文汉字输出

这里我还加了一个判断有无小数,没有小数就输出多少多少整

        int f=(int)a;
        if(a-f!=0){}
        else{
            System.out.println("整");
        }

当等于零的时候小数部分不执行,输出整;不为0的时候输出小数部分

完整代码:

import java.util.Scanner;

//需求:从键盘录入一串数字,将输入的数字转换为对应的大写中文汉字,零、壹、贰、叁、肆、伍、陆、柒、捌、玖
//1.需要键盘录入一串数字
//2.因为是金额,所以有万,千,百,十,还有几毛几分,所有需要判断位数来断定
public class Test1 {
    public static void main(String[] args) {
        String wei[] = {"万", "千", "百", "十", "圆"};
        int shu[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        String han[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        Scanner s = new Scanner(System.in);
        System.out.println("输入金额:");
        double a = s.nextDouble();
        double c=a;
        int f=(int)a;
        double l = a * 100;
        //判断位数
        int b = (int) a;
        int count = 0;
        while (b >= 1) {
            b = b / 10;
            count++;
        }
        int r[] = new int[count];
        for (int i = 0; i < count; i++) {
            int v = (int) c % 10;
            c = c / 10;
            r[i] = v;
        }
        int cut = 5 - count;
        for (int i = count - 1; i >= 0; i--) {//整数位数
            if (r[i] != 0) {
                for (int j = 0; j < shu.length; j++) {
                    if (r[i] == shu[j]) {
                        System.out.print(han[j] + wei[cut]);
                    }
                }
                cut++;
            }
                else if (r[i] == 0) {
                System.out.print(han[0] + wei[cut]);
                cut++;
            }
        }
        if(a-f!=0){
            //小数位数输出
            int d = (int) l;
            int m = 0, n = 0;
            for (int i = 0; i < 1; i++) {
                m = d % 10;
                int j = d / 10;
                n = j % 10;
            }
            for (int j = 0; j < shu.length; j++) {
                if (n == shu[j]) {
                    System.out.print(han[j] + "毛");
                }
            }
                for (int j = 0; j < shu.length; j++) {
                    if (m == shu[j]) {
                        System.out.print(han[j] + "分");
                    }
            }
        }
        else{
            System.out.println("整");
        }
    }
}

测试输出结果:

 最后需要特别提示的是:

在这段代码中我多次定义变量(如上图)进行重新赋值是因为在下面代码中多次对数据进行操作,如果没注意就会导致在后面再次调用数据的时候就会出现问题,在这道题中我就出了两次错误,自己打了断点才发现这个错误,都是因为数据被重复操作的问题,所以在以后的编码过程中对数据要保持警醒,如果需要对数据多次操作,就要定义一个新的变量重新赋值对这个新的变量进行操作,并且定义变量的位置也要放在所有操作的前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值