non-static variable this cannot be referenced from a static context

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

        }

}....


ANSWERS:


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.


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.



 MORE:


 ? non-static variable this cannot be referenced in a static context in Java
 ? Non-static variable this cannot be referenced from a static context when constructing an object
 ? Java Non-Static Variable Referenced from Static Context Error
 ? Emergency: "error: non-static variable this cannot be referenced from a static context"
 ? "non-static variable this cannot be referenced from a static context" error
 ? Non-Static method from a static context [Comparing two sets of class instances]
 ? My .saveChanges() method is not saving because it is saying an object reference is required for the non-static field, method, or property
 ? AutoMapper non-static conversion from static - MapperConfiguration, CreateMapper
 ? How to WriteLine 2 million records in under 3 seconds?
 ? Error: Getting "non-static variable ... cannot be referenced" when trying to fill and array with random numbers