黑马程序员技术交流社区

标题: 昨天看见的题,我用最复杂的方法写的,求指正 [打印本页]

作者: a623562486    时间: 2016-9-2 21:10
标题: 昨天看见的题,我用最复杂的方法写的,求指正
/*
需求:输入阿拉伯数字,输出对应的中文大写格式
例如:11000,输出壹万壹仟
*/
/*
思路:1.首先要获取输入数字的各位数字及幂数,并对应相应汉字,考虑使用switch方法
         2.抽取进位方法,抽取拾/佰/仟/万/亿并赋值给对应幂数
*/
import java.util.Scanner;
class Chinese_Exchange {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个整数,因int取值范围限制,最大取10位且小于2147483647");
                int a = sc.nextInt();
                int[] arr =new int[13];
                String[] s = new String[13];
                wei(a,arr);
                //bianLi(arr);
                System.out.println();
                Chinese(arr,s);
                //bianLi(s);
                System.out.println("相应大写数字为:");
                fanZhuan(s);
                System.out.println();
        }

        public static void  wei(int a,int[] arr) {
                arr[0] = a % 10;
                for (int i = 1;i <arr.length-1 ;i++ ) {
                        a /= 10;
                        arr[i] = a % 10;
                }
        }

        public static void bianLi(int[] arr) {
                for (int i = 0;i < arr.length ;i++ ) {
                        System.out.print(arr[i] + "  ");
                }
        }

        public static void bianLi(String[] s) {
                for (int i = 0;i < s.length ;i++ ) {
                        System.out.print(s[i] + "");
                }
        }

        public static void fanZhuan(String[] s) {
                for (int i = 0;i<s.length/2 ;i++ ) {
                        String temp = s[i];
                        s[i] = s[s.length-1-i];
                        s[s.length-1-i] = temp;
                }
                bianLi(s);
        }
        public static void Chinese(int[] arr,String[] s) {
                String[] s1 = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
                for (int i =0 ; i < arr.length ;i++ ) {
                        switch (i) {
                        case 0:
                                if (arr[i] == 0) {
                                        s[i] = "";
                                        break;
                                }       
                                s[i] = s1[arr[i]];
                                break;
                        case 1:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "拾";
                                break;
                        case 2:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "佰";
                                break;
                        case 3:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }       
                                s[i] = s1[arr[i]] + "仟";
                                break;
                        case 4:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "萬";
                                break;
                        case 5:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "拾";
                                break;
                        case 6:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "佰";
                                break;
                        case 7:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "仟";
                                break;
                        case 8:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "亿";
                                break;
                        case 9:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "拾";
                                break;
                        case 10:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }       
                                s[i] = s1[arr[i]] + "佰";
                                break;
                        case 11:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "仟";
                                break;
                        case 12:
                                if (arr[i] == 0 && (s[i-1] == "零" ||s[i-1] == "")) {
                                        s[i] = "";
                                        break;
                                }else if (arr[i] == 0 ) {
                                        s[i] = "零";
                                        break;
                                }               
                                s[i] = s1[arr[i]] + "萬";
                                break;
                        }
                }
                for (int i = arr.length-2;i >= 0 ;i-- ) {
                        if (arr[i] != 0) {
                                s[i+1] = "";
                                break;
                        }
                }
        }
}

作者: a623562486    时间: 2016-9-2 21:12
自己觉得太复杂了,但是只学了这么多,不知道还能怎么写
作者: NewBeeCoder    时间: 2016-9-3 22:43
思路都差不多
我想的是 用一个字符串数组 String[] 存{"零","十","百","千","万","十万","百万","千万"...}
              用字符串读取输入的 数字 根据字符串长度 读取上面数组的 长度
              把输入的数字转成字符数组  用switch判断 转成大写
              最后拼接字符串就行了  
          只是个思路 还没写代码 你可以试试 感觉简单点
作者: xiguapi    时间: 2016-9-4 09:39
package com.itheima.Demo;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
//需求:输入阿拉伯数字,输出对应的中文大写格式
//例如:11000,输出壹万壹仟

public class Teat12 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个整数:");
                int b;
                while (true) {
                        String line = sc.nextLine();
                        try {
                                b = Integer.parseInt(line);
                                break;
                        } catch (Exception e) {
                                try {
                                        BigInteger big = new BigInteger(line);
                                        System.out.println("你输入的整数过大,请重新输入:");
                                } catch (Exception e1) {
                                        try {
                                                BigDecimal bd = new BigDecimal(line);
                                                System.out.println("你输入的是小数,请重新输入:");
                                        } catch (Exception e2) {
                                                System.out.println("你输入的是非法字符,请重新输入:");
                                        }
                                }
                        }
                }
                jishu(b);
        }

        public static void jishu(int b) {
                StringBuffer str = new StringBuffer();
                char[] cs = (b + "").toCharArray();
                String[] js = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
                String[] ws = { "元整", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾" };
                for (int i = cs.length - 1; i >= 0; i--) {
                        int a = Integer.parseInt(cs[cs.length - 1 - i] + "");

                        str.append(js[a / 1] + ws[i]);
                }
                System.out.println(str);
        }
}


有点小瑕疵.......
作者: 赢无翳    时间: 2016-9-4 09:43
我想是不是可以定义两个String类型的数组 一个代表从1到9的数字 一个代表万千百十 判断输入数字的位数来匹配万千百十 分次截取第一位上的数字来获取对应的中文
作者: xiguapi    时间: 2016-9-4 09:55
xiguapi 发表于 2016-9-4 09:39
package com.itheima.Demo;

import java.math.BigDecimal;

        public static void jishu(int b) {
                StringBuffer str = new StringBuffer();
                char[] cs = (b + "").toCharArray();
                String[] js = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
                String[] ws = { "元整", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾" };
                for (int i = cs.length - 1; i >= 0; i--) {
                        int a = Integer.parseInt(cs[cs.length - 1 - i] + "");
                        if (a / 1 == 0 && (i == 0 || i == 4 || i == 8)) {
                                str.append(ws);
                        } else {
                                if (a / 1 == 0) {

                                } else {
                                        str.append(js[a / 1] + ws);
                                }
                        }
                }
                System.out.println(str);
        }


这样就好了!!!!
作者: a623562486    时间: 2016-9-5 20:50
赢无翳 发表于 2016-9-4 09:43
我想是不是可以定义两个String类型的数组 一个代表从1到9的数字 一个代表万千百十 判断输入数字的位数来匹 ...

这个是可行的,但是里面要加判断语句,因为如果涉及到很多位都是零的时候,就很麻烦
作者: a623562486    时间: 2016-9-5 20:56
xiguapi 发表于 2016-9-4 09:39
package com.itheima.Demo;

import java.math.BigDecimal;

还没学到integer类呢,诶,等几天再回来看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2