所以我試圖在一個Grid類中實作一個方法,該方法回傳由用戶輸入的兩個坐標指定的瓦片(瓦片類的一個實體)。但我不知道如何去實施它。
我有一個ArrayList包含這樣的瓷磚的所有實體tiles.add(new Tile(x, y));
這是有問題的方法,也是我回傳所需圖塊的嘗試:
public ArrayList<Tile> getTileAtPos(int xCoor, int yCoor) {
// if the coordinates are out of bounds
// return null;
// else
return tiles.get(/*???*/); // <---------------------- have no clue
}
uj5u.com熱心網友回復:
我建議您閱讀檔案。
無論如何,如果您不想這樣做,解釋是get()ArrayList 的方法使用索引來回傳物件。
ArrayList 不是基于字典/映射的資料結構,它具有基于物件相似性進行比較的原始函式。
與陣列相比,以下內容:
int_arr[2]; // some number
相對
int_arraylist.get(2); // some number
是否完全相同。
如果您想根據其RAW PROPERTIES查找元素,在本例中是您的xCoordsand yCoords。然后,您必須使用回圈來檢查 ArrayList 中的各個元素是否與屬性匹配。像這樣的東西:
if(xCoord > boundX || yCoord > boundY) {
return null;
}
for(Tile e : tiles) {
if(e.xCoord == xCoord && e.yCoord == yCoord) // change to match your accessor methods or however you access the x and y
return e;
}
return null;
希望這可以幫助!
uj5u.com熱心網友回復:
您想在串列上執行搜索并回傳與坐標匹配的圖塊,您可能想更改方法的簽名以獲取您想要執行搜索的串列并回傳匹配串列,并且永遠不會回傳 null回傳集合的方法,總是回傳一個空集合。
public List<Tile> getTileAtPos(int xCoor, int yCoor, List<Tile> tiles) {
return tiles.stream()
.filter(t -> t.getXCoor() == xCoor && t.getYCoor() == yCoor)
.collect(Collectors.toList());
}
@Getter
class Tile {
private int xCoor;
private int yCoor;
}
如果只有一個 Tile 可以匹配位于 x 和 y 的條件,則方法更改為:
public Tile getTileAtPos(int xCoor, int yCoor, List<Tile> tiles) {
return tiles.stream()
.filter(t -> t.getXCoor() == xCoor && t.getYCoor() == yCoor)
.findFirst().orElse(null);
}
在這種情況下,如果未找到圖塊,則回傳 null。
但我更希望該方法回傳一個 Optional ,因此該方法的用戶知道他并不總是保證有結果并降低空指標的風險:
public Optional<Tile> getTileAtPos(int xCoor, int yCoor, List<Tile> tiles) {
return tiles.stream()
.filter(t -> t.getXCoor() == xCoor && t.getYCoor() == yCoor)
.findFirst();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/527237.html
標籤:爪哇数组目的数组列表实例
上一篇:缺少退貨宣告,但不確定如何修復
