有没有办法用其他数组初始化二维数组?

我被布置了如下家庭作业:

从控制台应用程序中读取三个句子。每句话不应超过80个字符。然后,将每个输入句子中的每个字符复制到 [3 x 80] 字符数组中。

第一个句子应以字符相反的顺序加载到第一行 - 例如,“mary had a little羔羊”应作为“bmal elttil a dah yram”加载到数组中。

第二句话应该以单词相反的顺序加载到第二行中 - 例如,“mary had a littlelamb”应该加载到数组中,如“lamb little a had mary”。

第三句应该加载到第三行,如果数组的索引可以被 5 整除,则相应的字符将被字母“z”替换 - 例如,“mary had a littlelamb”应该加载到数组为“mary zad azlittze lazb”——也就是说,索引位置 5、10、15 和 20 中的字符被“z”替换。请注意,空格也是一个字符,并且索引从位置 0 开始。

现在在控制台上打印字符数组的内容。

下面代码中的方法、返回类型和参数都是根据需要指定的,因此我无法更改任何这些信息。我在初始化二维数组时遇到问题。指令说句子必须加载到已经颠倒的数组中等,但是执行此操作的方法的参数需要字符串。我认为这意味着我应该将这些行作为字符串读取,然后调用方法来修改它们,然后使用 toCharyArray 来转换它们,然后再将它们加载到二维数组中。我不明白如何使用 char 数组的值初始化 2D 数组。我可以使用某种 for 循环吗?另一个问题是,在主方法内部无法进行任何处理,但在说明中没有我可以调用来填充数组的方法。


慕斯王
浏览 97回答 1
1回答

慕的地6264312

问题是,在您的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++) {&nbsp; &nbsp; arr[0][i] = firstSentence.charAt(i);}或者:char[] firstSentence = reverseByCharacter(sentence1).toCharArray();for (int i = 0; i < firstSentence.length; i++) {&nbsp; &nbsp; arr[0][i] = firstSentence[i];}其次,您可以在方法中放弃对数组长度的假设printChar2DArray。我推荐这种方法,因为它使您的代码更加灵活。然后你的printChar2DArray方法将如下所示:public static String printChar2DArray(char[][] arr){&nbsp; &nbsp; for (int x = 0; x < arr.length; x++) {&nbsp; &nbsp; &nbsp; &nbsp; for (int y = 0; y < arr[x].length; y++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // just a print so it does not make new lines for every char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.print(arr[x][y]);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; 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++) {&nbsp; &nbsp; for (int y = 0; y < 80; y++) {&nbsp; &nbsp; &nbsp; &nbsp; // just a print so it does not make new lines for every char&nbsp; &nbsp; &nbsp; &nbsp; System.out.print(arr[x][y]);&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java