我在这里遇到了一个问题,我已经追溯到这种方法。当然,如有必要,我可以提供更多代码。我有一个文本文件,文件中的每一行都有不同的自行车。每一行的格式为color::year::price
. 例如,一辆自行车可能是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"));
上述所有三个链表都应该存储相同的数据,并且应该以不同的顺序显示,但是所有三个链表都显示相同的顺序并且最后一个元素会重复。他们都倾向于看起来像这样:
a::1::1
b::2::2
c::3::3
c::3::3
这显然是错误的。最后一行不应该重复,每个链表应该以不同的顺序产生这些值。下面是我的add()
代码,问题似乎出在哪里。为了记录,一个 LinkedList 对象只包含一个节点,null
它的值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));
}