编程语言: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
- 提前感谢您的帮助
答案 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;
}
}
}
}