反向阵列错误

时间:2017-11-01 02:34:59

标签: java arrays

当我将代码更改为for循环时,我一直收到相同的错误消息。对于循环代码工作正常但不是这一个。我添加的唯一的方法是名为printArray的额外方法,因为没有其他方法,它会继续说你已经在方法中定义了反向注意事项'当我在循环中定义第二个时。

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)

2 个答案:

答案 0 :(得分:4)

错误在于:

while(i < nums.length) 
    {
      i++;
      nums[i] = input.nextInt();
    }

想象一下,i = 9,它仍然会进入循环,因为nums.length = 10和9&lt; 10:

  1. 您首先i++i = 10
  2. 之后,nums[i] = input.nextInt();,但i = 10
  3. 你不能做[n],因为数组索引的范围只有 0 - 9

    要纠正这个问题,只需推迟i ++行。

    while(i < nums.length) 
    {
      nums[i] = input.nextInt();
      i++;
    }
    

答案 1 :(得分:1)

你的while循环代码需要一个简单的修改。它应该是这样的......

while(i&lt; nums.length){

    nums[i] = in.nextInt() ;

    i++ ;

}

预增量是IndexOutOfBounds异常的原因。