2015-03-25 44 views
1

編輯:在你的幫助下,我設法解決了我的問題。我編輯了我的代碼,現在演示如何設置它以使其工作。試圖比較兩個迭代器的內容,怎麼樣?

目前我無法編碼比較兩個迭代器內容的部分。作爲我的任務的一部分,我需要使用鏈表來存儲輸入字符串的單個字符。我已經到了我有兩個包含輸入單向和反向輸入的迭代器的地步。

 String palindrom = input.getText(); 
     String [] chara = palindrom.split (""); //this is successfully splitting them, tested. 


     int length = palindrom.length(); // length == 8 
     System.out.println (length); //can use this for how many checks to do? 
     LinkedList ll = new LinkedList(Arrays.asList(chara)); 


     Iterator iterator = ll.iterator(); 
     Iterator desIterator = ll.descendingIterator(); 

     /*while(iterator.hasNext()){ 
      System.out.println(iterator.next()); 
     } 

     while(desIterator.hasNext()){ 
      System.out.println(desIterator.next()); 
     }*/ 
     boolean same = true; 
     while(iterator.hasNext()){ 
      if(!iterator.next().equals(desIterator.next())){ 
      same = false; 
      break; 
      } 
     } 

而且使用的System.out我可以看到,他們正在正確保存,但我不知道如何檢查迭代器存儲相同內容。什麼是比較兩個迭代器或將它們轉換成我可以比較的最簡單方法之一?澄清我想驗證它們包含相同的順序相同的元素。

+0

爲了澄清,您是否想要確認兩個迭代器只有相同的元素,或者兩個迭代器具有相同的元素,並且順序相同。 – kag0 2015-03-25 00:39:04

+0

這不是真的這裏的問題。 OP迭代通過兩個迭代器輸出值,之後兩個迭代器都是「空的」,因此將被識別爲「相等」。您應該創建新的迭代器進行比較。 – 2015-03-25 00:48:28

+0

好的,我用那條線代替了那條線,但它仍然返回,我所有的錯誤輸入都是真的。還有什麼你可以認爲我可能需要修復的?該打印現在也輸出文本的隨機亂碼。 另外我希望他們有相同的順序相同的元素。抱歉含糊不清。 – user286152 2015-03-25 00:51:52

回答

3
boolean same = true; 
while(iterator.hasNext()){ 
    if(!iterator.next().equals(desIterator.next())){ 
    same = false; 
    break; 
    } 
} 

System.out.println(same); 
+0

這似乎總是返回true。當我在輸入中輸入「fish」時,我可以看到迭代器具有f i s h並且desIterator具有h s i f但它仍然表示它們是真的。我相信這是因爲你的解決方案只是檢查內容而不是訂單,我應該更具體。如果我需要考慮訂單,我該如何做到這一點?所以r a c e c a r r和r a c e c a r r顯示正確,但不是f i s h和h s i f? – user286152 2015-03-25 00:35:09

+1

我發佈的解決方案會檢查內容和訂單。您可能沒有正確設置您的列表。但是您沒有發佈該代碼,所以我再也無法提供幫助。 – satnam 2015-03-25 00:37:03

+0

請注意,這假定這兩個迭代器具有相同數量的元素(在問題中給出)。不過,你應該可以用'equals'來比較。 – 2015-03-25 00:38:15

2

您需要同時迭代兩個迭代器,即使用一個循環。下面是一般的比較功能(0時相等,< 0當A < B,> 0時A> B):

static <T extends Comparable<S>, S> int compare(Iterator<T> a, Iterator<S> b) { 
    while (a.hasNext() && b.hasNext()) { 
     int comparison = a.next().compareTo(b.next()); 
     if (comparison != 0) { 
      return comparison; 
     } 
    } 
    if (a.hasNext()) 
     return 1; 
    if (b.hasNext()) 
     return -1; 
    return 0; 
} 

要只是檢查它們是否相等,這可以簡化爲:

static <T, S> boolean equals(Iterator<T> a, Iterator<S> b) { 
    while (a.hasNext() && b.hasNext()) { 
     if (!a.next().equals(b.next())) { 
      return false; 
     } 
    } 
    if (a.hasNext() || b.hasNext()) { 
     // one of the iterators has more elements than the other 
     return false; 
    } 
    return true; 
} 

番石榴實施此爲Iterators.elementsEqual