2013-12-24 68 views
1

我想使用Collections.swap向上和向下移動自定義數組項目,但我不明白如何以某種方式實現它,以便我的應用程序不會崩潰。向上或向下移動自定義數組項目

private List<Drinks> myDrinks = new ArrayList<Drinks>(); 
private ArrayList<String> yourItems; 

...

private void populateDrinkList() { 

     if (yourItems.contains("pie")){ 
     myDrinks.add(new Drinks("a")); 
     myDrinks.add(new Drinks("b")); 
     myDrinks.add(new Drinks("c")); 
     myDrinks.add(new Drinks("d")); 
     myDrinks.add(new Drinks("e")); 

     if (yourItems.contains("chocolate")){ 
      String toMoveUp = "e"; 
      while (myDrinks.indexOf(toMoveUp) != 0) { 
      int i = myDrinks.indexOf(toMoveUp); 
      Collections.swap(myDrinks, i, i - 1); 
    } 
} 
+0

你能有個例子來說,你是怎麼想你的代碼 –

+0

的輸出中輸入所以什麼問題? –

+0

我想改變數組項的位置。例如,如果我的其他數組包含值巧克力(yourItems),我想要移動,myDrinks值的位置優先。如果你有巧克力,你更有可能製作配方e – JavaGrassHopper

回答

0

首先修復yourItems變量ArrayList應該以這種方式聲明:

private ArrayList<String> yourItems=new ArrayList<String>(); 

二點myDrinksArrayList集合了利用Drinks對象作爲參數,這意味着你不能使用字符串toMoveup看它裏面它應該是一個Drinks對象:

Drinks toMoveUp=new Drinks("e"); 

然後:

while (myDrinks.indexOf(toMoveUp) != 0) { 
      int i = myDrinks.indexOf(toMoveUp); 
      Collections.swap(myDrinks, i, i - 1); 
    } 

好運

+0

其中線條正好指向我,其中錯誤 –

+0

在我選擇了2個時崩潰。這個數組對應於一個列表視圖。列表視圖對象放置後是否爲靜態?當您選擇2個數據時,您是否有 – JavaGrassHopper

+0

? –

-1

您可以從列表中刪除(給你已經有了索引),然後用myDrinks.add(0,<Object>)方法將其添加爲第0個元素。該代碼會是這樣,

 Drinks toMoveUp = new Drinks("e"); 
     int index = myDrinks.indexOf(toMoveUp); 
     myDrinks.remove(index); //remove from where it is now 
     myDrinks.add(0,toMoveUp); //add to the top 
+0

我不想刪除其他值。使用交換將移動所有其他值 – JavaGrassHopper

+0

已經有一種方法可以做到這一點。 [Collections.swap](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#swap(java.util.List,int,int)) –

+0

@VimalBera,Swap會將元素放在頂部到'toMoveUp'的位置,但這隻會將'toMoveUp'元素加到 – pulasthi7