2012-02-28 226 views
0

我有一個隊列的數組列表(每個隊都將擁有自己的卡車列表)。將項目添加到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 0: Fleet Number One 

但是,當我加入車隊一號,然後按1菜單上再添加其他車隊(命名爲車隊二號)和打印艦隊名單,結果是:

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

這似乎是混淆了兩個... ...,這進一步中斷的程序,當我嘗試添加卡車到船隊,因爲我噸不能選擇「正確」的艦隊。

請讓我知道你是否需要我的其他代碼。 我只需要這在艦隊列表中正確添加和打印艦隊:

private static ArrayList<Fleet> fleetCollection; 

謝謝:)所有幫助!

+0

你可以發佈printFleets()方法的代碼? – JProgrammer 2012-02-28 06:37:20

+0

對,對不起。我會縮進它。 – user1176922 2012-02-28 06:41:03

+1

嘿男人....你的問題在哪裏? – gtiwari333 2012-02-28 07:14:14

回答

3

你可能在艦隊static類中聲明businessName,如果這樣的話將其刪除

+0

在這種情況下,'getBusinessName()'應該是** NOT ** static也是 – plucury 2012-02-28 06:45:24

+0

getBusinessName()的remove方法修飾符'static'' – 2012-02-28 06:46:04

+0

'fleetList'的remove方法修飾符'static' – 2012-02-28 06:48:52

1

我做了小的修改程序,使其簡單。

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()方法。

+0

謝謝:)現在它返回船隊正確,但我的addTruck )仍然破裂。 – user1176922 2012-02-28 06:59:35

3

你需要清楚地瞭解使用static

靜態變量

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

靜態方法

  • 它是一種其貝隆方法gs到類而不是對象(實例)
  • 靜態方法只能訪問靜態數據。它不能訪問非靜態數據(實例變量)
  • 靜態方法只能調用其他靜態方法,無法從中調用非靜態方法。
  • 靜態方法可以直接通過類名來訪問,並且不需要任何對象
  • 語法:反正
<class-name>.<method-name>
  • 靜態方法不能引用「this」或「super」關鍵字

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

  • 2

    你有沒有重寫Fleet中的equals方法?如果是這樣,這是不正確的,它可能是你奇怪的結果的原因

    +0

    您需要該類的實例才能調用非靜態方法;像這樣:Object a = new Object();一個方法(); – Tom 2012-02-28 07:03:03

    +0

    我應該爲這個問題開一個新的問題嗎?或者我應該刪除以上所有內容,並在此發佈新問題? – user1176922 2012-02-28 07:05:13