2011-12-08 19 views
0

私はタイプフルーツのベクトルを持っています。私は、私の描画キャンバスに様々な種類の果物を挿入することができます。 2つの重なり合った果物がある場合、それを選択した後に果物を持ち上げて、他の果実の上にあるように見えるようにしたい。ベクトルの要素の順序を変更するにはどうすればよいですか?

私の基本的な考え方は、jbuttonを押した後に呼び出されるraiseFruit()を持たせることです。私は、選択された果物に等しい一時変数セットを作成し、それを果実に等しく(a + 1)...ベクトルの次の位置に設定しようとします。そして、これをtemp変数に等しく設定します。私はこれが正しい考えだと思いますか?

public void raiseFruit() { //raisefruit button 
    if (_fruitIsSelected==true) { 
     for (int i=0; i<_storedFruit.size() - 1; i++) { 
      FunFruit a = _storedFruit.get(i); 
      FunFruit b = _storedFruit.get(i + 1); 
      if (_storedFruit.get(i+1)!=null) { 
       FunFruit temp = a; 
       _storedFruit.get(i) = _storedFruit.get(i+1); 
       a=b; 
       b = temp; 
       //_storedShapes.setElementAt(_storedShapes.get(i+1), i); 
       //_storedShapes.setElementAt(_currentShape, i+1); 
       repaint(); 
      } 
     } 
    } 
} 

私はsetElementAtを使用してみました、それが動作しますが、私は再び「raisefruit」を押した場合、それはそれの前にある要素だけで完全に消えるようになります。私はちょうどそれの前に要素をコメントを消えて消していくのを続ける部分で私のコードを投稿しました。 "a = b"の代わりに、変数bのベクトルのwhatsに等しい変数aのベクトルにwhatsを設定しようとしています。を除いて、私は "左手側が変数でなければならない"というエラーが出ています。私はちょうどa =を設定するだけでポインタが変わることを知っているからです。私は実際にベクトル内でそれを変更する方法も得られません。前にある果物の要素は削除されません。

+0

に代入されているリストの代わりに、

_fruits.get(_currentSelectedFruit + 1) = temp; 

内の要素を設定する

_fruits.setElementAt(fruit, index); 

を使用'Vector'を使用しますか?かなり古くなったJavaの本/チュートリアルを読んでいないことは確かですか? 'Vector'は、10年以上にわたり旧式/古くなったクラスとみなされます。 – BalusC

+0

なぜベクターは古くなったクラスと考えられますか?私はAPコンピュータサイエンスの高等学校でそれらを使うことを学んだ。 – Susie

+0

ベクトルは確かに時代遅れではありません。その有用性は、ArrayListやCollectionsクラスから取得したオブジェクトと同じくらい優れていますが、他の同様のクラスでは利用できない機能を持っています。 – Crollster

答えて

1

リストの代わりに一時変数を再割り当てしています。あなただけのあなたに学びましたところ、興味があるだけを取得することにより、返されたポインタを取り、一時

関連する問題