将文件读入二维数组

时间:2013-03-12 17:36:27

标签: java java-io

我正在尝试将文件读入二维数组。 当我读到它时,在第一部分中,值是正确的。 当我把它写出来时,值都是“10”。 我该如何解决这个问题?

public static void readagain() {

     try {
            InputStream is = new FileInputStream("C:\\test.new");
            int m = 16;
            int n = 16;
            int[][] a = new int[m][n];
            int value=0; 

            while ((value = is.read()) != -1) { 
                for (int i = 0; i < m; i++) {
                    for (int j = 0; j < n; j++) {
                       try{
                        a[i][j] = value;
                           System.out.println("number is "+ a[i][j]);
                        }
                       catch (Exception e) {
                            e.printStackTrace();
                        }
                    }//j
                } //i         
            } 

            for (int i = 0; i < m; i++) {
                    for (int j = 0; j < n; j++) {
                        System.out.println("number is "+a[i][j]);
                    }
                }
        } 
      catch (Exception e) {
            e.printStackTrace();
        }
}

4 个答案:

答案 0 :(得分:3)

你的第一个循环看起来会用最后一个值填充你的整个数组,而且它们都是一样的。

似乎正在发生的事情,是你在值之后获取值,然后每次都覆盖数组中的所有值。

我建议只使用1个循环,然后计算ij应该是什么:

for( int x=0-; (value = is.read()) != -1) && x < m*n; x++) { 

   int i = x/n;
   int j = x%n;
   try{
    a[i][j] = value;
       System.out.println("number is "+ a[i][j]);
    }
   catch (Exception e) {
        e.printStackTrace();
    }     
} 

答案 1 :(得分:0)

您的错误与您执行操作的顺序有关。 如果我们列出你的代码流程,那么步骤就是。

  1. 从输入流中读取下一个值。
  2. 迭代二维数组中的所有位置
  3. 迭代时将您读取的值写入当前数组位置
  4. 这里的问题是您读取了一个值,然后继续将该值写入数组中的每个索引。因此,完成后,数组将包含每个索引中读取的最后一个值。

答案 2 :(得分:0)

你的循环是错误的。读取的最后一个值再次在整个数组中设置。在for循环中读取值将起作用。

for (int i = 0; i < m; i++) {
   for (int j = 0; j < n; j++) {
      try{
        int value = is.read();
        if (value == -1) break;
         a[i][j] = value;
         System.out.println("number is "+ a[i][j]);
        }
        catch (Exception e) {
          e.printStackTrace();
        }
    }//j
 } //i

答案 3 :(得分:0)

is.read将返回您需要将其转换为char的字节值0-255并检查它是否换行。 如果是换行符,则增加当前行。

int row = 0;
int col=0;
while ((value = is.read()) != -1) { 
    if(((char) value) == '\n'){
        row++;
        col=0;
    }
    a[row][col++] = value;

} 
相关问题