8

エラーはこの行から発生します BoardState addme = new 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);

        }

}....

4

2 に答える 2

18

それが機能しない理由は、クラスBoardStateが内部の非静的クラスであるためですIntelligentTicTacToe。これは、それを参照するときに、クラスのインスタンスを参照していることを意味します。インスタンスは静的コンテキストからは利用できません。

1 つの解決策は、そのクラスを次のように宣言することです。

public static class BoardState {

内部クラスの詳細については、こちらを参照してください。

于 2013-04-12T03:06:32.280 に答える
2

あなたがやっているようにクラスを入れ子にしないでください。その必要はなく、IntelligentTicTacToe インスタンスの上に BoardState オブジェクトを作成する必要があるだけです。

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

ただし、これはプログラムの要件であってはなりません。

解決策: BoardState クラスを、それが属する場所の独自のファイルに配置します。または、BoardState を列挙型にしますが、定数のみを保持する必要があります。

于 2013-04-12T03:02:14.513 に答える