2015-06-09 113 views
1

我試圖標記New direction添加到ArrayList mergeArray時,我發現在buffer ArrayList中的第二3的價值,但我總是讓ArrayList中第一個3值獲取第二個相同的值。我怎麼能在阿姆斯特丹之後獲得第二個?ArrayList中<String>

我很感激任何幫助。

輸出:

paris 
3 
water 
ball 
money 
Amsterdam 
3 
door 

輸出應該看起來像這樣:

paris 
3 
water 
ball 
money 
New direction 
Amsterdam 
3 
door 

代碼:

public static void main(String[] args) { 

    ArrayList<String> buffer = new ArrayList<String>(); 
    ArrayList<String> mergeArray = new ArrayList<String>(); 

    String route = "3"; 
    String direction = "paris"; 
    String start = "Amsterdam"; 

    buffer.add("paris"); 
    buffer.add("3"); 
    buffer.add("water"); 
    buffer.add("ball"); 
    buffer.add("money"); 
    buffer.add("Amsterdam"); 
    buffer.add("3"); 
    buffer.add("door"); 

    for (String line : buffer) { 
     if (line.equals(route)) { 
      mergeArray.add(line); 
      int index = buffer.indexOf(line); 
      String prevElement = buffer.get(index - 1); 
      if (prevElement == direction) { 
       String addElem = buffer.get(index + 1); 
       mergeArray.add(addElem); 

      } else if (prevElement == start) { 
       mergeArray.add("New direction"); 

      } 

     } 

    } 
    for (String key : mergeArray) { 
     System.out.println(key); 
    } 

} 
+3

使用等於而不是==來檢查字符串是否相等 – giorashc

+0

我改變了它,但是我沒有得到相同的輸出也沒有這個標記'新方向'? – TheBook

+0

從java 7開始,==默認爲場景後面的.equals,所以你會得到相同的輸出。如果您使用的是Java 6或更低版本,那麼您必須明確地使用.equals。 –

回答

1

不要使用indexOf,因爲它總是會檢索第一個外觀的索引。

保持輔助指標變量,並在循環使用它:

int auxIndex = 0; 
for (String line : buffer) { 
     if (line.equals(route)) { 
      mergeArray.add(line);   
      String prevElement = buffer.get(auxIndex - 1); 
      if (prevElement.equals(direction)) { 
       String addElem = buffer.get(auxIndex + 1); 
       mergeArray.add(addElem); 

      } else if (prevElement.equals(start)) { 
       mergeArray.add("New direction"); 

      } 

     } 
     auxIndex++ 
} 

還添加安全檢查,因此指數不會低於/過流

0

嘗試使用CLASIC的,而不是一個使用可迭代

for (int i=0; i<buffer.size(); i++) { 
    String line = buffer.get(i); 
    if (line.equals(route)) { 
     mergeArray.add(line);   
     String prevElement = buffer.get(i - 1); 
     if (prevElement == direction) { 
      String addElem = buffer.get(i + 1); 
      mergeArray.add(addElem); 

     } else if (prevElement == start) { 
      mergeArray.add("New direction"); 

     } 

    } 
} 

此外,考慮檢查溢出/下溢問題。您可以參考index-1和index + 1,如果外觀位於第​​一個或最後一個位置,這會造成麻煩。

相關問題