[英]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循環,並計算例如i
和j
:
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();
}
}
您的錯誤與執行操作的順序有關。 如果我們對您的代碼流程進行布局,則步驟如下。
這里的問題是您讀取一個值,然后繼續將該值寫入數組中的每個索引。 因此,完成后,數組將包含每個索引中讀取的最后一個值。
您的循環是錯誤的。 將再次在整個數組中設置最后一次讀取的值。 在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.