在java中从单独的类访问实例变量

在java中从单独的类访问实例变量,java,Java,我正在用javafx编写自己的tic-tac-toe游戏,但似乎偶然发现了一些我在处理类时不理解的基本机制。为了这个问题,我试图简化我的问题。我只想创建一个包含二维字符串数组的游戏对象,然后通过另一个类的方法打印该数组中的字符串。当我运行这段代码时,我得到一个空指针异常。任何帮助都将不胜感激。干杯 package testing; import javafx.application.Application; import javafx.stage.Stage; public class Ma

我正在用javafx编写自己的tic-tac-toe游戏,但似乎偶然发现了一些我在处理类时不理解的基本机制。为了这个问题,我试图简化我的问题。我只想创建一个包含二维字符串数组的游戏对象,然后通过另一个类的方法打印该数组中的字符串。当我运行这段代码时,我得到一个空指针异常。任何帮助都将不胜感激。干杯

package testing;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        Game g = new Game();
        g.addMove("X", 1, 0);
        g.addMove("O", 0, 1);
        GUI.printBoard(g);
    }

    public static void main(String[] args) {
        launch(args);
    }
}


package testing;

public class Game {
    private String[][] board;

    public Game() {
        this.board = new String[3][3];
    }

    public String[][] getBoard() {
        return this.board;
    }

    public void addMove(String s, int row, int col) {
        this.board[row][col] = s;
    }  
}


package testing;

public class GUI {

    public static void printBoard(Game g) {
        String[][] board = g.getBoard();

        for (int row = 0; row < 3; row++) {
            for (int col = 0; col < 3; col++) {
                if (board[row][col].equals("X"))
                    System.out.println(board[row][col]);
                else
                    if (board[row][col].equals("O"))
                        System.out.println(board[row][col]);
            }
        }
    }
}

您只为数组的条目[1]、[0]和[0]、[1]分配了一个值。由于数组是3乘3,其余的值仍将被赋值为null。当您打印出数组的值时,您也在对空值进行迭代。因此,在if中,您将尝试将X与null进行比较,这将生成一个NullPointerException。

引发NullPointerException的位置在哪里?你能用堆栈输出更新它吗?这样我们就可以计算出确切的位置你还没有填充整个2d数组,留下的插槽内存从未初始化过,因此你在printBoardGame方法中得到空ptr异常,你可以尝试board[row][col].equals或board[row][col col].equalsX,干杯:打印板的功能应该是打印板中的内容,而不是打印其他内容。当我说assigned null时,您应该检查addMove函数中的有效输入,这有点错误。它们只是没有赋值,因此为空。所以它不是空的。