循环/数组(Java)

时间:2011-10-09 17:48:29

标签: java loops

我在使循环工作时遇到一些问题。我的目标是创建一个循环,允许用户在几行中填写彩票号码(用户可以决定他/她想要填写多少行,但它不能超过之前指定的最大数量。码)。到目前为止,我的代码如下:

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方法中运行它并输入正确数量的行时,我收到错误消息:

线程“main”java.lang.NullPointerException中的异常     在LotteryTicket.fillInTicket(LotteryTicket.java:24)

第24行是我调用fillInRow() - 我在另一个类中创建的方法的行,所以我怀疑问题出在这里。我知道这个方法工作正常,因为我在测试程序中尝试过。但是,我没有正确指出这个fillInRow() - 方法吗?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

您创建了一个大小为maxNumberOfRows的数组,但尚未使用任何对象填充它。它最初只包含空引用。

要修复代码,必须调用LotteryRow构造函数来创建对象,然后在数组中添加对该对象的引用。您可以像这样修复代码:

for (int index = 0; index < n; index++) {
    rows[index] = new LotteryRow();
    rows[index].fillInRow();
}

答案 1 :(得分:0)

在调用方法之前,必须先创建一个新对象并将其放在数组中。 Java对象数组初始化为所有空值。

答案 2 :(得分:0)

您永远不会初始化rows。是的,您使用this.rows = new LotteryRow[maxNumberOfRows];创建数组,但不会为每个数组条目创建新的LotteryRow对象,因此整个数组都填充了null。你必须自己创建LotteryRow对象