簡體   English   中英

使用數組迭代 ArrayList

[英]Iterating over an ArrayList with an array

我正在使用數組迭代列表的索引。 這行代碼

score += SquareTable[index.get(i)];

產生一個錯誤,我不知道如何修復它。

@Override
public int evaluatePieceScore() {

    int score = 0;
    List<Piece> index = chessgame.getPieces();

    
    for (Piece piece : this.chessgame.getPieces()){
        if(piece.getColor() == Piece.YELLOW_COLOR){
            
            
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_PAWN),   PawnSquareTable);
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_KNIGHT), KnightSquareTable);
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_BISHOP), BishopSquareTable);               
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_ROOK),   RookSquareTable);
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_QUEEN),  QueenSquareTable);
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_KING),   KingMiddleGameSquareTable);
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_KING),   KingEndGameSquareTable);
            
            
        }else if(piece.getColor() == Piece.BROWN_COLOR){
            
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_PAWN),   reverse(PawnSquareTable));
            score += this.CalculateScore(index ,getPieceValue(Piece.TYPE_KNIGHT), reverse(KnightSquareTable));
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_BISHOP), reverse(BishopSquareTable));              
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_ROOK),   reverse(RookSquareTable));
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_QUEEN),  reverse(QueenSquareTable));
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_KING),   reverse(KingMiddleGameSquareTable));
            score += this.CalculateScore(index, getPieceValue(Piece.TYPE_KING),   reverse(KingEndGameSquareTable));
            
            
        }else{
            throw new IllegalStateException("Unknown piece color found: "+piece.getColor());
        }
    }       
    return score;
}

public int CalculateScore(List<Piece> index, int pieceValue, int[] SquareTable ){
    
    int score = pieceValue * index.size();
    
    for(int i = 0; i < index.size(); i++){
        score += SquareTable[index.get(i)];
    }
    
    return score;
}

您正在嘗試使用Piece實例(來自 List)而不是int來訪問SquareTable數組。

public int CalculateScore(List<Piece> index, int pieceValue, int[] SquareTable ){

 SquareTable[index.get(i)];
index.get(i) gives you an object of type `Piece` 

並根據此代碼

int[] SquareTable ,

SquareTable接受類型int

這就是給你TypeMismatchError的原因

你在實現中搞砸了 collections 看起來像

public int CalculateScore(List<Piece> index, int pieceValue, int[] SquareTable ){    
    int score = pieceValue * index.size();

    for(int i = 0; i < SquareTable.size(); i++){
        score += getPieceValue(index.get(SquareTable[i]));
    }

    return score;
}

index.get(I) 為您獲取 Piece 對象,因此您不能使用它來訪問數組中的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM