我有一个名为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();
}
}
运行setData
才能将所有值放入。
public static void main (String [] args)
{
setData();
printMaze();
}
你从不调用 setData() 方法,所以数组充满了默认值 0。
你的数组打印所有 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;
}
这样,你只需要实例化你的类迷宫并调用方法printMaze():
public static void main ( String[] args ) {
Maze mmg = new Maze();
mmg.printMaze ();
}
正如 jnd 所说,您需要在对象引用 - mmgg 上调用 setData() 方法,如下所示:
mmgg.setData();
另外,为了回答你的问题,它打印所有0的原因;正如你所观察到的,在实例化对象时(这是通过"new"运算符发生的),编译器将类的成员变量设置为"合理"默认值。
以下是默认值 - 它们解释了为什么在 Maze 类实例化但没有调用 setData() 方法后,迷宫 2D 数组中的 int 值为零......
- 字节 [默认值 = 0]
- 短 [默认值 = 0]
- int [默认值 = 0]
- 长 [默认值 = 0L]
- 浮点数 [默认值 = 0.0F]
- 双倍 [默认值 = 0.0D]
- 布尔值 [默认值 = 假]
- 字符 [默认值 ="\u0000"]
- 字符串(或任何对象)[默认值 = 空]
[注意:- 编译器从不为未初始化的局部变量分配默认值]