黑马程序员技术交流社区

标题: 输入数字转中文,网上csdn的答案居然是错的?求大神指正 [打印本页]

作者: luchatex    时间: 2016-9-21 20:37
标题: 输入数字转中文,网上csdn的答案居然是错的?求大神指正
输入一串数字:如123456,最多9位.转为中文,自己写了一个,觉得很啰嗦的代码.网上看到大神一段代码,搜索出来转中文好像都是这个.然后验证的时候发现只要是:100000,1000000,这样的几十万,几百万的就会显示的不对.求大神修正代码.看看错在哪了.

  1. package demo;
  2. import java.util.Scanner;

  3. public class NumTrans {

  4.         private static Scanner sc ;
  5.         
  6.         private static String input;
  7.         
  8.         private static String units[] = {"","十","百","千","万","十","百","千","亿"};
  9.         
  10.         private static String nums[] = {"零","一","二","三","四","五","六","七","八","九","十"};
  11.         
  12.         private static String result[] ;
  13.         
  14.         public static void input() {
  15.                 System.out.println("请输入一串数字:如123456,最多9位");
  16.                 sc = new Scanner(System.in);
  17.                 input = sc.nextLine();
  18.         }
  19.         
  20.         public static String get(String input) {
  21.                 String out = "";
  22.                 result = new String[input.length()];
  23.                 for(int i=0;i<result.length;i++) {
  24.                         result[i] = String.valueOf(input.charAt(i));
  25.                 }
  26.                 int back = 0;
  27.                 for(int i=0;i<result.length;i++) {
  28.                         if(!result[i].equals("0")) {
  29.                                 back = result.length-i-1;
  30.                                 out += nums[Integer.parseInt(result[i])];
  31.                                 out += units[back];
  32.                         }else {
  33.                                 if(i==result.length-1) {
  34.                                 
  35.                                 }else {
  36.                                         if(!result[i+1].equals("0")) {
  37.                                                 out += nums[0];
  38.                                         }
  39.                                 }
  40.                         }
  41.                 }
  42.                 return out;
  43.         }
  44.         
  45.         public static void main(String[] args) {
  46.                 // TODO Auto-generated method stub
  47.                 input();
  48.                 System.out.println(get(input));
  49.         }

  50. }
复制代码

作者: 水月灬清影    时间: 2016-9-22 13:56
本帖最后由 水月灬清影 于 2016-9-22 14:12 编辑

更改见注释,我不习惯的代码也改了,但是功能是一样的
[Java] 纯文本查看 复制代码


        
  

        
        import java.util.Scanner;

        public class NumTrans {

              
               
                private static String input;
               
                private static String[] units = {"","十","百","千","万","十","百","千","亿","十","百","千"};
               
                private static String[] nums= {"零","一","二","三","四","五","六","七","八","九","十"};
               
                private static String[] result;
               
                public static void main(String[] args) {
                input();
                System.out.println(get(input));
                }
               
                public static void input() {
                        System.out.println("请输入一串数字:如123456,最多12位");   //扩展至12位
                        Scanner sc = new Scanner(System.in);
                        input = sc.nextLine();
                }
               
                public static String get(String input) {
                                StringBuilder out = new StringBuilder();   //StringBuilder接收
                        result = new String[input.length()];
                        for(int i=0;i<result.length;i++) {
                                result = String.valueOf(input.charAt(i));
                        }
                        
                        int back = 0;
                        for(int i=0;i<result.length;i++) {
                                                back = result.length-i-1;    //判断位数的变量应拿出if循环
                              
                                                if(!result.equals("0")) {
                                       
                                        out.append(nums[Integer.parseInt(result)]) ;
                                        out.append(units[back]);
                                       
                                       
                                }else {
                                                if(back==8){    //补整亿位
                                                        out.append(units[back]);
                                                }
                                                if(back==4&&(!out.toString().endsWith("亿"))){    //补整万位,且整亿不补
                                                        out.append(units[back]);
                                                }
                                                
                                        if(i==result.length-1) {
                                                break;
                                        }else {
                                                if(!result[i+1].equals("0")) {
                                                        out.append(nums[0]) ;
                                                }
                                        }
                                }
                              
                        }
                        return out.toString();
                }
               
               

        }

作者: lipeng518    时间: 2016-9-22 22:38
仰望高端大神!
作者: luchatex    时间: 2016-9-22 23:20
水月灬清影 发表于 2016-9-22 13:56
更改见注释,我不习惯的代码也改了,但是功能是一样的[mw_shl_code=java,true]

        

,这个代码还需要慢慢消化, 感谢大神
作者: luchatex    时间: 2016-9-22 23:21
水月灬清影 发表于 2016-9-22 13:56
更改见注释,我不习惯的代码也改了,但是功能是一样的[mw_shl_code=java,true]

        

,这个代码还需要慢慢消化, 感谢大神




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