2014-12-04 60 views
-1

這裏是我的代碼,我想,以填補該ArrayList TOSSA,但似乎陣列被刪除,並創建一個新的,我只有價值的最後,如果:填寫一個ArrayList正確

此代碼被多次調用

if(myAgent.getLocalName().equals("A") && ((msg.getConversationId() == "ThimbleB") || (msg.getConversationId() == "ThimbleC"))){ 
    ArrayList<Integer> tossA = new ArrayList<Integer>(); 
    if(msg.getConversationId() == "ThimbleB") { 
     int thB = Integer.parseInt(msg.getContent()); 
     tossA.add(thB); 
    } else if (msg.getConversationId() == "ThimbleC") { 
     int thC = Integer.parseInt(msg.getContent()); 
     tossA.add(thC); 
    } 
} 
+0

可能的重複[如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Makoto 2014-12-04 22:36:02

+0

當然,你只會得到一個兩個值,你寫if/else。談話要麼是ThimbleB還是ThimbleC,它們又怎麼可能呢?此外:如果兩者都爲true,則可以將兩個SAME值(getContent())寫入數組中的兩個位置。總的來說,代碼似乎破了。也許你更好地描述你想要做什麼,並給予更多的上下文。 – eckes 2014-12-04 22:44:10

+2

我認爲問題在於當第二次執行if時,它會再次instanciate arraylist以使以前的值消失 – Dwng 2014-12-04 22:47:03

回答

0

您需要存儲所述碼塊調用哪個(外)如果多次外的變量。你也不應該用==來表示字符串。

ArrayList<Integer> tossA = new ArrayList<Integer>(); 
while(...) { // your code is called multiple times 

    // get the next msg here 

    if (myAgent.getLocalName().equals("A")) 
    { 
     if (msg.getConversationId().equals("ThimbleA")) { 
      tossA.set(0, Integer.parseInt(msg.getContent()); 
     } else if (msg.getConversationId().equals("ThimbleB")) { 
      tossA.set(1, Integer.parseInt(msg.getContent()); 
     } 
    } 
} 

我的代碼版本將確保ThimbleA內容始終是數組先入ThimbleB先接收時也是如此。

+0

還有什麼?我看到一個'else if',但沒有'else'。 – Makoto 2014-12-04 22:38:41

+0

但即使刪除'else'並有3個'if'語句,如果第三個if語句不會被執行,因爲第一個'if' – chancea 2014-12-04 22:40:54

+0

看外部if,有3'if's – chancea 2014-12-04 22:41:58

0

您似乎每次都會重新初始化tossA,我懷疑這是問題。您將不得不在使用範圍之外進行調整。

儘管給定的一段代碼不足以讓我確定該點的具體位置,但我猜測代碼的採樣部分位於各種迭代機制內。如果是這樣,它可能會移動到它的上面。

此外,你會想要使用String.equals()方法來比較conversationId s。