1

プログラミング言語: Java

編集者:ヴィム

2次元配列を含む割り当てをしようとしています。あらゆる種類の配列を使用したのはこれが2回目なので、かなり苦労しています。とにかく、ここで誰かが私のために解決してくれることを願っています。

1)これは、二重配列を別のメソッドに渡す方法ですか?

これは私のブール配列です:

boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE];

これが私がそれを通過しようとしてきた方法です。

countNeighbors(TempGrid[][]);

これは、配列を受け入れるメソッドです。

 public static int countNeighbors ( final boolean[][] grid, final int row, final int col )

ただし、コンパイルすると、次のエラーが表示されます。

error: '.class' expected
     countNeighbors(TempGrid[][]);
                                ^
1 error

次のような .class エラーについて調査しました。

- http://www.dreamincode.net/forums/topic/70299-class-expected-error/

- http://stackoverflow.com/questions/12309220/class-error-in-Java-applet

- http://www.daniweb.com/software-development/java/threads/213357/pass-2-dimensional-array-into-method

およびその他のさまざまなサイト/フォーラム。彼らが提示した解決策は、機能しなかったか、私のプログラムでさらに問題を引き起こしました。

ところで、これはメソッド全体です:

 public static void genNextGrid ( boolean[][] grid )
{

     boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE];

     TempGrid[GRIDSIZE][GRIDSIZE] = grid[GRIDSIZE][GRIDSIZE];

     countNeighbors(TempGrid);

    for(int row = 1; row < 18; row++)
{

        countNeighbors(row);

        for(int col = 1; col < 18; col++)
{

            countNeighbors(col);

            if(n == 3)
            {
                TempGrid[row][col] = true;
            }
            else if(n == 2 || n == 3)
            TempGrid[row][col] = true;
            }
            else
            {
                TempGrid[row][col] = false;
            }

        }
    }


}

[][]から削除しようとしたので、次のcountNeighbors(TempGrid[][]);ようになります。

countNeighbors(TempGrid);

しかし、私に3つのエラーを与えました

 error: method countNeighbors in class Life cannot be applied to given types;
     countNeighbors(TempGrid);
     ^
 required: boolean[][],int,int
found: boolean[][]
reason: actual and formal argument lists differ in length


error: method countNeighbors in class Life cannot be applied to given types;
        countNeighbors(row);
        ^
required: boolean[][],int,int
found: int
reason: actual and formal argument lists differ in length


 error: method countNeighbors in class Life cannot be applied to given types;
            countNeighbors(col);
            ^
  required: boolean[][],int,int
 found: int
 reason: actual and formal argument lists differ in length

-事前にご協力いただきありがとうございます

4

2 に答える 2

2

はい、2番目の方法が正しい方法です。

 countNeighbors(TempGrid);

そして、後のエラーは、必要な引数の数が一致しないことを示しています。

public static int countNeighbors ( final boolean[][] grid, final int row, final int col )

このcountNeighborsメソッドは 3 つのパラメーターを想定していますが、1 つだけを渡しています。このメソッドに渡す必要があるものを確認するか、不要な場合は削除してください。また、 を返しますint。さらに使用するには、それを何かに割り当てる必要があります。私はそれが変数だと思いますn、あなたはそれを使うつもりです。

最も内側のループでメソッドを呼び出す必要があります

for(int row = 1; row < 18; row++) {
    for(int col = 1; col < 18; col++) {
        n = countNeighbors(TempGrid,row,col);
        ...

    }
}
于 2012-12-11T06:44:53.210 に答える
1

変数を宣言するときに必要なのは [][] だけです。その後、名前のみを使用します(つまり、TempGrid)

したがって、メソッドが 2D 配列を取り、foo という名前の場合、foo(TempGrid)TempGrid への参照が foo に渡されます。

Java ではすべてがオブジェクトであるため、メソッドはクラス内で宣言する必要があります。

私見あなたのメソッドは次のようになります。

public static void genNextGrid ( boolean[][] grid )
    {

        boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE];

        TempGrid = grid;


        for(int row = 1; row < 18; row++)
        {


            for(int col = 1; col < 18; col++)
            {

                int n = countNeighbors(TempGrid, row, col);

                if(n == 3)
                {
                    TempGrid[row][col] = true;
                }
                else if(n == 2 || n == 3)
                    TempGrid[row][col] = true;
                else
                {
                    TempGrid[row][col] = false;
                }
            }

        }
    }
于 2012-12-11T06:44:42.520 に答える