2014-07-26 61 views
0

我正在實施一個鏈接的鮮花列表。我已經成功地讓程序做我想做的事情。我可以顯示列表的內容,每個節點的對象的屬性,我可以在列表中做其他事情。但是,如果我只想顯示每個對象和計數的唯一出現,該怎麼辦?對象的Java鏈接列表。我如何保持每個獨特對象的數量?

因此,舉個例子,比如說,我將2個Rose對象和1個水仙花對象添加到列表中。如果我用我當前的方法顯示內容,它會在控制檯中的每一行上顯示每個對象。但我想開發一種新的查找方法,顯示如下:

There are 2 occurrences of Rose! 
There are 1 occurrences of Daffodil! 

用我目前的代碼,這將無法正常工作。我得到:

There is a Rose! 
There is a Rose! 
There is a Daffodil! 

這裏是實驗find2方法我在迄今爲止的工作:

public void find2(String searchName){ 
    Node theNode = firstNode; 
    int occurrences = 0; 

    if(!isEmpty()){ 
     while (theNode.getItem().getName() != searchName){ 
      if (theNode.getItem().getName().equals(searchName)){ 
       occurrences++; 
      } 
      else if (theNode.getNext() == null){ 
       System.out.println("Flower not found!"); 
       return; 
      } 

      theNode = theNode.getNext(); 

     } 

     System.out.println("Found " + occurrences + " occurrences of " + searchName + "."); 
    } 
} 

有什麼不對的邏輯是什麼?我試着給else添加第二個條件。它是:

else if (theNode.getNext() == null && occurrences == 0){ 
    System.out.println("Flower not found!"); 
    return null; 
} 

然而,這也沒有幫助。當我運行該程序時會發生什麼,根據我對該方法的修飾,我會輸入我想要搜索的名稱,並且它會失速 - 換句話說,控制檯讓我輸入更多的東西,但是它沒有做任何事情。或者,它會給我下面的錯誤:

Exception in thread "main" java.lang.NullPointerException 
    at LinkedList.find2(LinkedList.java:69) 
    at FinalProject.searchFlowers(FinalProject.java:81) 
    at FinalProject.<init>(FinalProject.java:37) 
    at FinalProject.main(FinalProject.java:10) 

如果你想看到所有的代碼,我可以提供它。我欣賞任何提示或建議!非常感謝您的寶貴時間。

+0

如果你比較'.equals',它解決問題的字符串? – immibis

+0

我早些時候嘗試過,但沒有奏效。有人發佈了一個完美的解決方案,但之後他將其刪除。 – HandleThatError

+0

可以在[TreeSet](http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html)中找到唯一有序的項目集合的行爲 - 我知道你正在設計你自己的類型,所以這可能只是很誇張,但我想指出它的存在。 –

回答

2

在您測試平等之前先對null進行測試!

while (theNode.getItem().getName() != searchName) { // <-- NO! 
    if (theNode.getItem().getName().equals(searchName)) { // <-- B 
    occurrences++; 
    } else if (theNode.getNext() == null){ // <-- A 
    System.out.println("Flower not found!"); 
    return; 
    } 
    theNode = theNode.getNext(); 
} 

我相信你想這樣的事情

while (theNode != null) { // <-- null test. 
    if (theNode.getItem().getName().equals(searchName)){ // <-- B 
    occurrences++; 
    } else { //theNode.getItem().getName() != searchName 
    break; 
    } 
    theNode = theNode.getNext(); 
} 
if (occurrences == 0) { // <-- A 
    System.out.println("Flower not found!"); 
    return; 
} 
0

嘗試這個

  while(theNode.getNext()!=null) 
      { 
      if(theNode.getNext().getName().equals(searchName)) 
      { 
       occurrences++; 
      } 
     } 
     if(occurences==0) 
      { 
      System.out.println("Flower not Found"); 
      } 
     else 
      { 
      System.out.println("Found items "+seachname+""+occurences); 
      } 
相關問題