当我在 java`your text 中运行我的程序时收到此错误消息 线程“main”中的异常 java.lang.NullPointerException:无法调用“Tables.getStatus()”,因为“”为 null 在program.tableDraw(program.java:31) 在program.main(program.java:14)
public class program{
public static void main(String[] args){
Tables[][] gameTable = new Tables[3][3];
for(Tables[] tables : gameTable){
for(Tables table : tables){
table = new Tables();
System.out.println(table.getStatus());//->i get a return value
}
}
tableDraw(gameTable);
}
static void tableDraw(Tables[][] gameTable){
if(gameTable.length != 3 && gameTable[0].length != 3) {
System.out.println("game table created wrong");
System.exit(0);
}
for(Tables[] tables : gameTable){
System.out.println();
for(Tables table : tables){
char c = '.';
Tables.status stat = table.getStatus();//->java.lang.NullPointerException occur
if(stat == Tables.status.x) c = 'x';
else if(stat == Tables.status.o) c = 'o';
System.out.print(c);
}
}
}
}
Tables 类和方法
public class Tables {
public enum status{
blank,
x,
o
}
private status stat;
Tables(){
this.stat = status.blank;
}
public status getStatus(){
return this.stat;
}
}
我搜索了整个互联网来寻找解决方案,他们说当您返回 null 时会发生此错误。但我在尝试返回之前输入了一个值。
您的
this.stat
是私人的。公开。您不能返回私有变量。
此代码:
for(Tables table : tables) {
table = new Tables();
}
will not 设置
tables
的单元格 - 增强的 for 循环(for-each)不适合更改数组。
tables
数组仍将填充默认值,即null
。此外,从 getStatus()
调用 null
会抛出 NullPointerException
。
您需要像
tables[i] = new Tables();
中那样分配给数组
建议(学习并)使用调试器 - 使用调试器应该相对容易发现该问题。