1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
問(wèn)題是,在您的printChar2DArray方法中,您假設(shè)每個(gè)數(shù)組的長(zhǎng)度為 80,但實(shí)際上并非如此。在 Java 中,二維數(shù)組只是數(shù)組的數(shù)組。因此,當(dāng)你有這個(gè):時(shí)char[][] arr = new char[3][80],你正在創(chuàng)建一個(gè)由 3 個(gè)數(shù)組組成的數(shù)組,每個(gè)數(shù)組的長(zhǎng)度都是 80 個(gè)字符。這看起來(lái)似乎沒(méi)問(wèn)題,但在接下來(lái)的幾行中,您將使用完全不同的內(nèi)容重新初始化 3 個(gè)數(shù)組。
arr[0] = reverseByCharacter(sentence1).toCharArray();
arr[1] = reverseByWord(sentence2).toCharArray();
arr[2] = change5thPosition(sentence3).toCharArray();
現(xiàn)在這些數(shù)組的長(zhǎng)度都不為 80。每個(gè)數(shù)組都有各自字符串的長(zhǎng)度。
您可以通過(guò)兩種方式解決這個(gè)問(wèn)題(取決于您的任務(wù)實(shí)際受到的限制程度)。
首先,您可以將字符串復(fù)制到數(shù)組中,而不是將數(shù)組分配給方法的結(jié)果toCharArray。您可以通過(guò)一個(gè)簡(jiǎn)單的循環(huán)來(lái)實(shí)現(xiàn)此目的,但我不推薦這種方法,因?yàn)槟罱K會(huì)得到 80 個(gè)字符的數(shù)組,即使字符串包含的字符更少。
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];
}
其次,您可以在方法中放棄對(duì)數(shù)組長(zhǎng)度的假設(shè)printChar2DArray。我推薦這種方法,因?yàn)樗鼓拇a更加靈活。然后你的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;
}
您可以看到我已經(jīng)用length字段替換了數(shù)字,任何數(shù)組都可以訪問(wèn)該字段。
另外,這樣您就不需要初始化內(nèi)部數(shù)組,因?yàn)闊o(wú)論如何您都會(huì)在下一行中重新初始化它們。
char[][] arr = new char[3][];
arr[0] = reverseByCharacter(sentence1).toCharArray();
arr[1] = reverseByWord(sentence2).toCharArray();
arr[2] = change5thPosition(sentence3).toCharArray();
但這種方法可能不適合您的任務(wù),因?yàn)檫@樣句子可以是任意長(zhǎng)度,并且它們不會(huì)最多限制為 80 個(gè)字符。
更新- 回答評(píng)論中的問(wèn)題
要打印換行符,您可以System.out.println()不帶參數(shù)使用。這比將換行符放入數(shù)組中更好,因?yàn)樗皇蔷渥拥倪壿嫴糠帧?/p>
所以你的for循環(huán)printChar2DArray看起來(lái)像這樣:
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();
}
添加回答
舉報(bào)