为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2024-01-28 20:27:14
我被布置了如下家庭作业:从控制台应用程序中读取三个句子。每句话不应超过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 循环吗?另一个问题是,在主方法内部无法进行任何处理,但在说明中没有我可以调用来填充数组的方法。
查看完整描述

1 回答

?
慕的地6264312

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();

}


查看完整回答
反对 回复 2024-01-28
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信