![](/img/trans.png)
[英]How do you initialize a 2d array of one type with the dimensions of a 2d array of another type
[英]How do you initialize a 2D array without setting its dimensions?
我正在使用一種讀取文件並根據前 3 行設置二維數組大小的方法。 我的方法返回一個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");
}
錯誤是您的函數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");
}
數組的大小在 Java 中總是固定的。 所以你不能......通常不使用數組,而是在這里使用 List 的實現 - 通常是 ArrayList,但有很多其他可用的替代方法。
當然,您可以從列表中創建一個數組作為最后一步 - 或者只是更改方法的簽名以返回一個列表以開始
您主要需要拋出一個 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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.