2013-04-12 7 views
7

Der Fehler kommt von dieser Zeile BoardState addme = new BoardState();nicht statische Variable, auf die nicht von einem statischen Kontext aus verwiesen werden kann

Aus irgendeinem Grund ist die nicht statische Variable, auf die es zeigt, "neu". Ich bin mir nicht sicher, wie ich diesen Fehler beheben kann, da neu keine Variable sein soll und nicht ist.

Wenn Sie durch die Stackoverflow-Datensätze schauen, kommt dieser Fehler normalerweise von einer nicht statischen Methode, die normalerweise gelöst wird, indem Sie die Methode statisch machen oder die Methode vollständig umgehen. T

Der folgende Code soll aufzeigen, was vor und nach dieser Aussage passiert.

public class IntelligentTicTacToe extends TicTacToe { 

public class BoardState{ 
    public String TTTState; 
    public int[][] defensiveOppsArray; 
    public int[][] offensiveOppsArray; 
    public String str; 
    public int cnt; 
} 

public static ArrayList<BoardState> memory = new ArrayList<BoardState>(); 


public static boolean makeMove(){ 
    char[] oArray = new char[TicTacToeArray.length]; 
    int[][] defensiveOppsArray = new int[TicTacToeArray.length][TicTacToeArray.length]; 
    int[][] offensiveOppsArray = new int[TicTacToeArray.length][TicTacToeArray.length]; 
    int[][] sumOppsArray = new int[TicTacToeArray.length][TicTacToeArray.length]; 
    //converts our Array into a String 
    String x = convertTTTArrayToString(); 

    //Goes through the conditions to see if we have it in memory or if we must go through all the conditions 
    boolean matchFound = false; 
     for(int i=0; i < memory.size(); i++){ 
      BoardState element = memory.get(i); 
      if(element.str.equals(x)){ 
       System.out.println("Match Found"); 
       matchFound = true; 
      }} 
     if(!matchFound){ 
     BoardState addme = new BoardState(); 
     addme.str = x; 
     addme.cnt = 1; 
     memory.add(addme); 

     } 

} ....

+0

mögliches Duplikat von [nicht-statische Variable kann nicht aus einem statischen Kontext referenziert werden] (http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static- Kontext) – EJP

Antwort

17

Der Grund, warum es nicht funktioniert, ist, weil Ihre Klasse BoardState eine innere, nicht statische Klasse innerhalb IntelligentTicTacToe ist. Dies bedeutet, dass Sie sich auf eine Instanz der Klasse beziehen, wenn Sie darauf verweisen. Die Instanz ist in einem statischen Kontext nicht verfügbar.

Eine Lösung besteht darin, dass die Klasse als zu erklären:

public static class BoardState { 

Sie können mehr über innere Klassen lesen here.

+0

funktioniert dank! Einfachste Lösung. Vielen Dank für die Erklärung –

2

wie Sie nicht verschachtelt Klassen Sie tun. Es gibt keine Notwendigkeit, und alles was man tun wird, ist zu verlangen, dass Sie ein BoardState Objekt auf einer IntelligentTicTacToe Instanz erstellen, das heißt,

BoardState addme = new IntelligentTicTacToe(). new BoardState(); 

aber dies sollte kein Erfordernis des Programms sein.

Lösung: Versetzen Sie die BoardState-Klasse in eine eigene Datei, wo sie hingehört. Oder machen BoardState eine Enum, aber dann sollte es nur Konstanten halten.

+0

Nein; mach es einfach "statisch". – SLaks

+0

@SLaks: Könnte das auch tun. Oder besser, mach es zu einem Enum, dann ist es automatisch statisch. –

+0

gehen Sie, um Ihre Lösungen jetzt zu versuchen –

Verwandte Themen