2012-09-21 21 views
1

我在這裏遇到了一個問題,我跟蹤到了這個方法。當然,如果有必要,我可以提供更多的代碼。我有一個文本文件,文件中的每一行都有一個不同的自行車。每行的格式爲color::year::price。例如,一輛自行車可能是red::2008::150難以按照不同的方式對java中的鏈表進行排序,具體取決於用戶輸入

我打算將此信息存儲在鏈接列表中,並且希望能夠按顏色,年份或價格對它們進行排序。我不需要以後再分類。我只需要從文本文件中按照正確的順序插入它們。用戶輸入1,2或3,然後創建一個新的鏈接列表,如LinkedList foo = new LinkedList(1);,其中1表示應添加節點,以便按顏色按字母順序排列。 23按其他順序排列變量。這是我的一般實施是如何工作的:

LinkedList color = new LinkedList(1); //Should sort by color 
LinkedList year = new LinkedList(2); //"" year 
LinkedList price = new LinkedList(3); //"" price 

color.add(new Bike("a::1::1")); 
year.add(new Bike("a::1::1")); 
price.add(new Bike("a::1::1")); 

color.add(new Bike("b::2::2")); 
year.add(new Bike("b::2::2")); 
price.add(new Bike("b::2::2")); 

color.add(new Bike("c::3::3")); 
year.add(new Bike("c::3::3")); 
price.add(new Bike("c::3::3")); 

以上所有鏈接列表三種應該存儲在其中的數據相同,並應按照不同的順序顯示,但是所有三個顯示的相同順序和最後一個元素獲得複製。他們都傾向於看起來像這樣:

a::1::1 
b::2::2 
c::3::3 
c::3::3 

這顯然是錯誤的。最後一行不應該重複,每個鏈表應該以不同的順序產生這些值。以下是我的add()代碼,問題似乎在這裏。對於記錄,LinkedList對象只包含一個節點,其值爲datanext值爲null

public void add(Object o){ 

    Node current = list; 
    String currentString = ""; 
    String oString = o.toString().split("::")[sortOrder - 1]; 

    while(current.getNext() != null){ 
     current = current.getNext(); 
     currentString = current.getData().toString().split("::")[sortOrder - 1]; 
     //I do the 'sortOrder - 1' bit because when the user enters 1 
     //we should sort by the 0th element, 2 means sort by the 1st element, etc 

     if(oString.compareTo(currentString) > 0){ 
      Node n = new Node(o); 
      n.setNext(current.getNext()); 
      current.setNext(n); 
      return; 
     } 
    } 

    current.setNext(new Node(o)); 
} 
+0

是否有必要重新創建類似filds的新Bike()的對象?例如'新的自行車(「a :: 1 :: 1」)爲三個LinkedList? –

回答

1

在循環中仔細檢查你的條件。請記住,x.compareTo(y) ?= 0x ?= y完全相同,因此oString.compareTo(currentString) > 0的確表示oString > currentString

比方說你有物品10 -> 20 -> 30 -> null。您插入25.您的compareTo行首先會說「如果(25> 10)在此節點之後創建節點n」。您的列表將是「10 - > 25 - > 20 - > 30 - > null」。相反,只有在newItem > nextnext == null之後才能在current之後插入項目。

希望這是一個學校練習手動創建一個鏈表;將您的列表存儲在ArrayList中並使用Collections.sort(list, comparator)根據用戶輸入對列表進行排序更有意義。

+0

謝謝!事後回想起來這很明顯,哈哈。 –

相關問題