我有一个名为Maze的二维数组。它是一个全局变量。我在setData()方法中的每个位置硬编码数据。但是当我尝试在下面打印我的阵列时,它会打印所有0。这是为什么?谢谢。
public class Maze
{
int [][] maze = new int[4][6];
public void setData()
{
maze[0][0] = 1; maze[0][1] = 0; maze[0][2] = 1; maze[0][3] = 1; maze[0][4] = 0; maze[0][5] = 1;
maze[1][0] = 0; maze[1][1] = 0; maze[1][2] = 1; maze[1][3] = 0; maze[1][4] = 0; maze[1][5] = 0;
maze[2][0] = 1; maze[2][1] = 0; maze[2][2] = 1; maze[2][3] = 0; maze[2][4] = 1; maze[2][5] = 0;
maze[3][0] = 0; maze[3][1] = 0; maze[3][2] = 0; maze[3][3] = 0; maze[3][4] = 1; maze[3][5] = 1;
}
public void printMaze()
{
System.out.println("The matrix: ");
for (int m=0; m<4; m++)
{
for (int n=0; n<6; n++)
System.out.print(maze[m][n]);
System.out.println();
}
}
}
public class MazeTester
{
public static void main (String [] args)
{
Maze mmgg = new Maze();
mmgg.printMaze();
}
}
答案 0 :(得分:6)
您需要运行setData
以放入所有值。
public static void main (String [] args)
{
setData();
printMaze();
}
答案 1 :(得分:2)
你永远不会调用setData()方法,因此数组中充满了默认值0。
答案 2 :(得分:1)
你的数组打印全0,因为你从不初始化它(你刚刚声明了setData()并且你没有调用它),因此它的元素得到默认值,对于int变量是0。
如果您不想使用setData()方法,可以在init bloc中初始化数组:
{
maze[0][0] = 1; maze[0][1] = 0; maze[0][2] = 1; maze[0][3] = 1; maze[0][4] = 0; maze[0][5] = 1;
maze[1][0] = 0; maze[1][1] = 0; maze[1][2] = 1; maze[1][3] = 0; maze[1][4] = 0; maze[1][5] = 0;
maze[2][0] = 1; maze[2][1] = 0; maze[2][2] = 1; maze[2][3] = 0; maze[2][4] = 1; maze[2][5] = 0;
maze[3][0] = 0; maze[3][1] = 0; maze[3][2] = 0; maze[3][3] = 0; maze[3][4] = 1; maze[3][5] = 1;
}
这样,你只需要实例化你的classe Maze并调用方法printMaze():
public static void main ( String[] args ) {
Maze mmg = new Maze();
mmg.printMaze ();
}
答案 3 :(得分:0)
正如jnd所说,你需要在你的对象引用--mmgg上调用setData()方法,如下所示:
mmgg.setData();
另外,回答你的问题,它打印所有0的原因;正如您所观察到的那样,在实例化对象时(这通过'new'运算符发生),编译器将您的类的成员变量设置为“合理的”默认值。
以下是默认值 - 它解释了为什么在实例化Maze类之后迷宫2D数组中的int值为零但没有调用setData()方法...
[注意: - 编译器永远不会为未初始化的局部变量分配默认值]