java - 反向数组错误

标签 java arrays

当我将代码从 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:

  1. 你将首先执行 i++,所以 i = 10
  2. 在那之后,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/

相关文章:

java - 对树状图进行排序并没有真正起作用

java - 自定义线性布局在添加 View 时有问题

java - ratpoison 下丑陋的 Swing 字体

c++ - 返回指向嵌套 std::vector 项的指针的最佳方法

c++ - 用整数填充自定义整数数组

java - 我如何在 Java 中通过记录 ID 查询 OrientDB 顶点图对象?

java - 为什么我的 GPA 方法在传递正确的参数后无法正确计算?

c - 修改结构中的 char *

javascript - 从数组计算平均值并收到 NaN 错误

arrays - 复杂表达式的简化