Java 非静态变量不能从静态上下文引用此变量

Java 非静态变量不能从静态上下文引用此变量,java,static,non-static,Java,Static,Non Static,错误来自这一行 BoardState addme=新的BoardState() 出于某种原因,它所指向的非静态变量是“新的”。我不清楚如何修复这个错误,因为new不是一个变量,也不是 通过查看stackoverflow记录,此错误通常来自非静态方法,通常通过使该方法静态或完全绕过该方法来解决。T 下面的代码用于参考此语句前后发生的情况 public class IntelligentTicTacToe extends TicTacToe { public class BoardState{

错误来自这一行 BoardState addme=新的BoardState()

出于某种原因,它所指向的非静态变量是“新的”。我不清楚如何修复这个错误,因为new不是一个变量,也不是

通过查看stackoverflow记录,此错误通常来自非静态方法,通常通过使该方法静态或完全绕过该方法来解决。T

下面的代码用于参考此语句前后发生的情况

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

        }
公共类智能TictaToe扩展了TictaToe{
公立学校{
公共字符串TTTState;
公共int[][]防御性排列;
公共int[][]攻击性攻击;
公共字符串str;
公共互联网;
}
公共静态ArrayList内存=新建ArrayList();
公共静态布尔makeMove(){
char[]oArray=新字符[TicTacToeArray.length];
int[][]defensiveopsparray=新int[TicTacToeArray.length][TicTacToeArray.length];
int[]offensiveOppsArray=新int[TicTacToeArray.length][TicTacToeArray.length];
int[]sumopsarray=newint[TicTacToeArray.length][TicTacToeArray.length];
//将数组转换为字符串
字符串x=convertttarraytostring();
//检查条件,看看我们是否在内存中有它,或者我们是否必须检查所有的条件
布尔匹配发现=假;
对于(int i=0;i

}..

不要像您现在这样嵌套类。没有必要,它所要做的就是要求您在IntelligentTectoe实例上创建一个BoardState对象,即

BoardState addme = new IntelligentTicTacToe(). new BoardState();
但这不应该是你的计划的要求

解决方案:将BoardState类放在它自己的文件中。
或者将BoardState设置为枚举,但它应该只包含常量。

它不起作用的原因是因为您的类
BoardState
IntelligentICTACTOE
内部的一个非静态类。这意味着在引用它时,您将引用该类的一个实例;该实例无法从sta获得tic上下文

一种解决方案是将该类声明为:

public static class BoardState {

您可以阅读更多关于内部类的内容。

不;只需将其设置为
静态
@SLaks:也可以。或者更好,将其设置为枚举,然后自动设置为静态。立即尝试您的解决方案可能会重复工作,谢谢!最简单的解决方案。感谢您的解释