我使用的方法是读入文件并根据前3行设置2D数组的大小。我的方法返回一个Room[][]
对象,该方法还设置Room[][]
对象的维度,以便在执行该方法之前无法将其设置为外部。例如:
public Room[][] readRooms(String filepath) throws IOException
{
int numberOfRooms;
int numRows;
int numCols;
Room[][] grid;
try
{
FileReader fr = new FileReader(filepath);
BufferedReader br = new BufferedReader(fr);
String next = null;
numberOfRooms = Integer.parseInt(br.readLine());
numRows = Integer.parseInt(br.readLine());
numCols = Integer.parseInt(br.readLine());
grid = new Room[numRows][numCols];
while((next = br.readLine()) != null)
{
//do stuff
}
}
catch{ //catch stuff }
return grid;
}
我正在尝试在另一个类的main方法中创建一个新的Room [] []对象:
Room[][] maze = readRooms(myfilepath);
然而,Java要求在我可以像这样使用迷宫之前定义迷宫。如果没有明确声明维度,是否无法初始化2D数组?
编辑:那些要求的主要方法:
public static void main(String args[])
{
Room[][] maze;
maze = readRooms("C:/Users/Blaise/Programming/csc300/Maze");
}
答案 0 :(得分:1)
错误是您的功能readRooms
不是static
。设为static
并且您不需要Room
的实例来调用它。但您确实需要处理来电者IOException
(或将throws IOException
添加到main()
)
public static Room[][] readRooms(String filepath) throws IOException
此外,您不能双重声明maze
的类型。
public static void main(String args[])
{
Room[][] maze;
try {
maze = Room.readRooms("C:/Users/Blaise/Programming/csc300/Maze");
} catch (IOException e) {
e.printStackTrace();
}
}
或强>
public static void main(String args[]) throws IOException
{
// Room[][] maze; // <-- not
Room[][] maze = Room.readRooms("C:/Users/Blaise/Programming/csc300/Maze");
}
答案 1 :(得分:0)
数组的大小始终在Java中固定。所以你不能....通常不使用数组,你在这里使用List的实现 - 通常是ArrayList,但有很多其他的选择。
当然,您可以从列表中创建一个数组作为最后一步 - 或者只是更改方法的签名以返回列表以
开头答案 2 :(得分:0)
您的主要需要抛出IOException或将maze = readRooms(myfilepath)
括起来:
try {...} catch (IOException) {...}
你也两次宣布迷宫。而不是写
Room[][] maze;
Room[][] maze = readRooms(myfilepath);
将其缩短为
Room[][] maze = readRooms(myfilepath);
像伊兰说的那样。或者,如果你真的不喜欢这样,那就做:
Room[][] maze;
maze = readRooms(myfilepath);
和Elliot也是对的,readRooms()
需要是静态的。
我不知道我是否回答了你的问题,但至少这是一些建设性的批评:)。
编辑:我注意到你的readRooms方法中有try {...} catch {...}
...这用于捕获IOException吗?如果是这样,readRooms()
根本不需要抛出IOException。