2011-10-14 46 views
2

我有一個linkedList使用節點。我已經按字母順序打印了,但現在我試圖打印出名字以用戶要求的某個字母開頭的人。例如:打印所有名字以「A」開頭的人。我相信這不是最好的方式來做到這一點,但我只是嘗試了不同的東西,而且我對鏈接列表還很陌生。任何提示或建議或提示,非常感謝。從鏈接列表中選擇某些字符串

繼承人什麼,我想我有可能是可用:

 public void findSameStartingLetter(BigNode front, String letter) { 
     BigNode curr; 
     curr = front; 
     String name; 
     name = curr.dataitems; 
     String d; 
    // char c; 
      while (curr.next != null){ 

       d = name.substring(0, 1); 
      if (d.equals(letter)) { 
       System.out.println(d); 
       curr = curr.next; 

     // for(int i=0; i < 1; i++) { 
       // c = letter.charAt(i); 
     // } 
       } 

      } 
    } 

回答

2

看起來您需要讀取循環內節點上的人員名稱,而不是讀取名字,然後再次分配該變量。

您還應該檢查當前節點是否爲空,而不是下一個節點。如果你檢查下一個,你會錯過列表中的姓氏。

此外,請確保指針在列表中的移動是在if之外完成的,因爲我們要檢查下一個節點,而不管名稱是什麼。

除了邏輯,它看起來像你有點不舒服的Java。爲了清理你的例子,你可以使用java的功能來在一行上延遲和賦值。

另外,Java的字符串並不是做一個子字符串和比較子字符串,而是有一個startWith方法,它也應該這樣做。不錯的工作!

public void findSameStartingLetter(BigNode front, String letter) 
    { 
     BigNode curr = front; 
     while(curr != null) 
     { 
      String name = curr.dataitems; 
      if(name.startsWith(letter)) 
      { 
       System.out.println(name); 
      } 
      curr = curr.next; 
     } 
    } 
+0

啊,錯過了if中的節點運動。 @Oscar是正確的。 – Noah

+0

我一定在做錯事情,因爲我得到了anny打印了大約70次lol。 – TMan

+0

我掃描得太快 - 糾正了我的例子。這就是我們沒有運行代碼示例的原因。 – Noah

0

看起來好像沒什麼問題,我會改變的僅僅是使用equalsIgnoreCase()而不只是equals()。哦,並且將curr = curr.next;行保留在if以外