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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟伟杰 中级黑马   /  2013-1-11 09:36  /  1465 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟伟杰 于 2013-1-11 10:34 编辑
  1. import java.util.*;
  2. class  TestCollection
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int read = 0;
  7.                 ArrayList al = new ArrayList();
  8.                 System.out.println("please enter Number:");
  9.                
  10.                 while(true)
  11.                 {
  12.                         try
  13.                         {
  14.                                 read = System.in.read();//...........1
  15.                         }
  16.                         catch (Exception e)
  17.                         {
  18.                         }

  19.                         if(read=='\r'||read=='\n')
  20.                                 break;
  21.                         else
  22.                         {
  23.                                 int num = read-'0';//.....................2
  24.                                 al.add(new Integer(num));//...............3
  25.                         }        
  26.                 }

  27.                 int sum = 0;
  28.                 Iterator it = al.iterator();//.................4
  29.                 while(it.hasNext())
  30.                 {
  31.                         Integer in = (Integer)it.next();//.........................5
  32.                         sum += in.intValue();
  33.                 }
  34.                 System.out.println(sum);
  35.         }
  36. }



  37. 上面是一个通过键盘输入一个数字序列在屏幕上打印出着数列的和的小程序。思路还是很清晰的,但是它们类型的转换上不明白,求解答。
  38. 一、1那里read()后返回的类型是int类型,但是为什么有2那么的一步,把read减上字符‘0’用int类型接收呢?read()后的类型不是int吗,这做法
  39.       岂不是多此一举?
  40. 二、4那里是在ArrayList上启动迭代器再封装成Iterator类型;3那里不是已经把存进ArrayList里面的数据封装成Integer类型吗?为什么在5那里
  41.       调用next()方法取出时还要再次强转为Integer类型呢?

  42. 本人菜鸟一个,经验不足,如有错误,请多多包涵。
复制代码

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
本帖最后由 肖志锋 于 2013-1-11 22:14 编辑

1:我先回答你第一个问题,这个是因为system.in.read()接受的确实int值,但是这个int是是输入字符的ASCII码,也就是说如果你输入的是0的话,那边实际接受的是48,也就是他的字符的编码,这懂了没,如果是1-9,那么需要转成int怎么做呢?最简单的当然就是-48咯,因为‘0’对应的就是48.
2:第2个问题就涉及到泛型了,在集合中不能装i基本本数据类型,只能装Object类以及子类,所以我们只能使用基本数据类型的包装类把他们装进去,这是3的必要性。。至于4,5,则是因为你在4迭代器里面没有指定泛型,这样的话,集合会默认你装的是Object,那么Object当然是不能直接做加减,所以需要去把他向下转型成原来的类型,然后包装类自动拆箱得到你要的结果。当然你这里是用方法取得包装类的值的,其实最简单的让他自动拆箱就可以了。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
肖志锋 发表于 2013-1-11 22:06
1:我先回答你第一个问题,这个是因为system.in.read()接受的确实int值,但是这个int是是输入字符的ASCII码 ...

解释的很到位。
回复 使用道具 举报
'0' 是一个字符, 遇到Int 类型的时候 会计算成ASCII码,  比如说 你输入的是1  然后 减去'0' ,  这个值就是 1- 48 = -47 ,  至于第2个, 是因为 it.next() 里有个泛型, 默认都是Object的, 如果要获取到与你所对应的类型计算, 就必须要强转成你所写的那个类型后才能计算

评分

参与人数 2技术分 +1 黑马币 +20 收起 理由
高境 + 1 神马都是浮云
李培根 + 20 赞一个!

查看全部评分

回复 使用道具 举报
肖志锋 发表于 2013-1-11 22:06
1:我先回答你第一个问题,这个是因为system.in.read()接受的确实int值,但是这个int是是输入字符的ASCII码 ...

:handshake
回复 使用道具 举报
张云杰 发表于 2013-1-11 22:47
'0' 是一个字符, 遇到Int 类型的时候 会计算成ASCII码,  比如说 你输入的是1  然后 减去'0' ,  这个值就是  ...

:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马