将2d数组从一种方法传递到另一种方法

时间:2012-12-11 06:41:38

标签: java arrays parameters

编程语言: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);

但给了我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

- 提前感谢您的帮助

2 个答案:

答案 0 :(得分: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);
        ...

    }
}

答案 1 :(得分: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;
                }
            }

        }
    }