使用用户输入填充2d数组时的java.lang.ArrayIndexOutOfBoundsException

时间:2017-04-08 20:23:22

标签: java arrays

这是我目前的代码。

public static void testClosestToMean() {

    Scanner input = new Scanner(System.in);
    System.out.println("How many rows does your array have: ");
    int rows = input.nextInt();
    System.out.println("How many columns does your array have: ");
    int columns = input.nextInt();

    double[][] numbers = new double[rows][columns];


    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            System.out.println("Enter a value for your array: ");
            double values = input.nextDouble();
            numbers[rows][columns] = values;
        }
    }
}

当我运行我的程序时,我到达System.out.println("Enter a value for your array: ");但是当我输入一个数字并按Enter键时会出现此错误:

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException

我只是陷入困境,想要指导甚至解释为什么会出现这种错误。

3 个答案:

答案 0 :(得分:4)

对于行,您的2D数组的索引从0row-1,对于列,0columns-1。但是,您试图访问numbers[rows][columns],这被称为“一个一个错误”,因为您的访问索引每个都超过最大可能索引。如果您要解决此问题,请将rows替换为i,将columns替换为j,如此,

for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < columns; j++)
    {
        System.out.println("Enter a value for your array: ");
        double values = input.nextDouble();
        numbers[i][j] = values;
    }
}

这样,您可以通过从第一行(索引0)开始填充每一行,直到到达最后一行(索引i-1),将条目添加到2D数组中。当您填充每一行时,您将从第一列(索引0)开始逐个填充列,直到到达最后一列(索引j-1)。

答案 1 :(得分:1)

线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException意味着你超越了元素。请注意,0也可以是数组中的项目。

例如:

array[0] = "Hey";
array[1] = "Sup! wow... just wow";

如果我做了

system.out.println(array[2]);

会打印错误

但如果我做了

system.out.println(array[0], array[1]);

它会起作用。

答案 2 :(得分:0)

在您的代码中:

numbers[rows][columns] = values;

我相信你的意思

numbers[i][j] = values;

由于