当我将代码从 for 循环更改为 while 循环时,我不断收到相同的错误消息。 For 循环代码工作正常但不是这个。我唯一添加的是名为 printArray 的额外方法,因为在没有其他方法的情况下,当我为第二个 while 循环定义 i 时,它一直说你的 i 已经在方法“reverseNumbersWhile”中定义。
import java.util.*;
public class ReverseNumbersWhile
{
//Declare Variables
public static final int num = 10;
public static int nums[] = new int[num];
public void reverseNumbersWhile(int num)
{
//Create scanner and user input
Scanner input = new Scanner(System.in);
System.out.print("Enter 10 numbers : ");
//Define i
int i = 0;
//For loop to fill the array
while(i < nums.length)
{
i++;
nums[i] = input.nextInt();
}
} //end of reverseNumbersFor
public void printArray(int num)
{
//Define var result and i
String result = new String();
int i = nums.length - 1;
//for loop to print the array's elements reversed
while (i >= 0 )
{
result += (nums[i] + " ");
}
System.out.print("In reverse order : " + result);
} //end of printArray
public static void main(String[] args)
{
ReverseNumbersWhile sc = new ReverseNumbersWhile();
sc.reverseNumbersWhile(num);
} // end of main
} //end of public class
这是我的输出。扫描仪仍然有效,但其他代码似乎无效。
> run ReverseNumbersWhile
Enter 10 numbers : [1 2 3 4 5 6 7 8 9 10]
java.lang.ArrayIndexOutOfBoundsException: 10
at ReverseNumbersWhile.reverseNumbersWhile(ReverseNumbersWhile.java:34)
at ReverseNumbersWhile.main(ReverseNumbersWhile.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
最佳答案
错误在这里:
while(i < nums.length)
{
i++;
nums[i] = input.nextInt();
}
想象一下,当i = 9
时,它仍然会进入循环,因为nums.length = 10
,而9 < 10:
- 你将首先执行
i++
,所以i = 10
- 在那之后,
nums[i] = input.nextInt();
,但是i = 10
!
您不能执行 nums[10],因为数组的索引仅在 0 - 9 范围内。
要更正此问题,只需推迟 i++ 行即可。
while(i < nums.length)
{
nums[i] = input.nextInt();
i++;
}
关于java - 反向数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47047370/