反向打印数组中的单词
Printing words from an array in reverse
我有一个任务需要从数组中反向打印单词(单词本身)。这就是任务状态:
创建一个名为“wordList”的单词数组,并分配值“Stressed”、“Parts”、“Straw”、“Keep”、“Wolf”
创建一个名为“reversedWord”的字符串并且不为其赋值。
与上述挑战类似,但是,不是颠倒句子,而是颠倒字母的顺序
在每个字符串中。
一个。您将需要创建一个 for 循环来依次访问每个单词。立即在循环内设置
‘reversedWord = “”;’
b。然后在第一个内部创建另一个 for 循环以向后迭代当前
字。每次迭代更新‘reversedWord’的值。
c。在屏幕上打印反转的单词。
延伸挑战:处理单词,使其正确地倒着读。 (压力变成甜点)
我不知道我是否只是不理解任务的措辞,但这是我目前的代码:
String[] wordList = {"Stressed", "Parts", "Straw", "Keep", "Wolf"};
String reversedWord;
for (int i = wordList.length; i >= 0; i++) {
reversedWord = "";
for (int j = wordList[i].length() - 1; i >= 0; j--) {
reversedWord += wordList[i].charAt(j);
System.out.println(reversedWord);
}
}
当我 运行 它给了我这个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at Main.main(Main.java:22)
任何帮助解释都会有所帮助。
这里有一些问题。在行
for (int i = wordList.length; i >= 0; i++) {
您将 i
设置为 wordList 的长度,即 5。不过请记住,数组索引从 0 开始。因此 wordList 的有效索引为 0、1、2、3 , 和 4,但不是 5。要解决此问题,您只需从长度中减去 1。
for (int i = wordList.length - 1; i >= 0; i++) {
下一个问题是您在每个循环结束时增加 i
。由于您似乎在尝试向后迭代,因此您会想要减少 i
,而不是增加它。
for (int i = wordList.length - 1; i >= 0; i--) {
有一个更简单的解决方案,使用 Java 的 StringBuilder class:
public static void main(String[] args) {
String[] wordList = {"Stressed", "Parts", "Straw", "Keep", "Wolf"};
for (int i = 0; i < wordList.length; i++) {
String word = wordList[i]; // Get the word from array
word = new StringBuilder(word).reverse().toString(); // use StringBuilder to reverse the word
wordList[i] = word; // put word back in the array
}
System.out.println(Arrays.asList(wordList));
}
这输出
[dessertS, straP, wartS, peeK, floW]
更新:
为了正确阅读单词(第一个字符大写),您可以这样做:
word = word.toLowerCase();
word = word.replace(word.substring(0,1), word.substring(0,1).toUpperCase());
wordList[i] = word; // put word back in the array
有更有效的方法可以做到这一点,但对您来说更容易理解。这显然输出:
[Desserts, Strap, Warts, Peek, Flow]
substring(0,1)
returns 第一个字符(从索引 0 到索引 1 的子字符串;其中最后一个索引不包括在内)作为 String
。然后,您将用大写子字符串替换相同的子字符串。
我有一个任务需要从数组中反向打印单词(单词本身)。这就是任务状态:
创建一个名为“wordList”的单词数组,并分配值“Stressed”、“Parts”、“Straw”、“Keep”、“Wolf”
创建一个名为“reversedWord”的字符串并且不为其赋值。
与上述挑战类似,但是,不是颠倒句子,而是颠倒字母的顺序
在每个字符串中。
一个。您将需要创建一个 for 循环来依次访问每个单词。立即在循环内设置
‘reversedWord = “”;’
b。然后在第一个内部创建另一个 for 循环以向后迭代当前
字。每次迭代更新‘reversedWord’的值。
c。在屏幕上打印反转的单词。
延伸挑战:处理单词,使其正确地倒着读。 (压力变成甜点)
我不知道我是否只是不理解任务的措辞,但这是我目前的代码:
String[] wordList = {"Stressed", "Parts", "Straw", "Keep", "Wolf"};
String reversedWord;
for (int i = wordList.length; i >= 0; i++) {
reversedWord = "";
for (int j = wordList[i].length() - 1; i >= 0; j--) {
reversedWord += wordList[i].charAt(j);
System.out.println(reversedWord);
}
}
当我 运行 它给了我这个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at Main.main(Main.java:22)
任何帮助解释都会有所帮助。
这里有一些问题。在行
for (int i = wordList.length; i >= 0; i++) {
您将 i
设置为 wordList 的长度,即 5。不过请记住,数组索引从 0 开始。因此 wordList 的有效索引为 0、1、2、3 , 和 4,但不是 5。要解决此问题,您只需从长度中减去 1。
for (int i = wordList.length - 1; i >= 0; i++) {
下一个问题是您在每个循环结束时增加 i
。由于您似乎在尝试向后迭代,因此您会想要减少 i
,而不是增加它。
for (int i = wordList.length - 1; i >= 0; i--) {
有一个更简单的解决方案,使用 Java 的 StringBuilder class:
public static void main(String[] args) {
String[] wordList = {"Stressed", "Parts", "Straw", "Keep", "Wolf"};
for (int i = 0; i < wordList.length; i++) {
String word = wordList[i]; // Get the word from array
word = new StringBuilder(word).reverse().toString(); // use StringBuilder to reverse the word
wordList[i] = word; // put word back in the array
}
System.out.println(Arrays.asList(wordList));
}
这输出
[dessertS, straP, wartS, peeK, floW]
更新: 为了正确阅读单词(第一个字符大写),您可以这样做:
word = word.toLowerCase();
word = word.replace(word.substring(0,1), word.substring(0,1).toUpperCase());
wordList[i] = word; // put word back in the array
有更有效的方法可以做到这一点,但对您来说更容易理解。这显然输出:
[Desserts, Strap, Warts, Peek, Flow]
substring(0,1)
returns 第一个字符(从索引 0 到索引 1 的子字符串;其中最后一个索引不包括在内)作为 String
。然后,您将用大写子字符串替换相同的子字符串。