Цикл / массив (Java) - PullRequest
       5

Цикл / массив (Java)

2 голосов
/ 09 октября 2011

У меня возникли проблемы с запуском цикла.Моя цель - создать цикл, который позволит пользователю заполнять номера лотереи в несколько строк (пользователь может решить, сколько строк он / она хочет заполнить, но это не может быть больше максимального числа, указанного ранее вкод).Пока что мой код выглядит следующим образом:

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.fillInTicket (LotteryTicket.java:24)

Строка 24 - это строка, в которой я вызываю метод fillInRow (), который я создал вдругой класс, поэтому я подозреваю, что проблема заключается здесь.Я знаю, что этот метод работает нормально, так как я пробовал его в тестовой программе.Однако не правильно ли я ссылаюсь на этот метод fillInRow ()?

Любая помощь будет высоко ценится!

Ответы [ 3 ]

3 голосов
/ 09 октября 2011

Вы создали массив размером maxNumberOfRows, но вы не заполнили его никакими объектами.Сначала он просто содержит нулевые ссылки.

Чтобы исправить код, вам нужно вызвать конструктор LotteryRow, чтобы создать объект, а затем поместить ссылку на этот объект в ваш массив.Вы можете исправить свой код так:

for (int index = 0; index < n; index++) {
    rows[index] = new LotteryRow();
    rows[index].fillInRow();
}
0 голосов
/ 09 октября 2011

Вы никогда не инициализируете rows.Да, вы создаете массив с this.rows = new LotteryRow[maxNumberOfRows];, но это НЕ создает новый объект LotteryRow для каждой записи массива, поэтому весь массив заполнен null.Вы должны создать объекты LotteryRow самостоятельно

0 голосов
/ 09 октября 2011

Вы должны создать новый объект и поместить его в массив, прежде чем вызывать метод для него.Java-массивы объектов инициализируются всеми нулями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...