A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 楞个里格朗 中级黑马   /  2013-11-13 18:45  /  1344 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*第10题:金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整*/
//思路:此题考察的是查表法找出对应的值,
//需要制作数值表,单位表,但是当遇到0的时候就不需要附带单位。
class Test10{
public static String main(String[] args)
{

String mainMethod(String s);//在这里报错。一直弄不懂错在哪里
{
    //定义单位数组和为0是的情况
    String[]units={"亿","万","圆整"};
    String result="";
    //在字符串前面补零,使字符串长度为4的倍数
    int length=s.length()%4;
    if(length==1){
            s="000"+s;
    }else if(length==2){
            s="00"+s;
    }else if(length==3){
            s="0"+s;
    }
    //转成数组
    char[]ch=s.toCharArray();
    //获得数组长度除以4的结果,从而决定有几个子数组和几次循环
    int mod=ch.length/4;
    for(int i=0, i_units=3-mod;i<mod;i++,i_units++){
            char[]ch2=Arrays.copyOfRange(ch, i*4, (i*4)+4);//从左往右每次取4位组成新数组
            //如果一个子数组返回结果为零,那么后面不加单位
            if(read(ch2).equals("零")){//此处不能用“==”
                    result=result+read(ch2);
            }else if(i==0&&read(ch2).startsWith("零")){//最前面的结果不能有零
                    result=result+read(ch2).substring(1)+units[i_units];                                
            }else{//正常的结果
                    result=result+read(ch2)+units[i_units];
            }
    }
    return result;
}}
private static String read(char[]ch){
   
    String[]num={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
    String [] units={"仟","佰","拾",""};
    String ss="";
    //遍历
    for(int i=0;i<4;i++){
            String s=ch[i]+"";
            //将数组内字节转换成数字
            int i_num=Integer.parseInt(s);
            //结合条件使用查表法获取结果
            if((i_num==0&&i==3)||(i_num==0&&i==0)){
                    ss=ss;
            }else if(i_num==0||i==3){
                    ss=ss+num[i_num];                                
            }else {
                     ss=ss+num[i_num]+units[i];               
            }
    }
    //使用正则,对多余的零去掉
    ss=ss.replaceAll("(.)\\1+","$$$$$$$$1");
    return ss;
}
}

评分

参与人数 1黑马币 +5 收起 理由
To + 5 入学考试题。。。

查看全部评分

4 个回复

正序浏览
为了黑马,为了美好的未来,加油哈,兄弟
回复 使用道具 举报
本帖最后由 低调的奢华 于 2013-11-13 20:43 编辑

帮你把那行的错误解决了,其他的没管,现在程序无法验证带0的信息。你自己改改吧!不行了再说。
  1. class Test3{

  2. public static void main(String[] args)
  3. {
  4. System.out.println(mainMethod("1234"));


  5. }

  6. static String mainMethod(String s)//在这里报错。一直弄不懂错在哪里
  7. {
  8.     //定义单位数组和为0是的情况
  9.     String[]units={"亿","万","圆整"};
  10.     String result="";
  11.     //在字符串前面补零,使字符串长度为4的倍数
  12.     int length=s.length()%4;
  13.     if(length==1){
  14.             s="000"+s;
  15.     }else if(length==2){
  16.             s="00"+s;
  17.     }else if(length==3){
  18.             s="0"+s;
  19.     }
  20.     //转成数组
  21.     char[]ch=s.toCharArray();
  22.     //获得数组长度除以4的结果,从而决定有几个子数组和几次循环
  23.     int mod=ch.length/4;
  24.     for(int i=0, i_units=3-mod;i<mod;i++,i_units++){
  25.             char[]ch2=Arrays.copyOfRange(ch, i*4, (i*4)+4);//从左往右每次取4位组成新数组
  26.             //如果一个子数组返回结果为零,那么后面不加单位
  27.             if(read(ch2).equals("零")){//此处不能用“==”
  28.                     result=result+read(ch2);
  29.             }else if(i==0&&read(ch2).startsWith("零")){//最前面的结果不能有零
  30.                     result=result+read(ch2).substring(1)+units[i_units];                                
  31.             }else{//正常的结果
  32.                     result=result+read(ch2)+units[i_units];
  33.             }
  34.     }
  35.     return result;
  36. }
  37. private static String read(char[]ch){
  38.    
  39.     String[]num={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
  40.     String [] units={"仟","佰","拾",""};
  41.     String ss="";
  42.     //遍历
  43.     for(int i=0;i<4;i++){
  44.             String s=ch[i]+"";
  45.             //将数组内字节转换成数字
  46.             int i_num=Integer.parseInt(s);
  47.             //结合条件使用查表法获取结果
  48.             if((i_num==0&&i==3)||(i_num==0&&i==0)){
  49.                     ss=ss;
  50.             }else if(i_num==0||i==3){
  51.                     ss=ss+num[i_num];                                
  52.             }else {
  53.                      ss=ss+num[i_num]+units[i];               
  54.             }
  55.     }
  56.     //使用正则,对多余的零去掉
  57.     ss=ss.replaceAll("(.)\\1+","$$$$1");
  58.     return ss;
  59. }
  60. }
复制代码
回复 使用道具 举报
主函数里面定义方法?
回复 使用道具 举报
枫儿 来自手机 金牌黑马 2013-11-13 18:50:54
沙发
顶上,查表法……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马