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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-4-10 00:24  /  1979 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-4-10 01:58 编辑

从屏幕输入123,则把1,2,3进行相加,等6
      输入567,则把5,6,7进行相加,等18
代码如下:
  1. import java.util.Vector;
  2. import java.util.Enumeration;
  3. public class Test03
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                
  8.                 Vector v = new Vector();
  9.                 Enumeration e;
  10.                 int ch=0;
  11.                 int intObj=0;
  12.                         
  13.                 while(true)
  14.                 {
  15.                         try{ch = System.in.read();}catch(Exception ex){ex.printStackTrace();}//从输入流读取一个字节的内容保存到ch                        
  16.                         switch(ch)
  17.                         {
  18.                                 case '\r':break;  //如果读取到的是回车符,则不处理
  19.                                 case '\n':        //如果读取到的是换行符,则:

  20.                                         e = v.elements();  //返回v集合中的元素的枚举
  21.                                         int sum = 0;
  22.                                         while(e.hasMoreElements())  //判断枚举里是否还有元素
  23.                                         {
  24.                                                 intObj = ((Integer)e.nextElement()).intValue(); //取出枚举里的一个元素并转化为int值。
  25.                                                 System.out.print(intObj + ", ");   //打印出来的int值
  26.                                                 sum += intObj;        //把所有的把所有取出来的int值求和
  27.                                         }
  28.                                        
  29.                                         System.out.println("相加的结果为:" + sum);
  30.                                         v.clear(); //清除v集合中的所有元素

  31.                                 default:          //如果读取到的是回车符、换行符以外的数据,则:
  32.                                         v.addElement(new Integer(ch - '0')); //把这个数据包装成Integer,并添加到v集合里去。
  33.                         }
  34.                 }
  35.         }        
  36. }
复制代码
这是我输三次12的运行结果(红色字是运行结果):
第一次输入12:
           1, 2, 相加的结果为:3
第二次输入12:
           -38, 1, 2, 相加的结果为:-35
第三次输入12:
           -38, 1, 2, 相加的结果为:-35
问题,第二次输入12的时候,那个-38的数字是怎么来的?

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
贠(yun)靖 + 1
刘士 + 1 小错误,太容易忽视了。。。。.

查看全部评分

7 个回复

倒序浏览
本帖最后由 刘士 于 2012-4-10 01:16 编辑

-38的由来是因为,换行符是 10, ‘0’ 是 48.

v.addElement(new Integer(ch - '0')); //把这个数据包装成Integer,并添加到v集合里去。

这句把他们相减得到了 -38.。。。。

我在尝试帮你把代码修改好。请稍等候。
由于自己犯了一些小错误,所以忙乎了半天才改好。
  1. import java.util.Vector;
  2. import java.util.Enumeration;

  3. public class Test03 {
  4.         public static void main(String[] args) {

  5.                 Vector v = new Vector();
  6.                 Enumeration e;
  7.                 int ch = 0;
  8.                 int intObj = 0;

  9.                 while (true) {
  10.                         try {
  11.                                 ch = System.in.read();
  12.                         } catch (Exception ex) {
  13.                                 ex.printStackTrace();
  14.                         }// 从输入流读取一个字节的内容保存到ch
  15.                                 // switch (ch) {
  16.                                 // case '\r':
  17.                         if (ch == '\r')
  18.                                 continue; // 如果读取到的是回车符,则不处理
  19.                         // case '\n': // 如果读取到的是换行符,则:
  20.                         else if (ch == '\n') {
  21.                                 e = v.elements(); // 返回v集合中的元素的枚举
  22.                                 int sum = 0;
  23.                                 while (e.hasMoreElements()) // 判断枚举里是否还有元素
  24.                                 {
  25.                                         intObj = ((Integer) e.nextElement()).intValue(); // 取出枚举里的一个元素并转化为int值。
  26.                                         System.out.print(intObj + ", "); // 打印出来的int值
  27.                                         sum += intObj; // 把所有的把所有取出来的int值求和
  28.                                 }
  29.                                 System.out.println();
  30.                                 System.out.println("相加的结果为:" + sum);
  31.                         } else
  32.                                 // default: // 如果读取到的是回车符、换行符以外的数据,则:
  33.                                 v.addElement(new Integer(ch - '0')); // 把这个数据包装成Integer,并添加到v集合里去。
  34.                         // }
  35.                 }
  36.         }
  37. }
复制代码
123
1, 2, 3,
相加的结果为:6
123
1, 2, 3, 1, 2, 3,
相加的结果为:12
123
1, 2, 3, 1, 2, 3, 1, 2, 3,
相加的结果为:18
123
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,
相加的结果为:24
123
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,
相加的结果为:30

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
好的,谢谢您!
回复 使用道具 举报
戴振良 发表于 2012-4-10 00:43
好的,谢谢您!

修改好了,哥哥,发表一下意见。
回复 使用道具 举报
刘士 发表于 2012-4-10 01:21
修改好了,哥哥,发表一下意见。

非常感谢,首先您的代码是正常的,只要在“  System.out.println("相加的结果为:" + sum); ”语句后面加一句: " v.clear(); "就完美了,则每次输12结果都是3
我用的是switch语句,您用的是if语句,看起来都差不多呀,我坚信用哪个语句都是可以的,我想问的是
在我的代码里,为什么第一次输12的时候没有-38,第2次才有?
回复 使用道具 举报
刘士 发表于 2012-4-10 01:21
修改好了,哥哥,发表一下意见。

我代码也修改了一下,您复制再运行下看吧,希望您不要改为if选择语句,帮我查看到底是什么原因跑个-38出来的,您上面说是输入了回车,而我用的是switch,当输入回车的时候会执行 case '\n':下面的语句,不是吗?怎么会添加到集合里去呢?
回复 使用道具 举报
刘士 中级黑马 2012-4-10 02:03:51
7#
你我都犯了一个错误。
那就是在:
case '\n':        //如果读取到的是换行符,则:

的后面没有加上
break;

加上就可以了。
回复 使用道具 举报
戴振良 黑马帝 2012-4-10 02:45:40
8#
刘士 发表于 2012-4-10 02:03
你我都犯了一个错误。
那就是在:

哦,竟然犯着低级错误!谢谢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马