簡體   English   中英

將2d數組從一種方法傳遞到另一種方法

[英]Passing a 2d array from one method to another

編程語言:Java

編輯:Vim

我一直試圖做一個包含二維數組的任務。 我一直在努力,因為這是我第二次使用任何類型的陣列。 無論如何,我只是提出了一些問題,希望有人可以幫我解決。

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[][]); 所以它看起來像:

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

- 提前謝謝你的幫助

是的,第二種方式是正確的方式,即

 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);
        ...

    }
}

聲明變量時只需要[] []。 之后只使用名稱(即TempGrid)

因此,如果您的方法采用2D數組並命名為foo,則: foo(TempGrid)將對foo(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;
                }
            }

        }
    }

暫無
暫無

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

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