2010-11-25 12 views
1

「カメ」の量を持つリストが作成されています。これはコードの一部であり、すべてではありません。java - リスト内の同じ値を確認する

int nrTurtles = Keyboard.nextInt("How many turtles to create: "); 
w = new GraphicsWindow(500, 300); 
for (int k = 1; k <= nrTurtles; k++) { 
     Turtle t = new Turtle(w, 50, 50 + 10*k); 
      turtles.add(t); 
} 

そして、それぞれのカメは私が(たとえば)を取得することができます調整値があります。今、私は何に応じて、2匹の以上のカメ場合はスマートな方法チェックに行う方法

turtles.get(0).getX() //this gets turtle nr 1 position 

リストにはの同じ調整値固定値450)がありますか?

そして 2以上が同じ値(450)を持っている場合、私はturtle1とturtle2が同じであることを起これば、「turtle1とturtle2がなものである」というsystem.out.printを書きたいです値。 (450)となし、他のの値を有する唯一の亀がある場合

は、私は元のために、それだけでカメを書きたいです。 「カメ1は唯一のものです」

+0

は、あなたの 'Turtle'クラスを'等号を(持っている) 'メソッドを実装? –

+0

うーん..いいえ、私はそうは思わない。 – Jake

+0

サブクラス化/コードの編集と等価メソッドの追加ができますか? – Knubo

答えて

0

これを行う最も簡単な方法は、リストを反復して関連する値を比較し、一致する場合は一致するカメを結果リストに追加することです。

カメのリストがソートされていない限り、リストを検索する手法としてはかなり反復に制限されています。

2 EDIT:

ArrayList<Turtle> results = new ArrayList<Turtle>(); 

for (int i = 0; i < nrTurtles; i++) { 

    if (turtles.get(i).getX() == 450) { 

     results.add(turtles.get(i)); 
    } 
} 

if (results.size() == 0) { 

    // No turtles are at 450 

} else if (results.size() == 1) { 

    // Turtle is alone at 450 

} else { 

    // Turtles are all at 450 
} 
+0

はい、はい。どうすればいい?私はそれほど良くはありません。 – Jake

+0

@Jake簡単な例を挙げて答えを編集しました。 –

+0

はい、それは良いようですが、ただ1つの質問です。もし2頭のカメの位置が300であれば、あなたのコードは300頭のカメが等しいかどうかをチェックします。私は値が450だったかどうかだけをテストしたいと思っていました。 – Jake

1

私はこのような構造(擬似コード)を作成したい:

キーが配位値であり、値が持っているカメの配列である
HashTable{ 
    450 => Array{ 1, 5 }, 
    300 => Array{ 2 }, 
    150 => Array{ 3, 4, 6 } 
} 

それ。

構造を充填:

for each turtle: 
    get coord value 
    do we have it as a key yet? 
    no: create coord.value => empty array 
    insert turtle id into coord.value array 

それをプリントアウトして、それを反復処理するだけです。

+0

(coord.value 450でカメだけが必要な場合は、「coord値を取得する(450でない場合は続行)」チェックを追加するだけです) – Piskvor

1

あなたはMap<Integer, Set<Turtle>>を使用することができます。

をX座標であるキーを持ちます。ハッシュマップの使用方法については、こちらをご覧ください:

基本的に、すべてのカメをループとは、あなたのマップに追加します。ような何か:

Map<Integer, Set<Turtle>> map = new HashMap<Integer, Set<Turtle>>(); 
for(Turtle t: turtles) { 
    Set<Turtle> set = m.get(t.getX()); 
    if(set == null) { 
     s = new HashSet<Turtle>(); 
     map.put(t.getX(), set); 
    } 
    map.put(t.getX(), set); 
} 

次に、あなただけの要素を通過し、より多くの1、その後があるかどうかを確認:

for(Map.Entry<Integer, Set<Turtle>> e: map.entrySet()) { 
    Set<Turtle> set = e.getValue(); 
    if(set.size() > 1) { 
     System.out.println("These turtles have the same X coordinate:"); 
     for(Turtle t: set) { 
      System.out.println(t); 
     } 
    } 
} 
関連する問題