エラーはこの行から発生しますBoardStateaddme = new BoardState();
何らかの理由で、それが指している非静的変数は「新しい」です。 newは変数を意味するものではなく、そうではないため、このエラーを修正する方法がわかりません。
スタックオーバーフローレコードを調べると、このエラーは通常、非静的メソッドから発生します。これは通常、メソッドを静的にするか、メソッドを完全にバイパスすることで解決されます。 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);
}
}..。
それが機能しない理由は、クラスBoardState
がIntelligentTicTacToe
内の内部の非静的クラスであるためです。これは、それを参照するときに、クラスのインスタンスを参照することを意味します。インスタンスは静的コンテキストからは利用できません。
1つの解決策は、そのクラスを次のように宣言することです。
public static class BoardState {
内部クラスの詳細を読むことができます ここ 。
あなたがしているようにクラスをネストしないでください。必要はありません。必要なのは、IntelligentTicTacToeインスタンスの上にBoardStateオブジェクトを作成することを要求することだけです。
BoardState addme = new IntelligentTicTacToe(). new BoardState();
しかし、これはあなたのプログラムの要件であってはなりません。
解決策:BoardStateクラスをそれが属する場所の独自のファイルに配置します。または、BoardStateを列挙型にしますが、定数のみを保持する必要があります。