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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nuoxi0318 中级黑马   /  2013-7-24 21:35  /  2731 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

正序浏览
原因:第十行new 语句在for循环之内,循环一次创建一个低维数组。该行的数据尚未读完,下次循环又创建一个新的低维数组将其替换。
解决:将new语句放到for循环外面即可

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
[i] = new int[str.length]; 你的new 放到二层循环里了..

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
将第十行new 语句移到 for循环之上 ,因为如果在for循环之内,循环一次创建一个低维数组。该行的数据尚未读完,下次循环又创建一个新的低维数组将其替换。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
a[i] = new int[str.length]; 你的new 放到二层循环里了..每次赋值都会重建.我也是运行了才看到的..悲剧

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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