也许我一直在看这个,因为我找不到问题,但它应该是简单的。我在行上收到了一个ArrayIndexOutOfBounds异常:
nextWord = MyArray[i + 1].toLowerCase();
谁能明白为什么?
String currentWord = "";
String nextWord = "";
for (int i = 0; i <= MyArray.length; i++) {
// If not at the end of the array
if (MyArray.length > 0 && i < MyArray.length) {
currentWord = MyArray[i].toLowerCase();
nextWord = MyArray[i + 1].toLowerCase(); /* EXCEPTION */
System.out.println("CURRENT WORD: " + currentWord);
System.out.println("NEXT WORD: " + nextWord);
}
}
谢谢!
答案 0 :(得分:4)
MyArray.length - 1
是数组的最后一个元素。 i
中if
的最大值MyArray.length - 1
为i + 1
。并且您在MyArray.length
中将其增加一个,因此您获得了{{1}}。当然你会收到一个例外:)
答案 1 :(得分:3)
数组索引从0
到array.length - 1
。
因此,典型的数组循环结构是:
for (int i=0; i<array.length; i++) // do stuff
在你的情况下,你有一个单一的位置向前看,所以为了避免越界,你需要将该循环限制在一个位置:
for (int i=0; i<array.length-1; i++) // do stuff
如果你将索引的范围放在循环之外,在循环之后它将具有正确的值来分配最后一个currentWord
:
int i=0;
for (; i<array.length-1; i++) // do stuff
// here i == array.length - 1, provided you don't mess with i in the "do stuff" part
答案 2 :(得分:0)
因为如果我&lt; MyArray.Length,然后i + 1可以超出范围。例如,如果i = MyArray.Length - 1(上一个有效索引),那么i + 1 = MyArray.Length,这是超出界限的。
答案 3 :(得分:0)
对于数组MyArray
,有效索引为[0,MyArray.length-1]
。由于对于给定的i
您正在访问索引为i+1
的元素,因此i
的有效值为[0,MyArray.length-2]
。
所以你可以这样做:
for (int i = 0; i <= MyArray.length-2; i++) {
// no need of the if check anymore.
currentWord = MyArray[i].toLowerCase();
nextWord = MyArray[i + 1].toLowerCase();
答案 4 :(得分:0)
只需修复您的检查,即您不在阵列的最后一个成员。如果您位于数组的最后一个成员,则向其中添加一个将超出数组,因此您将获得该异常。你也正在跳过第一个元素,并循环遍历数组的末尾(因为你从零开始,转到长度是一个额外的循环)
for (int i = 0; i < MyArray.length; i++) {
currentWord = MyArray[i].toLowerCase();
System.out.println("CURRENT WORD: " + currentWord);
// If not at the end of the array
if (i != MyArray.length - 1) {
nextWord = MyArray[i + 1].toLowerCase();
System.out.println("NEXT WORD: " + nextWord);
}
}