簡體   English   中英

將文件讀入二維數組

[英]read file into two dimensional array

我正在嘗試將文件讀入二維數組。 當我閱讀它時,在第一部分中,值是正確的。 當我寫出來的時候,所有的值都是“ 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循環,並計算例如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. 從輸入流中讀取下一個值。
  2. 遍歷二維數組中的所有位置
  3. 在迭代時,將讀取的值寫入當前數組位置

這里的問題是您讀取一個值,然后繼續將該值寫入數組中的每個索引。 因此,完成后,數組將包含每個索引中讀取的最后一個值。

您的循環是錯誤的。 將再次在整個數組中設置最后一次讀取的值。 在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

is.read將返回字節值0-255,您需要將其轉換為char並檢查其是否有換行符。 如果是換行符,則增加當前行。

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

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM