二维数组不打印
2D array not printing
我正在尝试制作一个二维数组,它基本上充当 room/grid - 就像一个自上而下的视图。
此代码根据用户输入创建一个维度数组 row x col。然后我让它用“。”初始化每个单元格。代表一个space.
我的问题是,为什么当我使用 printRoom() 方法时它根本不打印任何东西?双嵌套 for 循环 运行 遍历数组,但没有打印任何内容。
我知道这与用户输入有关,因为我只尝试使用 row = 5 和 col = 5 进行初始化,并且打印效果很好。
感谢您的帮助。
这是房间 Class:
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 class,其中包含 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();
}
}
这是我 运行 并输入用户输入时的输出:
输入房间尺寸(列)
4 6
初始化数组时,row
和 col
为零,因此它是一个 0x0 数组。
因此,for (int i = 0; i < arr.length; i++)
中的保护条件立即为假,因此永远不会执行。
您需要将数组初始化移动到构造函数中:
arr = new String[row][col];
尝试在此处添加二维数组的长度,因为 before 初始化为零:
int row= 4, col= 6;
String[][] arr = new String[row][col];
或者你可以像这样在构造函数中初始化它:
String[][] arr;
//Room Constructor
public Room(int row, int col)
{
arr = new String[row][col];
this.row = row;
this.col = col;
}
并在您的主要方法中初始化 row
和 col
:
int row= 4, col= 6;
要解决此问题,请在 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];
}
我正在尝试制作一个二维数组,它基本上充当 room/grid - 就像一个自上而下的视图。
此代码根据用户输入创建一个维度数组 row x col。然后我让它用“。”初始化每个单元格。代表一个space.
我的问题是,为什么当我使用 printRoom() 方法时它根本不打印任何东西?双嵌套 for 循环 运行 遍历数组,但没有打印任何内容。
我知道这与用户输入有关,因为我只尝试使用 row = 5 和 col = 5 进行初始化,并且打印效果很好。
感谢您的帮助。
这是房间 Class:
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 class,其中包含 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();
}
}
这是我 运行 并输入用户输入时的输出:
输入房间尺寸(列)
4 6
初始化数组时,row
和 col
为零,因此它是一个 0x0 数组。
因此,for (int i = 0; i < arr.length; i++)
中的保护条件立即为假,因此永远不会执行。
您需要将数组初始化移动到构造函数中:
arr = new String[row][col];
尝试在此处添加二维数组的长度,因为 before 初始化为零:
int row= 4, col= 6;
String[][] arr = new String[row][col];
或者你可以像这样在构造函数中初始化它:
String[][] arr;
//Room Constructor
public Room(int row, int col)
{
arr = new String[row][col];
this.row = row;
this.col = col;
}
并在您的主要方法中初始化 row
和 col
:
int row= 4, col= 6;
要解决此问题,请在 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];
}