【问题标题】:java.lang.NullPointerException tictactoe program [duplicate]java.lang.NullPointerException tictactoe 程序 [重复]
【发布时间】:2016-11-21 04:45:42
【问题描述】:

我不断得到:

Exception in thread "main" java.lang.NullPointerException
at TTTPlayer.setBoard(TTTPlayer.java:55)    
at TTTPlayer.inputMethod(TTTPlayer.java:35)     
at TTTPlayer.main(TTTPlayer.java:23)

我的程序是一个tictactoe程序,我正在尝试将人员输入的值分配给相应的数组索引,然后可以打印出来。我知道我还没有用于切换球员的触发器。不过我想不通。

import java.util.*;

public class TTTPlayer {

    public static String[][] board;
    public static String currentPlayer;

    public TTTPlayer() {
        currentPlayer = "x";
        board = new String[3][3];
        board[0][0] = "1";
        board[0][1] = "2";
        board[0][2] = "3";
        board[1][0] = "4";
        board[1][1] = "5";
        board[1][2] = "6";
        board[2][0] = "7";
        board[2][1] = "8";
        board[2][2] = "9";
    }

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

    public static void inputMethod()
    {
        TicTacToeMain.printBoard();
        Scanner Input = new Scanner(System.in);
        System.out.println("Enter what square you would like to place in.");
        String choice = Input.nextLine();

        if(choice.equals("1")||choice.equals("2")||choice.equals("3")||choice.equals("4")||choice.equals("5")||choice.equals("6")||choice.equals("7")||choice.equals("8")||choice.equals("9"))
        {   
            setBoard(choice);

        }   
        else
        {   
            System.out.println("That is not a valid choice, please retry.");
            inputMethod();

        }   

    }
    public static void setBoard(String choice)
    {
        String choice1 = choice;

         for (int i = 0; i < 3; i++) {


            for (int j = 0; j < 3; j++) {

               if(board[i][j].equals(choice1)){
                  board[i][j].equals(currentPlayer);
                  printBoard();

               }

            }
        }
        //System.out.println(choice1);  
    }

    public static void printBoard()
    {  
       System.out.println(board[0][0]+" | "+board[1][0]+" | "+board[2][0]);
       System.out.println("——|———|——");
       System.out.println(board[0][1]+" | "+board[1][1]+" | "+board[2][1]);
       System.out.println("——|———|——");
       System.out.println(board[0][2]+" | "+board[1][2]+" | "+board[2][2]);

    }
}

【问题讨论】:

  • @henry 我最初也将其作为副本关闭,但根本原因是实际上没有从main 实例化他的类引起的,我无法在欺骗中看到这个原因。
  • @ScaryWombat 我仍然认为它是重复的。一个变量可能没有被初始化以列出它们的原因有很多。根本问题通常很容易通过检查或启动调试器来诊断。

标签: java arrays nullpointerexception


【解决方案1】:

main 中,您需要实例化一个TTTPlayer 对象。还要使类方法非静态。

public static void main(String[] args) {
    TTTPlayer player = new TTTPlayer ();
    player.inputMethod();
}

public static void inputMethod() -> public void inputMethod()

【讨论】:

  • 看起来 board[i][j].equals(currentPlayer) 应该是 board[i][j]=currentPlayer
  • @JeremyKahan 我认为你是对的。我还没有调试过他所有的代码。
  • 非常感谢,我对 java 很陌生,所以静态和非静态的教派让我很困惑。但我想我需要用一个对象来调用它们,再次感谢! :p
猜你喜欢
  • 2018-03-16
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2016-08-16
  • 1970-01-01
  • 2015-09-07
相关资源
最近更新 更多