我在使循环工作时遇到一些问题。我的目标是创建一个循环,允许用户在几行中填写彩票号码(用户可以决定他/她想要填写多少行,但它不能超过之前指定的最大数量。码)。到目前为止,我的代码如下:
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() - 方法吗?
非常感谢任何帮助!
答案 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对象