-4

ナイトツアーのヒューリスティックを含むプログラミングクラスの割り当てを行っています。現時点では、ボード上のそのスペースの「アクセス可能性」と、そのボードが実際に以前にアクセスされたかどうかを知る「ボード」オブジェクトで 8x8 チェス盤配列を埋めるためのメソッドがあります。ただし、8x8 配列を作成し、この配列に対して「fill」メソッドを呼び出そうとすると、使用しているパッケージに配列が存在しないというエラーが表示されます...ここで何が間違っているのでしょうか? 配列を宣言してメソッドを呼び出すのと同じくらい簡単ではないでしょうか

Board [][] chessboard = new Board [8][8];
chessboard.fill();

または私の構文が間違っていますか?参考までに、Board オブジェクトとアクセシビリティ マトリックスを作成し、それらのアクセシビリティ値を 8x8 配列の各 Board オブジェクトにコピーするコードを次に示します。ありがとう!

public class Board {

/*
 * Initialize array that emulates chessboard. Will be 8x8, each space will 
 * contain the number of squares from which that space can be reached. The 
 * knight will start at a new space each tour and choose each move based on
 * the "accessability" of each square within its "move pool". The knight 
 * will move to the square with least accesibility each time. When the 
 * Knight is moved to a square, this square will be marked as visited so 
 * that it cannot be visited again. Also, any space that could have been 
 * moved to but was not will have its accesability reduced by 1.     
 */

private boolean visited;
private int accessValue;
private Board [][] chess = new Board[8][8];

public Board(int acessability, boolean beenVisited)
{
    visited = beenVisited;
    accessValue = acessability;  
}

int [][] accessMatrix = {{2,3,4,4,4,4,3,2},
                        { 3,4,6,6,6,6,4,3 },
                        { 4,6,8,8,8,8,6,4 },
                        { 4,6,8,8,8,8,6,4 },
                        { 4,6,8,8,8,8,6,4 },
            { 4,6,8,8,8,8,6,4 },
            { 3,4,6,6,6,6,4,3 },
            { 2,3,4,4,4,4,3,2}};





public void fill()
{

for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[0][i].changeAccess(accessMatrix[0][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[1][i].changeAccess(accessMatrix[1][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[2][i].changeAccess(accessMatrix[2][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[3][i].changeAccess(accessMatrix[3][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[4][i].changeAccess(accessMatrix[4][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[5][i].changeAccess(accessMatrix[5][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[6][i].changeAccess(accessMatrix[6][i]);
}
for (int i = 0 ; i < accessMatrix.length ; i++)
{
    chess[7][i].changeAccess(accessMatrix[7][i]);
}

}   




public int getAccess()
{
return accessValue;
}

public int changeAccess(int newAccess)
{
int accessNew;
accessNew = newAccess;
return accessNew;    
}
4

1 に答える 1

2

このコードでは:

Board [] chessboard = new Board [8][8];

のタイプBoard[8][8]Board[][]

したがって、コンパイルするには次のように記述する必要があります。

Board [][] chessboard = new Board [8][8];

(次に、配列内に各Board()オブジェクトを作成する必要があります。これは、演習として残しておきます)

そしてこのコードでは:

chessboard.fill();

Boardのメソッドを呼び出しています。これは、配列ではなく、Boardオブジェクトでのみ実行できます。配列内の各ボードオブジェクトでこのメソッドを呼び出す場合は、次のことを行う必要があります。

for (int i = 0; i <8; i ++) {
    for (int j = 0; j < 8; j ++){
         chessboard[i][j].fill();
    }
}

しかし、混乱があるので、それ以上のものがあると思います。チェス盤は、ボードの配列ではなく、ボードだと思います。おそらく、チェス盤を1つ作成して、それを1回埋めたいと思うでしょう。右?次に、これを行うだけです。

 Board chessboard = new Board();
 chessboard.fill();
于 2013-02-10T18:01:38.090 に答える