2013-03-12 162 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; 

}