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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小_郭

中级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 小_郭 中级黑马   /  2014-7-24 10:39  /  3973 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小_郭 于 2014-8-7 00:28 编辑
  1. private String toHanStr(String numStr)
  2.         {
  3.                 String result = "";
  4.                 int numLen = numStr.length();
  5.                 //一次遍历数字字符串的每一个元素
  6.                 for (int i = 0;i < numLen ;i++ )
  7.                 {
  8.                         //把char行数字转换成int型数字,其ASCII码值相差48
  9.                         //因此吧char型数字减去48得到int型数字,'4'——>4

  10.                         int num = numStr.charAt(i)-48;
  11.                                 //public char charAt(int index)返回指定索引处的 char 值。
  12.                                 //索引范围为从 0 到 length() - 1。
  13.                                 //序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,
  14.                                 //依此类推,这类似于数组索引。
  15.                                 //如果索引指定的 char 值是代理项,则返回代理项值
  16.                         if (i != numLen - 1 && num != 0)//如果不是最后一个数字,而且数字不为零,则添加单位(千百十)
  17.                         {
  18. <font color="#ff0000">                                if (i = 0 && num = 0) continue;//   这句有错吗?   编译时给出的错误: 二元运算符 '&&' 的操作数类型错误</font>
  19.                                 result += hanArr[num] + unitArr[numLen - 2 - i];
  20.                                 //否则不添加单位
  21.                         }
  22.                         else
  23.                         {
  24.                                 result += hanArr[num];
  25.                         }


  26.                 }
  27.                 return result += "元";
  28.         }
复制代码

14 个回复

倒序浏览
masai158 发表于 2014-7-24 10:56
(i != numLen - 1 )&&( num != 0)
true                                true
结果 true

恩恩   结了···  还是太粗心了:handshake
回复 使用道具 举报
if中能用continue 吗??
回复 使用道具 举报
masai158 发表于 2014-7-24 10:46
if中能用continue 吗??

if  是在 for循环里的啊:o
回复 使用道具 举报

第一次发帖   写的不太清楚   抱歉


编辑器 给出的错误是      编译时给出的错误: 二元运算符 '&&' 的操作数类型错误
回复 使用道具 举报
本帖最后由 天蚕飞 于 2014-7-24 10:54 编辑

不了解java只知道 c,但是java和在分支控制这块应该是一样的,首先明确你这句if肯定是错的。推荐写法if((0 == i) && (0 == num))。注意 两点:把常量写在前面,,因为常量不能使左值,防止自己手误写“==“写成”=“;还有小的表达式都应该用”()“括起来,在条件比较多的情况下,可以防止少些括号
回复 使用道具 举报
(i != numLen - 1 )&&( num != 0)
试一下吧。
回复 使用道具 举报
你要把=换成==吧,除了Boolean型的能在if的条件中用=号,int型的不可以吧。
回复 使用道具 举报

(i != numLen - 1 )&&( num != 0)
true                                true
结果 true

如果是要判断2边的值是否相等。就 ==。。。该结贴了
回复 使用道具 举报
masai158 发表于 2014-7-24 10:53
(i != numLen - 1 )&&( num != 0)
试一下吧。

if (i != numLen - 1 && num != 0)   这一句编辑器没报错 , 是后面这句if (i = 0 && num = 0) continue;
回复 使用道具 举报
天蚕飞 发表于 2014-7-24 10:52
不了解java只知道 c,但是java和在分支控制这块应该是一样的,首先明确你这句if肯定是错的。推荐写法if((0  ...

果然   好的习惯很重要···      =   与  ==   谢谢   以后还得多注意细节!
回复 使用道具 举报
还有一个错误   错误的那个if语句需要放到当前if的外部才有作用  完整的代码  如下:
  1. import java.util.Arrays;

  2. public class Num2Rmb
  3. {
  4.         private String [] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

  5.         private String [] unitArr = {"十","百","千"};

  6.         /**
  7.         *把一个浮点数分解成整数和小数两个部分的字符串
  8.         * @param num 需要分解的浮点数
  9.         * @return 分解出来的整数与小数部分,第一个数组元素为整数部分,第二个数组元素为小数部分。
  10.         */

  11.         private String [] divide(double num)
  12.         {
  13.                 long zheng = (long)num;
  14.                 long xiao = Math.round((num - zheng) * 100);
  15.                 //浮点数减去整数部分,得到小数部分乘以100表示去两位小数。

  16.                 //round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,
  17.                 //所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果为-11.
  18.                 //Math.round( )符合这样的规律:小数点后大于5全部加,等于5正数加,小于5全不加。

  19.                 return new String [] {zheng + "", String.valueOf(xiao)};
  20.         }
  21.        
  22.         /**
  23.         *把一个四位的数字字符串变成汉字字符串。
  24.         * @param numStr  需要被转换的四位的数字字符串。
  25.         * @return 四位的数字字符串被转换成的汉字字符串。
  26.         */



  27.         private String toHanStr(String numStr)
  28.         {
  29.                 String result = "";
  30.                 int numLen = numStr.length();
  31.                 //一次遍历数字字符串的每一个元素
  32.                 for (int i = 0;i < numLen ;i++ )
  33.                 {
  34.                         //把char行数字转换成int型数字,其ASCII码值相差48
  35.                         //因此吧char型数字减去48得到int型数字,'4'——>4

  36.                         int num = numStr.charAt(i)-48;
  37.                                 //public char charAt(int index)返回指定索引处的 char 值。
  38.                                 //索引范围为从 0 到 length() - 1。
  39.                                 //序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,
  40.                                 //依此类推,这类似于数组索引。
  41.                                 //如果索引指定的 char 值是代理项,则返回代理项值
  42.                         if ((i == 0) && (num == 0)) continue;
  43.                         if (i != numLen - 1 && num != 0)//如果不是最后一个数字,而且数字不为零,则添加单位(千百十)
  44.                         {
  45.                                
  46.                                 result += hanArr[num] + unitArr[numLen - 2 - i];
  47.                                 //否则不添加单位
  48.                         }
  49.                         else
  50.                         {
  51.                                 result += hanArr[num];
  52.                         }


  53.                 }
  54.                 return result += "元";
  55.         }

  56.         public static void main(String[] args)
  57.         {
  58.                 Num2Rmb nr = new Num2Rmb();

  59.                 System.out.println(Arrays.toString(nr.divide(1341435.1435)));
  60.                 System.out.println(nr.toHanStr("0343"));
  61.                 System.out.println(nr.toHanStr("9007"));
  62.                 System.out.println(nr.toHanStr("1079"));
  63.         }
  64. }
复制代码



实现的功能:  将一个4位数字的字符串转换成中文读法 ,  还在完善    有兴趣的可以试一下  再做交流

还存在的问题:
1、两个零连在一起该如何处理?
2、最低位是零怎么办?
回复 使用道具 举报
用枚举可以试试看看
回复 使用道具 举报
能用的 应该,测试下呗。
回复 使用道具 举报
if (i = 0 && num = 0) continue;//   这句有错吗?   编译时给出的错误: 二元运算符 '&&' 的操作数类型错误</font>
这不是把0赋值给i吗...{:3_52:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马