1 回答

TA貢獻1817條經驗 獲得超6個贊
問題是,在您的printChar2DArray方法中,您假設每個數組的長度為 80,但實際上并非如此。在 Java 中,二維數組只是數組的數組。因此,當你有這個:時char[][] arr = new char[3][80],你正在創建一個由 3 個數組組成的數組,每個數組的長度都是 80 個字符。這看起來似乎沒問題,但在接下來的幾行中,您將使用完全不同的內容重新初始化 3 個數組。
arr[0] = reverseByCharacter(sentence1).toCharArray();
arr[1] = reverseByWord(sentence2).toCharArray();
arr[2] = change5thPosition(sentence3).toCharArray();
現在這些數組的長度都不為 80。每個數組都有各自字符串的長度。
您可以通過兩種方式解決這個問題(取決于您的任務實際受到的限制程度)。
首先,您可以將字符串復制到數組中,而不是將數組分配給方法的結果toCharArray。您可以通過一個簡單的循環來實現此目的,但我不推薦這種方法,因為您最終會得到 80 個字符的數組,即使字符串包含的字符更少。
String firstSentence = reverseByCharacter(sentence1);
for (int i = 0; i < firstSentence.length(); i++) {
arr[0][i] = firstSentence.charAt(i);
}
或者:
char[] firstSentence = reverseByCharacter(sentence1).toCharArray();
for (int i = 0; i < firstSentence.length; i++) {
arr[0][i] = firstSentence[i];
}
其次,您可以在方法中放棄對數組長度的假設printChar2DArray。我推薦這種方法,因為它使您的代碼更加靈活。然后你的printChar2DArray方法將如下所示:
public static String printChar2DArray(char[][] arr){
for (int x = 0; x < arr.length; x++) {
for (int y = 0; y < arr[x].length; y++) {
// just a print so it does not make new lines for every char
System.out.print(arr[x][y]);
}
}
return null;
}
您可以看到我已經用length字段替換了數字,任何數組都可以訪問該字段。
另外,這樣您就不需要初始化內部數組,因為無論如何您都會在下一行中重新初始化它們。
char[][] arr = new char[3][];
arr[0] = reverseByCharacter(sentence1).toCharArray();
arr[1] = reverseByWord(sentence2).toCharArray();
arr[2] = change5thPosition(sentence3).toCharArray();
但這種方法可能不適合您的任務,因為這樣句子可以是任意長度,并且它們不會最多限制為 80 個字符。
更新- 回答評論中的問題
要打印換行符,您可以System.out.println()不帶參數使用。這比將換行符放入數組中更好,因為它不是句子的邏輯部分。
所以你的for循環printChar2DArray看起來像這樣:
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 80; y++) {
// just a print so it does not make new lines for every char
System.out.print(arr[x][y]);
}
System.out.println();
}
添加回答
舉報