Pain123
@Pain123
Люблю кодить:)

Из-за чего программа выдаёт ошибку и как это исправить?

public class infa {
    public static void main(String[] args) {
        Job job = new Job();

        job.R();
    }
}



import java.util.Random;

public class Job {

    void R () {

        Random random = new Random();


        String[][] job = new String[][] {

                {"Сколько бит в байте","Cколько бит в килобайте","Сколько бит в мегабайте"},
                {"Сколько байт в килобайте","Сколько байт в мегабайте"},
                {"Сколько килобайт в мегабайте"}
        };

        int p = random.nextInt(job.length+1);

        System.out.println(job[p][p]);
    }


}


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Job.R(Job.java:23)
at infa.main(infa.java:5)
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
int p = random.nextInt(job.length+1);
Откуда +1?
Ответ написан
Комментировать
@mr_serg77
У Вас проблема в понимании английского, ну а по факту кода - с индексом.
Ответ написан
@ComradV
1. как правильно написано в первом комментарии, +1 там быть не должно.
2. Вообще, у вас первый элемент массива - массив из 3 элементов, второй - из двух, первый - из одного. Поэтому если вам сгенерировал генератор p=2, у вас получится элемент 2 из 2 массива. Во 2 по индексу массиве (в третьем по счёту) только 1 элемент, поэтому вы "вывалитесь" за границу массива.
Если вам нужен случайный элемент двумерного непрямоугольного массива, можно предложить технику:
int p = random.nextInt(job.length);
int q = random.nextInt(job[p].length);
System.out.println(job[p][q]);
3. Методы - с маленькой буквы
4. Если этот класс больше ничего не делает, разумно сделать метод статическим и не создавать лишний объект, а писать Job.r();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы