2016-11-21 78 views
-2

总是收到:显示java.lang.NullPointerException井字游戏程序

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) 

我的程序是一个程序井字游戏和我试图ASIGN值的人的输入到对应的数组索引,其然后可以打印出来。我知道我还没有翻转玩家的转换器。我无法弄清楚这一点。

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]); 

    } 
} 
+1

@henry我最初也关闭这个作为重复的,但根本原因是实际上没有从他的实例类引起的'main'我看不出这个事业在回答欺骗。 –

+0

@ScaryWombat我仍然认为它是重复的。为什么变量可能不会被初始化以列出所有变量,有很多原因。根本问题通常很容易通过检查或启动调试器进行诊断。 – Henry

回答

2

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

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

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

它看起来像板[我] [j] .equals(currentPlayer)应该是板[我] [j] = currentPlayer –

+0

@JeremyKahan我认为你是正确的。我没有调试过他的所有代码。 –

+0

非常感谢,我对Java真的很陌生,所以静态的非静态命名混淆了我的地狱。但我想我需要用对象来称呼他们,再次感谢! :p – HardlyTheJavaLegend