为什么我的二维数组打印全0?

时间:2015-02-03 01:51:48

标签: java arrays

我有一个名为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();
    }
}

4 个答案:

答案 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()方法...

  1. byte [default = 0]
  2. short [default = 0]
  3. int [default = 0]
  4. long [default = 0L]
  5. float [default = 0.0F]
  6. double [default = 0.0D]
  7. 布尔[default = false]
  8. char [default ='\ u0000']
  9. String(或任何Object)[default = null]
  10. [注意: - 编译器永远不会为未初始化的局部变量分配默认值]