我无法在java上返回封装的数据

问题描述 投票:0回答:2

当我在 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 时会发生此错误。但我在尝试返回之前输入了一个值。

java compiler-errors
2个回答
0
投票

您的

this.stat
是私人的。公开。您不能返回私有变量。


0
投票

此代码:

    for(Tables table : tables) {
        table = new Tables();
    }

will not 设置

tables
的单元格 - 增强的 for 循环(for-each)不适合更改数组。

tables
数组仍将填充默认值,即
null
。此外,从
getStatus()
调用
null
会抛出
NullPointerException

您需要像

tables[i] = new Tables();

中那样分配给数组

建议(学习并)使用调试器 - 使用调试器应该相对容易发现该问题。

© www.soinside.com 2019 - 2024. All rights reserved.