2013-03-12 160 views
0

我正在尝试将文件读入二维数组。 当我在第一部分中阅读它时,这些值是正确的。 当我写出来时,这些值都是“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(); 
     } 
} 
+1

你的while循环有什么意义? – 2013-03-12 17:39:36

回答

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(); 
    }  
} 
0

你的错误与您在其中执行操作的顺序做。 如果我们布置代码流,步骤是。

  1. 从输入流中读取下一个值。
  2. 遍历您的二维阵列中的所有位置
  3. 在迭代写你读入当前的阵列位置的值

这里的问题是你读到一个值,然后继续写值成数组中的每个索引。因此,当你完成后,数组将包含在每个索引中读取的最后一个值。

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 
0

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

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

}