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();
}
添加回答
举报