2013-11-23 152 views
0

這是很難解釋,但基本的想法是,我們有2個ArrayLists。您將List 1與List 2進行比較,如果條目匹配,則打印Array List +1,如果不是,則只返回Array List 1中的元素。比較工作正常,但問題在於打印出結果。當我只想要一個或另一個時,我的原始設計會打印出翻譯和原始單詞。這是原來的設計:爪哇麻煩與循環

public void compareLists(){ 
    String nameSearch; 

    for(PirateDictionary w: words){ 

     nameSearch = w.toString(); 
     Iterator<Phrase> it = phrases.iterator(); 

     while(it.hasNext()) 
     { 
      Phrase c = it.next(); 
      if (c.getName().equals(nameSearch)) { 
       System.out.println(it.next().toString()); 

      } 

     } 

     System.out.println(w.toString()); 
    } 

} 

下面是一個不同的嘗試,我敢肯定,這是一個更接近,因爲你想要做一個或另一個,第一個設計總是既包括所以我認爲,一個循環必須在這裏使用,但我不完全知道如何實現它。

for(PirateDictionary w: words){ 

     nameSearch = w.toString(); 
     Iterator<Phrase> it = phrases.iterator(); 
     Phrase c = it.next(); 
     if(w.toString().equals(c.getName())){ 

      while(it.hasNext()) 
      { 

       if (c.getName().equals(nameSearch)) { 
        System.out.println(it.next().toString()); 

       } 

      } 
     } 
     else{ 
      System.out.println(w.toString()); 
     } 

    } 
+0

你想爲迭代器中的每個元素打印一個或另一個嗎? – Andrew

+0

如果列表1和列表2匹配,我希望它打印列表2 +1,因此可以說列表1中的女人與列表2中的女人匹配,那麼您將要打印女人+1,這是'女人'。目前,只有當我只想要翻譯時,我只能打印出女性和女性。 –

回答

0

我的建議:

for(PirateDictionary w: words){ 

    nameSearch = w.toString(); 
    Iterator<Phrase> it = phrases.iterator(); 
    boolean found = false; 

    while(it.hasNext() && !found) { 

     Phrase c = it.next(); 

     if (c.getName().equals(nameSearch)) { 
      System.out.println(c.getName()); 
      found = true; 
     } 
    } 

    if (!found) 
     System.out.println(w.toString()); 
} 

我們使用boolean要記住,如果我們找到了一個匹配的,如果我們沒有,我們只是打印出正規字。另外要小心,您不要使用it.next()兩次,因爲您會跳過一個元素!

+0

輝煌,一個簡單的國旗完成工作,非常感謝你 –