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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张旺达 于 2013-4-22 12:17 编辑
  1. public class Num2Rmb
  2. {
  3. private String[] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  4. private String[] unitArr = {"拾","佰","仟"};

  5. private String toHanStr(String numStr)
  6. {
  7. String result = "";
  8. int numLen = numStr.length();

  9. for (int i=0; i<numLen; i++)
  10. {
  11. //将char型数字转换成int型数字,因为ASCII码值正好相差48
  12. int num = numStr.charAt(i)-48;

  13. //如果不是最后一位数字,而且数字不是零,需要添加单位(千、百、十)
  14. if(i!=numLen-1 && num !=0)
  15. {
  16. result += hanArr[num] + unitArr[numLen-2-i];   ---------------------- //     问题在这里!! 为什么是unitArr[numLen-2-i] ? 求解。
  17. }
  18. //不需要单位
  19. else
  20. {
  21. result += hanArr[num];
  22. }
  23. }
  24. return result;
  25. }

  26. public static void main(String[] args)
  27. {
  28. Num2Rmb nr = new Num2Rmb();

  29. System.out.println(nr.toHanStr("6109"));
  30. }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

2 个回复

倒序浏览
你可以这么思考:假如你在做这道题的时候,写到result += hanArr[num] + unitArr[numLen-2-i];这行代码的时候,不知道该如何定义unitArr[] 的角标, 你可以用一个数试试,比如你的6109. numLen=4, 你的当循环开始运行的时候,i=0,也就是在读你的数字最左边的一位,很明显numlen-1!=0而且num!=0. 此时就需要添加单位了。你的numLen=4,在i=0 的时候,循环读取的是千位上的数字,需要“千”这个单位,“千”=unitArr[2].这样算出 unitArr[ ]里面的角标需要做什么运算即可。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
因为unitArr.length=3,所以numLen-x-i<3,当i=0,1,2;可算出x=2;  大概就是这个意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马