
AIを作っているのですが、その過程で「式の開始が不正です」と出てきます。
自分ではどこが悪いのか見つけきれないので教えてくれませんか。
以下がプログラムソースです。
class AlphaBetaAI extends AI{
class Move extends Point{
public int eval = 0;
public Move(){
super(0, 0);
}
public Move(int x, int y, int e){
super(x, y);
eval = e;
}
};
private Evaluator Eval;
public void move(Board board){
Vector movables = book.getMovablePos();
if(movables.isEmpty()){
// 打てる箇所がなければパスする
board.pass();
return;
}
if(movables.size() == 1){
// 打てる箇所が一か所だけならば探索を行わず、即座に打って返る
board.move((Point) movables.get(0));
return;
}
int limit;
Eval = new MidEvaluator();
// sort(board, movables, presearch_depth); // 事前に手がよさそうな順にソート
if(Board.Max_TURNS - board.getTurns() <= wld_depth){
limit = Integer.MAX_VALUE;
if(Board.MAX_TURNS - board.getTurns() <= perfect_depth)
Eval = new PerfectEvaluator();
else
Eval = new WLDEvaluator();
}else{
limit = normal_depth;
}
int eval, eval_max = -Integer.MAX_VALUE;
Point p = null;
for(int i=0; i<movables.size(); i++){
board.move((Point)movables.get(i));
eval = -alphabeta(board, limit-1, -Integer.MAX_VALUE, -INTEGER.MIN_VALUE);
board.undo();
if(eval > eval_max) {
eval_max = eval;
p = (Point)movables.get(i);
}
board.move(p);
}
private int alphabeta(Board board, int limit, int alpham, int beta){
// 深さ制限に達したら評価値を返す
if(board.isGameOver() || limit == 0)
return Eval.evaluate(board);
Vector pos = board.getMovablePos();
int eval;
if(pos.size() == 0){
// パス
board.pass();
eval = -alphabeta(board, limit, -beta, -alpha);
board.undo();
return eval;
}
for(int i=0; i< pos.size(); i++){
board.move((Point)pos.get(i));
eval = -alphabeta(board, limit-1, -beta, -alpha);
board.undo();
alpha = Math.max(alpha, eval);
if(alpha >= beta){
// β刈り
return alpha;
}
}
return alpha;
}
private void sort(Board board, Vector movables, int limit){
Vector moves = new Vector();
for(int i=0; i<movables.size(); i++){
int eval;
Point p = (Point) movables.get(i);
board.move(p);
eval = -alphabeta(board, limit-1, -Integer.MAX_VALUE, Integer.MAX_VALUE);
board.undo();
Move move = new Move(p.x, p.y, eval);
moves.add(move);
}
// 評価値の大きい順にソート(選択ソート)
int begin, current;
for(begin = 0; begin < moves.size() -1; begin++){
for(current = begin+1; current < moves.size(); current++){
Move b = (Move) moves.get(begin);
Move c = (Move) moves.get(current);
if(b.eval < c.eval){
// 交換
moves.set(begin, c);
moves.set(current,b);
}
}
}
// 結果の書き戻し
movables.clear();
for(int i=0; i<moves.size(); i++){
movables.add(moves.get(i));
}
return;
}
private int evaluate(Board board){
return 0;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java初心者の質問(3つの整数の...
-
「配列定数は、イニシャライザ...
-
イメージのリサイズが表示されない
-
Java for文 ネストとreturn文
-
JAVAでCの関数ポインタのような...
-
複数のボタンを配置し、それぞ...
-
JAVA エラー 式の開始が不正で...
-
javaの画像解析(RGB)
-
IN演算子の中身を動的に生成
-
java spring でエラーが出て困...
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
ORA-01858: 数値を指定する箇所...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
System.exit()の値を取得したい
-
動的配列が存在(要素が有る)か...
-
カタカナの小文字を大文字に変...
-
javaで質問です。 文字列2023/2...
-
1~100までの数字を表示したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
C#で実行時にメソッドの返り値...
-
メインが含まれていません
-
(Swing)JTextFieldを半角のみ入...
-
javaでcsvファイル読込時の改行...
-
式の型は配列型で int に解決済...
-
JAVA エラー 式の開始が不正で...
-
C言語からJavaに書き換えの質...
-
前の月を取得したいです。
-
行の途中から読み込む方法
-
素数のみの足し算
-
Java 初心者 int型の取り扱い方
-
共有メモリについて
-
DataSet(DataTable)の使い方
-
c# デリゲート関連の命名について
-
先入れ先出し法のプログラミン...
-
java spring でエラーが出て困...
-
JAVAでCの関数ポインタのような...
-
誰か~誰か~誰か~一生のお願...
-
いまいちfor文が分かりません ...
おすすめ情報
早速の回答ありがとうございます
エラーが出る行は、
62行目、93行目、129行目に、「式の開始が不正です」「’;’がありません」のエラーが出ます。
132行目に「構文解析中にファイルの終わりに移りました」のエラーもあります。