用用户输入填充二维数组时出现 java.lang.ArrayIndexOutOfBoundsException

标签 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 键时,会发生此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

我只是普遍陷入困境,需要指导,甚至需要解释为什么此错误不断发生。

最佳答案

二维数组的行索引从 0row-1,从 0columns-1 为列。但是,您尝试访问数字[行][列],这被称为“离一错误”,因为您访问的索引均比最大可能索引大一。如果您想解决此问题,请将 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)。当您填充每一行时,您可以从第一列(索引 0 处)开始逐列填充,直到到达最后一列(索引 j-1 处) )。

关于用用户输入填充二维数组时出现 java.lang.ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43299994/

相关文章:

java - Mockito:通缉但未调用

java - 将字符串 [] 写入文件

javascript - 创建一个没有重复项的多维对象数组

java - 用户的输入可以用于将对象添加到数组中吗?

Java帮助,数组中的最小值

Java - 根据最小值、最大值和计数生成间隔/间隔

java - 如何创建一个新数组并将另一个数组中的所有正元素复制到新数组中并返回它?

java - 如何在 Gluon 项目中添加依赖项

c++ - 如何在 C++ 中创建列表或数组,然后将这些对象随机分配给另一个变量?

php - 组合数组