2016-11-21 4 views
-2

ich erhalte:java.lang.NullPointerException tictactoe Programm

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) 

Mein Programm ein tictactoe Programm ist und ich versuche, den Wert der Person Eingaben in dem entsprechenden Feldindex asign, die dann ausgedruckt werden können . Ich weiß, dass ich noch kein Flip-Flop für das Wechseln der Spieler habe. Ich kann das aber nicht herausfinden.

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 ich ursprünglich diese auch als Duplikat geschlossen, aber die Ursache ist von eigentlich nicht instanziieren seine Klasse verursacht von 'main' ich nicht diese Ursache beantwortet in der sehen konnte, betrügen. –

+0

@ScaryWombat Ich denke immer noch, dass es ein Duplikat ist. Es gibt viele Gründe, warum eine Variable möglicherweise nicht initialisiert wird, um sie alle aufzulisten. Das Grundproblem ist in der Regel leicht zu diagnostizieren, entweder durch Inspektion oder durch das Starten des Debuggers. – Henry

Antwort

2

In main benötigen Sie einen TTTPlayer Objekt instanziiert. Machen Sie die Klassenmethoden auch nicht statisch.

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

und

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

es sieht auch aus wie board [i] [j] .equals (currentPlayer) sollte board sein [i] [j] = currentPlayer –

+0

@ JeremyKahan Ich denke du hast Recht. Ich habe nicht den ganzen Code debugged. –

+0

Danke eine Tonne, ich bin wirklich neu in Java so statisch und eine nicht statische Bezeichnungen verwirren die Hölle aus mir heraus. Aber ich denke, ich muss sie mit einem Objekt anrufen, Danke nochmal! : p – HardlyTheJavaLegend

Verwandte Themen