2011-07-03 17 views
1

私はarraylist/Linkedリストのデータ型としてストレージクラスを作成しました。オブジェクトをJavaのlinkedlist/arraylistに追加する

private LinkedList bid_history; 

私は

bid_history=new LinkedList <Bid_History>(); 

として私constructureでこれを初期化している私は私が内容を確認「n」の反復の後

bid_history.add(new Bid_History(bid_count,unit_price,bid_success)); 

下に示すように、追加使用してリストに新しいアイテムを追加しますそのリストには「n」個の要素があるが、それらは同じであることが分かった。すなわち、追加された最後の要素iがリスト全体を占有した。あたかもリストに参照変数を追加したかのようです。

私は間違いを犯している可能性がありますか?私もarraylist、同じ問題を使用しました。私はアクセス指定子で何か問題があったと思います!しかし、私は私が

int count=0,size; 
size=bid_history.size(); 
while(count<size) 
System.out.println(((Bid_History)bid_history.get(count++)).getBid_amount()); 
を次のように印刷コードがある

bid() 
{ 
    int bid,quantity; 
     bid_success=false; 
     bid_count++; 
     System.out.println("Starting to bid, Bid ID:"+bid_count); 
     quantity=(int)(rated_power*duration/60); 
     if(bid_history.isEmpty()) 
     { 
      unit_price=10; 
     } 
     else 
     { 
      unit_price++; 
     } 
     bid=unit_price*quantity; 
     //Sending the calculated bid 
     send_res(unit_price,quantity,500); 
     long startTimeMs = System.currentTimeMillis(); 
     System.out.println("Time:"+startTimeMs); 
     while(!(System.currentTimeMillis()>(startTimeMs+2000))); 
     System.out.println("Time at end:"+System.currentTimeMillis()); 

     bid_history.add(new Bid_History(bid_count,unit_price,bid_success)); 

     if(bid_success!=true) 
     { 
      bid(); 
     } 
} 

再帰関数を使用----

.....アイデアを追加しました------- ています

+3

表示されているコードに問題はないようです。あなたの(編集された)ループコードを表示してください。私たちはあなたを助けるためにさらに多くの情報が必要です。また、あなたは彼らがすべて同じであることをどのように知っていますか?そのコードも見せてください – Bohemian

+0

連続した反復で 'bid_count、unit_price、bid_success'の値を変更していますか? –

+0

'bid_success'は別の関数によって変更されています。 – Gan

答えて

5

もう1つの可能性は、BidHistory(カウント、価格、成功)が適切な仕事をしておらず、正しいフィールドを設定していないことです。私は推測したくないですが、BidHistoryにフィールドを持つ代わりに、クラス内の静的カウント/価格/成功フィールドを使用している可能性があります。

コンストラクタは次のようになります(重要である「これ。」):

public BidHistory(int count, float price, boolean success) { 
    this.count = count; 
    this.price = price; 
    this.success = success; 
} 
+0

あなたは正しいジャレクです。私は静的変数を使用し、ゲッターとセッターを生成するためにEclipseを使用し、実際には見ていませんでした。 – Gan

0

あなたの問題の唯一の説明は、bid_count,unit_priceおよびbid_successの値が各繰り返しで変更されないことです。

0

私はコードを容易にするために、以下の変更を提案:

private final List<BidHistory> bidHistory = Lists.newLinkedList(); 

finalは必ずリストということになり別のリストに置き換えることはできません。ジェネリックは、誤って互換性のないオブジェクトをリストに追加するのを防ぎます。また、リストをループするのが簡単になります。 Google GuavaのクラスListsは、一般的なデータ型について言及する必要がないため、コードを簡潔にしています。

BidHistoryクラスのすべてのフィールドもfinalにする必要があります。後で変更することはできません。これは歴史に関するものなので、とにかく後で事実を変更することはできません。

private void printHistoryForDebugging() { 
    for (BidHistory bid : bidHistory) { 
    System.out.println(bid.getBidAmount() + " (hashCode " + System.defaultHashCode(bid) + ")"); 
    } 
} 

私は、オブジェクトが同じであるかどうかを確認するために、各入札のdefaultHashCodeを印刷することにしました。同じでないオブジェクトの場合、defaultHashCodeも非常に異なる可能性があります。

関連する問題