问题
The error comes from this line BoardState addme = new BoardState();
For some reason the non-static variable that it is pointing at is "new". I am unclear of how I can fix this error as new is not meant to be a variable, and is not.
Looking through the stackoverflow records this error usually comes from a non-static method which is usually solved by making the method static or bypassing the method entirely. T
This code below is to reference what is going on before and after this statement.
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);
}
}....
回答1:
The reason it doesn't work is because your class BoardState
is an inner, non-static, class inside of IntelligentTicTacToe
. This means that when referring to it, you'll be referring to an instance of the class; the instance isn't available from a static context.
One solution is to declare that class as:
public static class BoardState {
You can read more on inner classes here.
回答2:
Don't nest classes like you're doing. There's no need, and all it's going to do is to require that you create a BoardState object on top of an IntelligentTicTacToe instance, i.e.,
BoardState addme = new IntelligentTicTacToe(). new BoardState();
but this should not be a requirement of your program.
Solution: Put the BoardState class where it belongs, in its own file. Or make BoardState an enum, but then it should only hold constants.
来源:https://stackoverflow.com/questions/15962339/non-static-variable-this-cannot-be-referenced-from-a-static-context