2012-02-28 21 views
0

私はFleetsの配列リストを持っています(各艦隊はトラックのリストを保持します)。私は、コンストラクタそう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(""); 
} 

そして、私の問題は、私は結果を1艦隊を追加し、印刷するときに私が得ることです::その方法がある

Fleet 0: Fleet Number One 

をしかし、私はフリートナンバーワン追加するときは、メニューの1を押してください再び(フリートナンバー2つの名前付き)は、別の艦隊を追加し、艦隊のリストを印刷するには、結果は以下のとおりです。

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

これは、2つの混乱しているようだ...と、この更なるブレイクプログラム私はトラックを追加しようとすると、艦隊に「正しい」艦隊を選ぶことはできません。

他のコードが必要な場合は教えてください。 私はちょうど正しくフリートリストに艦隊を追加して印刷するにはこれが必要:

private static ArrayList<Fleet> fleetCollection; 

は、すべてのヘルプは:)ありがとうございます!

+0

printFleets()メソッドのコードを投稿できますか? – JProgrammer

+0

ええ、ごめんなさい。私はそれをインデントします。 – user1176922

+1

ちょっと男....あなたの質問はどこですか? – gtiwari333

答えて

3

あなたは、おそらくそう、それに

+0

その場合、 'getBusinessName()'は静的すぎるべきではありません** 012静的すぎる – plucury

+0

メソッドの修飾子 'getBusinessName()'の静的 ' –

+0

' fleetList'のメソッド修飾子 'static'を削除します –

1

を削除した場合、私はそれを簡単にするために、あなたのプログラムに小さな変更を加え、フリートクラスstaticbusinessNameを宣言しました。

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

3

あなたは

  • 静的変数が初期化されていることがクラスに属し、(インスタンス)のオブジェクトへの変数ではないstatic

    静的変数

    • の使用について明確にする必要があります実行の開始時に1回だけ実行されます。これらの変数は、インスタンス変数の初期化前に最初に初期化されます。
    • クラスのすべてのインスタンスが共有する単一のコピー
    • 静的変数はクラス名で直接アクセスでき、オブジェクトは必要ありません
    • 構文:<class-name>.<variable-name>

    静的メソッド

    • それがどのベロン方法であります静的メソッドは静的データにのみアクセスできます。
    • 静的メソッドは、他の静的メソッドのみを呼び出すことができ、静的メソッドを呼び出すことはできません。 <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

    +0

    その問題の新しい質問を開くべきですか?または、上記のすべてを消去して、ここに新しい質問を投稿する必要がありますか? – user1176922

    関連する問題