簡體   English   中英

將項目添加到ArrayList

[英]Adding item to an ArrayList

我有一個艦隊列表(每個艦隊將擁有自己的卡車列表)。

我有一個與建設者的艦隊班

public Fleet(String businessName){
    this.businessName = businessName;
    this.fleetList = new ArrayList<Truck>();
}

所以:

在我的TUI中,我有一個名為createFleet的幫助程序方法。 當用戶在菜單上按1時,它會詢問他的公司名稱,然后制作一個名為該公司的車隊。 該方法是:

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("");
}

我的問題是,當我添加一個Fleet並打印結果時,我得到:

Fleet 0: Fleet Number One

但是,當我添加第一艦隊時,然后再次按菜單上的1以添加另一個艦隊(名為第二艦隊)並打印艦隊列表,結果是:

Fleet 0: Fleet Number Two
Fleet 1: Fleet Number Two

這似乎使兩者混淆了……當我嘗試向車隊中添加卡車時,這進一步破壞了程序,因為它無法選擇“正確的”車隊。

如果您需要我的其他代碼,請告訴我。 我只需要這個就可以正確添加並打印艦隊列表中的艦隊:

private static ArrayList<Fleet> fleetCollection;

謝謝:)提供的所有幫助!

您可能已在Fleet類中將businessName聲明為static ,如果是,則將其刪除

您需要清楚使用static

靜態變量

  • 它是一個屬於類而不屬於對象(實例)的變量
  • 靜態變量在執行開始時僅初始化一次。 在初始化任何實例變量之前,將首先初始化這些變量
  • 該類的所有實例共享一個副本
  • 可以通過類名稱直接訪問靜態變量,並且不需要任何對象
  • 語法: <class-name>.<variable-name>

靜態方法

  • 它是屬於類而不是對象(實例)的方法
  • 靜態方法只能訪問靜態數據。 它無法訪問非靜態數據(實例變量)
  • 靜態方法只能調用其他靜態方法,而不能從中調用非靜態方法。
  • 靜態方法可以通過類名直接訪問,不需要任何對象
  • 語法: <class-name>.<method-name>
  • 靜態方法無論如何都不能引用“ this ”或“ super ”關鍵字

src: http//www.javatutorialhub.com/java-static-variable-methods.html

您是否在Fleet中重寫了equals方法? 如果是這樣,那是不正確的,那可能是導致您結果怪異的原因

我對您的程序做了一些小的修改以使其變得簡單。

class Fleet{
String businessName;
public Fleet(String businessName)
{ this.businessName = businessName;}
public String getBusinessName()
{
    return businessName;
}
}

public class T {
private static ArrayList<Fleet> fleetCollection = new ArrayList<Fleet>();

    public static void main(String[] args) 
    {
        createFleet("A");
         printFleets();
         createFleet("B");
        printFleets();
    }
     public static void createFleet(String name){
    System.out.println("");
    fleetCollection.add(new Fleet(name));
}
public static void printFleets(){
    Iterator i = fleetCollection.iterator();
    Fleet f;
    while(i.hasNext())
    {
        f = (Fleet)i.next();
        System.out.println(f.getBusinessName());
    }
}

}

它按預期打印。

A

A
B

檢查“ businessName”字段上的訪問修飾符。 它不應該是靜態的。 還要檢查printFleets()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM