#java #loops
#java #циклы
Вопрос:
У меня возникли некоторые проблемы с запуском цикла. Моя цель — создать цикл, который позволит пользователю заполнять лотерейные номера в нескольких строках (пользователь может решить, сколько строк он / она хочет заполнить, но это не может быть больше максимального числа, указанного ранее в коде). Пока что мой код выглядит следующим образом:
import java.util.Scanner;
public class LotteryTicket {
public LotteryRow[] rows;
public int numberOfRows;
public Player ticketOwner;
public LotteryTicket(int maxNumberOfRows) {
this.rows = new LotteryRow[maxNumberOfRows];
}
Scanner input = new Scanner(System.in);
public void fillInTicket() {
System.out.print("How many rows do you want to fill in? ");
int n = input.nextInt();
while (n < 1 || n > rows.length) {
System.out.println("The number of rows must lie between 1 and " rows.length);
System.out.print("How many rows do you want to fill in? ");
n = input.nextInt();
}
for (int index = 0; index < n; index ) {
rows[index].fillInRow();
}
numberOfRows = n;
}
Когда я пытаюсь запустить это в основном методе и ввожу нужное количество строк, я получаю сообщение об ошибке:
Исключение в потоке «main» java.lang.Исключение NullPointerException в лотерейном билете.Заполненный билет (LotteryTicket.java:24)
Строка 24 — это строка, в которой я вызываю метод fillInRow(), который я создал в другом классе, поэтому я подозреваю, что проблема заключается здесь. Я знаю, что этот метод работает нормально, так как я пробовал его в тестовой программе. Однако, я неправильно ссылаюсь на этот метод fillInRow()?
Любая помощь будет высоко оценена!
Ответ №1:
Вы создали массив с размером maxNumberOfRows
, но не заполнили его никакими объектами. Изначально он содержит только нулевые ссылки.
Чтобы исправить код, вы должны вызвать LotteryRow
конструктор для создания объекта, а затем поместить ссылку на этот объект в свой массив. Вы можете исправить свой код следующим образом:
for (int index = 0; index < n; index ) {
rows[index] = new LotteryRow();
rows[index].fillInRow();
}
Ответ №2:
Вы должны создать новый объект и поместить его в массив, прежде чем вызывать для него метод. Java-массивы объектов инициализируются всеми нулевыми значениями.
Ответ №3:
Вы никогда не инициализируете rows
. Да, вы создаете массив с this.rows = new LotteryRow[maxNumberOfRows];
помощью, но это НЕ создает новый объект LotteryRow для каждой записи массива, поэтому весь массив заполняется null
. Вы должны создать объекты LotteryRow самостоятельно