我正在做一個作業,我們必須從文件中獲取字符并將其存儲在二維數組中。我們不允許在任何地方發布我們的代碼,所以我將使用偽代碼。如果不清楚,請告訴我。fillFromFile (parameters){ Scanner input = new Scanner(new FileReader(fileName));//from parameter char[][] returnChar = new char[parm][parm];//gotten from parameters String line = input.nextLine(); String[] spliter = null; int count = 0; while (input.hasNextLine and count < row) { line = input.nextLine(); spliter = line.split(" ", 2); count++; for (int i = 0; to returncharLength; increment i) { for (int j = 0; to returnchar[i]Length; increment j) { returnChar[i][j] = spliter[0].charAt(j); } } } return returnChar;}如果我直接從方法中打印出來,則會顯示正確的值,但我們無法從方法中打印。已經有一個 toString() 方法可以處理這個問題。返回的二維數組只是最后一個字符。例如,如果這是預期值,r er eo pb n這就是返回的內容b nb nb nb n我嘗試過在返回之前和之后進行深度復制,但沒有區別。我的深復制方法如下所示:private static char[][] deepCopy (char [][] data){ char [][] newArray = new char [//][//]; for (int i = 0; i < length i++) { for (int j = 0; j < colLength; j++) { newArray[i][j] = data[i][j]; } } return newArray;}我認為 while 循環在退出之前會覆蓋所有數據。我怎樣才能解決這個問題 ?如果有不清楚的地方,請告訴我,我會編輯我的問題。我還嘗試在方法的不同部分返回二維數組這是我如何使用返回的二維數組的示例變量X = new ClassName (2dArrayThatWasReturned); 返回變量X;->variableX 是 ClassName 類型,構造函數接受一個二維數組 ->傳遞的二維數組將把它的值分配給實例二維數組。實例二維數組是打印的數組
2 回答

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
問題是你的循環:
for (int i = 0; to returncharLength; increment i) {
for (int j = 0; to returnchar[i]Length; increment j) {
returnChar[i][j] = spliter[0].charAt(j);
}
}
將覆蓋整個數組,因為每次都從 row 轉到 , 0。returnchar.length相反,您只需要填充最后一行之后的下一行。您可以for按如下方式重寫循環:
for (int r=0; r<returnchar.length; r++) { // "r" for row
String line = input.nextLine();
String[] splitter = line.split(" ", 2);
for (int c=0; c<returnchar[r].length; c++) { // "c" for column
returnchar[r][c] = splitter[c];
}
}

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
這是打印漂亮的 2D 數組的方法:
for (char[] x : returnChar) { System.out.println(Arrays.toString(x)); }
添加回答
舉報
0/150
提交
取消