Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

        }

}....

like image 769
John Smith Avatar asked Apr 12 '13 02:04

John Smith


People also ask

How do you fix non static variable this Cannot be referenced from a static context?

There is one simple way of solving the non-static variable cannot be referenced from a static context error. Address the non-static variable with the object name. In a simple way, we have to create an object of the class to refer to a non-static variable from a static context.

What does it mean by a non static variable Cannot be referenced from a static context?

The non-static variable cannot be referenced from a static context is compiler error that occurs when the user tries to put program code to access a non-static variable inside main in Java that is static.

Can you access non static variable in static context?

In the static method, the method can only access only static data members and static methods of another class or same class but cannot access non-static methods and variables.

How do you assign a non static variable to a static variable?

You cannot assign the result of a non-static method to a static variable. Instead, you would need to convert the getIPZip method to be a static method of your MyProps class, then you could assign its result to yor IPZip variable like this. public static String IPZip = MyProps. getIPZip("IPZip");


1 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.

like image 74
Alex Yarmula Avatar answered Oct 06 '22 14:10

Alex Yarmula