2013-04-12 9 views
7

L'errore proviene da questa riga BoardState addme = new BoardState();variabile non statica non può essere referenziata da un contesto statico

Per qualche motivo la variabile non statica a cui punta è "nuova". Non sono chiaro come sia possibile correggere questo errore in quanto nuovo non è inteso come variabile e non lo è.

Guardando attraverso i record di stackoverflow, questo errore di solito deriva da un metodo non statico che di solito viene risolto rendendo il metodo statico o ignorando del tutto il metodo. T

Questo codice di seguito fa riferimento a ciò che sta accadendo prima e dopo questa dichiarazione.

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

possibile duplicato di [variabile non statica non può essere fatto riferimento da un contesto statico] (http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static- contesto) – EJP

risposta

17

La ragione per cui non funziona è perché la classe BoardState è una classe interna, non statica, all'interno di IntelligentTicTacToe. Ciò significa che quando ci si riferisce ad esso, ti riferirai a un'istanza della classe; l'istanza non è disponibile da un contesto statico.

Una soluzione è quella di dichiarare che classe come:

public static class BoardState { 

Puoi leggere altro sulle classi interne here.

+0

funziona grazie! Soluzione più semplice grazie per la spiegazione –

2

Non classi nido come si sta facendo. Non c'è bisogno, e tutto sta andando a fare è quello di richiedere che si crea un oggetto BoardState in cima ad un'istanza IntelligentTicTacToe, vale a dire,

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

ma questo non dovrebbe essere un requisito del vostro programma.

Soluzione: mettere la classe BoardState a cui appartiene, nel proprio file. Oppure rendere BoardState un enum, ma dovrebbe contenere solo costanti.

+0

No; basta renderlo 'statico'. – SLaks

+0

@SLaks: Potrebbe fare anche questo. O meglio, rendilo enum, quindi è automaticamente statico. –

+0

andando a provare le tue soluzioni ora –