2D数组不打印

时间:2016-01-26 15:25:29

标签: java arrays input 2d

我正在尝试制作一个基本上充当房间/网格的2D数组 - 就像一个自上而下的视图。

此代码根据用户输入创建一个维度row x col的数组。然后我用“。”初始化每个单元格。代表一个空间。

我的问题是,为什么当我使用printRoom()方法时,它根本不打印任何东西?双嵌套for循环正在数组中运行,但没有任何内容被打印出来。

我知道它与用户输入有关,因为我尝试使用row = 5和col = 5初始化,并且打印得很好。

感谢您的帮助。

这是房间类:

public class Room
{
    int row, col;   
    String[][] arr = new String[row][col];

    //Room Constructor
    public Room(int row, int col)
    {
        this.row = row;
        this.col = col;              
    }

    //Fills the Room with "."
    public void fillRoom()
    {
        for (int i = 0; i < arr.length; i++)
        {
            for (int j = 0; j < arr[i].length; j++)
                arr[i][j] = ".";
        }
    }

    //Prints the entire room/grid
    public void printRoom()
    {
        for (int i = 0; i < arr.length; i++)
        {
            for (int j = 0; j < arr[i].length; j++)
                System.out.print(arr[i][j]);

            System.out.println();
        }
    }
}

这是我的RoomTest类,其中包含main:

import java.util.*;

public class RoomTest
{
    public static void main (String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int row, col;

        System.out.println ("Enter room dimensions (row col)");
        row = scan.nextInt();
        col = scan.nextInt();        

        Room room1 = new Room(row,col);
        room1.fillRoom();
        room1.printRoom();
    }
}

以下是我运行并输入用户输入时的输出:

输入房间尺寸(col行)

4 6

3 个答案:

答案 0 :(得分:3)

初始化数组时,rowcol为零,因此它是一个0x0数组。

因此,for (int i = 0; i < arr.length; i++)中的保护条件立即为假,因此永远不会执行。

您需要将数组初始化移动到构造函数中:

arr = new String[row][col];

答案 1 :(得分:1)

尝试在这里添加2D数组的长度,因为之前用零初始化:

  int row= 4, col= 6; 
  String[][] arr = new String[row][col];

或者你可以在Constructor中初始化它,如下所示:

  String[][] arr;
//Room Constructor
public Room(int row, int col)
   {
   arr = new String[row][col];
    this.row = row;
    this.col = col;              
    }

在您的main方法中初始化rowcol

 int row= 4, col= 6;

答案 2 :(得分:0)

要解决此问题,请在Room对象的构造函数中创建数组:

int row, col;   
String[][] arr = null

//Room Constructor
public Room(int row, int col)
{
    this.row = row;
    this.col = col;
    arr = new String[row][col];
}