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

4 回答 4

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();
    }     
} 
于 2013-03-12T17:41:46.630 回答
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;

} 
于 2013-03-12T17:52:21.857 回答
0

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

  1. 从输入流中读取下一个值。
  2. 遍历二维数组中的所有位置
  3. 迭代时将读取的值写入当前数组位置

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

于 2013-03-12T17:43:45.600 回答
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
于 2013-03-12T17:45:56.450 回答