[英]Java: Accessing an ArrayList inside an ArrayList?
在FleetTUI.java中,我有一個車隊列表(每個車隊將擁有自己的卡車列表)。
private static ArrayList<Fleet> fleetCollection;
在Fleet.java中,我有一個Truck對象列表。
ArrayList<Truck> fleetList;
在它的構造函數中初始化。
public Fleet(String businessName){
this.businessName = businessName;
this.fleetList = new ArrayList<Truck>();
}
因此,每當我建立一個新的車隊時,我也會一起列出卡車清單。
在FleetTUI.java中,我有一種方法可以將卡車添加到艦隊中,之前制作:
public static void addTruck(){
printFleets();
System.out.println("Please enter the fleet number where this truck will be added:");
inputText = scan.nextLine();
int inputFleetId = Integer.parseInt(inputText);
System.out.println("Please enter the truck's horn sound:");
inputText = scan.nextLine();
String inputHorn = inputText;
System.out.println("Please enter the truck's fuel capactity:");
inputText = scan.nextLine();
int inputFuelCapacity = Integer.parseInt(inputText);
System.out.println("Please enter the amount of gas remaining in the tank:");
double inputGasRemaining = Double.parseDouble(scan.nextLine());
**Fleet.fleetList**.add(inputFleetId, new Truck(inputHorn, inputFuelCapacity, inputGasRemaining));
System.out.println("--- A truck that goes " + inputHorn + " with " + inputGasRemaining + " gallon(s) in a " + inputFuelCapacity + " gallon tank has been added to " + **fleetCollection.getBusinessName()** + "'s fleet ---" );
System.out.println("");
}
我有粗暴的地方,我得到錯誤。 錯誤是:
無法對非靜態字段Fleet.fleetList進行靜態引用
無法從Fleet類型對非靜態方法getBusinessName()進行靜態引用
我不知道從我使用該方法創建的車隊內部訪問卡車列表的任何其他方式:
public static void createFleet(){
System.out.println("");
System.out.println("Please enter the name of the fleet.");
inputText = scan.nextLine();
fleetCollection.add(new Fleet(inputText));
printFleets();
System.out.println("");
System.out.println("--- Fleet: " + inputText + " added ---");
System.out.println("");
}
所以我想我的問題確實是:我如何正確地將新卡車添加到卡車列表中,該列表位於我使用createFleet()創建的車隊內部,該艦隊位於其自己的車隊集合中?
更新:謝謝:)你們真的幫幫我了! 再來一次!
您的問題是您正在創建static
方法,然后您嘗試訪問non-static
變量,在這種情況下,這是一個fleetlist
。 這將導致您顯示的錯誤。
由於您使用的是構造函數,因此不需要調用static
方法。 將其稱為靜態將允許在不需要構造對象的情況下調用該方法,從我所看到的不是您所追求的東西。
簡而言之,通過從方法聲明中刪除static
關鍵字,使您的方法成為非靜態方法,並通過使用初始化的Fleet
對象訪問諸如addTruck()
和createFleet()
之類的方法。
另一方面,您可以將自己的艦隊列表聲明為靜態列表,如下所示:
private static ArrayList<Truck> fleetList;
編輯:看到您的評論,這就是您可以做到的:
在Java中,封裝對象變量以便更好地控制對此類變量的訪問被認為是一種好習慣,因此您可以在Fleet
類中執行類似操作:
private List<Truck> fleetList;
public Fleet(String businessName){
this.businessName = businessName;
this.fleetList = new ArrayList<Truck>();
}
public List<Truck> getFleetList()
{
return this.fleetList;
}
在您的FleetUI
類中,您可以執行以下操作:
private ArrayList<Fleet> fleetCollection;
...
for (Fleet fleet : this.fleetCollection)
{
for (Truck truck : fleet.getFleetList())
{
//Do something with your truck here
}
}
編輯2:要將卡車添加到您的陣列,您可以通過2種方式來完成。 讓我們假設對象fleet
是您要向其添加卡車的車隊。 在FleetUI
類中,您可以這樣:
fleet.getFleetList().add(new Truck(...))
其他(在我看來,更好的方式)是有一個addTruck
方法在你的fleet
的對象,像這樣:
public void addTruck(Truck truck)
{
this.fleetList.add(truck);
}
你在打電話
Fleet.fleetList.add()
靜態方法addTruck的方法。
引用這樣的成員是不好的做法:
Fleet.fleetList.add
您應該介紹一些訪問器方法,以將卡車添加到Fleet類中的flletList
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.