黑马程序员技术交流社区

标题: for 循环里 new 对象的问题 [打印本页]

作者: nuoxi0318    时间: 2013-7-24 21:35
标题: for 循环里 new 对象的问题
本帖最后由 杨兴庭 于 2013-7-25 23:04 编辑

1.需求:
txt中有200行数据,每行数据不等长,要将他读到一个二维数组里去。

2.我的做法:
先声明一个二维数组,初始化高维200,因为不知道第二维长度,所以要等读txt中的每行再确定。
每读一行,初始化一个低维,然后将该行的数据读到低维数组中。反复200次。
但是我在Main函数里print出这个二维数组里都是0啊。
谁给看下问题在哪里?
  1. int[][] a = new int[200][];
  2. try {
  3. File f = new File ("D:\\a.txt");
  4. BufferedReader br = new BufferedReader (new FileReader (f));
  5. String s = null;
  6. int i = 0;
  7. while ((s = br.readLine()) != null) {
  8. String[] str = s.split("\\s");
  9. for (int j=0 ; j<str.length ; j++) {
  10. a[i] = new int[str.length];
  11. a[i][j] = Integer.parseInt (str[j]);
  12. }
  13. i++;
  14. }
  15. } catch (IOException e) {
  16. e.printStackTrace ();
  17. }
复制代码

作者: 草貌路飞    时间: 2013-7-24 22:33
a[i] = new int[str.length]; 你的new 放到二层循环里了..每次赋值都会重建.我也是运行了才看到的..悲剧
作者: 江纳纳    时间: 2013-7-24 22:49
将第十行new 语句移到 for循环之上 ,因为如果在for循环之内,循环一次创建一个低维数组。该行的数据尚未读完,下次循环又创建一个新的低维数组将其替换。
作者: wyy283    时间: 2013-7-25 11:38
[i] = new int[str.length]; 你的new 放到二层循环里了..
作者: xwf4348    时间: 2013-7-25 12:03
原因:第十行new 语句在for循环之内,循环一次创建一个低维数组。该行的数据尚未读完,下次循环又创建一个新的低维数组将其替换。
解决:将new语句放到for循环外面即可




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2