Создание пользовательского ввода для рандомизированного 2D массива java проблема — исключение OutOfBoundsException

#java #arrays #multidimensional-array #user-input

Вопрос:

Попытка создать 2D-массив, который принимает входные данные пользователей для строк и столбцов. Числа внутри массива затем рандомизируются от 0 до 100. Я получаю следующую ошибку:

Введите строки для массива: 3

Введите столбцы для массива: 2

Исключение в потоке «основной» java.lang.Исключение ArrayIndexOutOfBoundsException: Индекс 3 выходит за пределы длины 3 в test2.main(test2.java:17)

Вот мой код:

 import java.lang.Math;
import java.util.Scanner;

public class test2 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter rows for the array: ");
        int rows = scan.nextInt();
        System.out.print("Enter columns for the array: ");
        int columns = scan.nextInt();

        int [][] myArray = new int [rows][columns];

        for (rows = 0; rows < myArray.length;rows  ) {
            for (columns = 0; columns < myArray.length; columns  )
            myArray[rows][columns] = (int) (Math.random()*100);
            System.out.print(myArray[rows][columns]   "t");
        }
    }
}
 

Комментарии:

1. Для внутреннего цикла «столбцы < myArray.length» должно быть «столбцы

2. myArray.length возвращает количество строк. Чтобы получить количество столбцов, вам нужно получить строку и вызвать метод длины для нее. Т. е. изменить for (columns = 0; columns < myArray.length; columns ) на for (columns = 0; columns < myArray[0].length; columns )

3. Спасибо вам обоим за ответы, я изменил внутренний цикл на то, что вы оба предложили. Но я все равно получаю ту же ошибку.

Ответ №1:

Вы должны использовать отдельные переменные для запуска циклов.

 public class Random {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.print("Enter rows for the array: ");
    int rows = scan.nextInt();
    System.out.print("Enter columns for the array: ");
    int columns = scan.nextInt();

    int[][] myArray = new int[rows][columns];

    for (int row = 0; row < rows; row  ) {
        for (int col = 0; col < columns; col  ) {
            myArray[row][col] = (int) (Math.random() * 100);
            System.out.print(myArray[row][col]   "t");
        }
    }
}
 

}

Комментарии:

1. Спасибо, ваше решение сработало!