ここで、このメソッドにたどり着いた問題があります。もちろん、必要に応じてさらにコードを提供することもできます。テキスト ファイルがあり、ファイルの各行に異なる自転車が含まれています。各行の形式はcolor::year::price
. たとえば、1 台の自転車はred::2008::150
.
この情報をリンクリストに保存する予定で、色、年、または価格で注文できるようにしたいと考えています。後でもう一度並べ替える必要はありません。テキストファイルから正しい順序で挿入するだけです。ユーザーが 1、2、または 3 を入力すると、 のような新しいリンク リストが作成LinkedList foo = new LinkedList(1);
さ1
れます。これは、色のアルファベット順にノードを追加する必要があることを意味します。 2
そして3
、それぞれの順序で変数に並べ替えます。私の一般的な実装の仕組みは次のとおりです。
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"));
上記のリンクされたリストの 3 つすべてに同じデータが格納され、異なる順序で表示される必要がありますが、3 つすべてが同じ順序で表示され、最後の要素が複製されます。それらはすべて次のようになります。
a::1::1
b::2::2
c::3::3
c::3::3
これは明らかに間違っています。最後の行は重複してはならず、各連結リストはこれらの値を異なる順序で生成する必要があります。以下はadd()
、問題があると思われる私のコードです。レコードの場合、LinkedList オブジェクトには、と値null
の両方の値を持つ 1 つのノードが含まれているだけです。data
next
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));
}