按降序对列表模型进行排序 Java
Sorting a List Model in descending order Java
我正在尝试通过拆分一个字符串来对列表模型进行排序,该字符串比较我分配给任何给定索引的 id 并将其与另一个索引进行比较,它在我第一次按下按钮时起作用但是,如果我按下再次按下按钮,它会乱序移动两个索引。
如果您需要我的任何帮助,我们将不胜感激 - 请询问
我正在拆分的字符串示例:
DRAMA,Harry Potter,2,5698750,J.K Rowling,500,08/12/2004,Lyle,0,0
给我带来麻烦的代码
public void sortByID()
{
DefaultListModel tmp = new DefaultListModel();
for(int x = 0; x < listModel.size(); x++)
{
String[] a = listModel.get(x).toString().split(",");
for(int y = 0; y < listModel.size(); y++)
{
String[] b = listModel.get(y).toString().split(",");
if(a[2].compareTo(b[2]) > 0 && a[1].equals(b[1]) != true)
{
tmp.add(0, listModel.get(y));
listModel.set(y, listModel.get(x));
listModel.set(x, tmp.get(0));
}
}
}
}
该解决方案的一个问题:
测试 compareTo
return 是否为正值,无论 x
是否小于或大于 y
。
例如,假设我们只有 2 个 ID,如 ["2", "1"]
- 如果 x=0, y=1
"2".compareTo("1")
将 return >0
所以两个值被交换导致 ["1", "2"]
.
一些迭代之后,x=1, y=0
所以 id[x]=="2", id[y]=="1"
,比较 ("2".compareTo("1")
) 将再次 return >0
并且值将再次交换。
解决方案:y
应始终大于(或始终小于)x
(例如 for (int y = x + 1; ...
)
使用调试器并逐步执行应该有助于了解正在发生的事情...
我正在尝试通过拆分一个字符串来对列表模型进行排序,该字符串比较我分配给任何给定索引的 id 并将其与另一个索引进行比较,它在我第一次按下按钮时起作用但是,如果我按下再次按下按钮,它会乱序移动两个索引。
如果您需要我的任何帮助,我们将不胜感激 - 请询问
我正在拆分的字符串示例:
DRAMA,Harry Potter,2,5698750,J.K Rowling,500,08/12/2004,Lyle,0,0
给我带来麻烦的代码
public void sortByID()
{
DefaultListModel tmp = new DefaultListModel();
for(int x = 0; x < listModel.size(); x++)
{
String[] a = listModel.get(x).toString().split(",");
for(int y = 0; y < listModel.size(); y++)
{
String[] b = listModel.get(y).toString().split(",");
if(a[2].compareTo(b[2]) > 0 && a[1].equals(b[1]) != true)
{
tmp.add(0, listModel.get(y));
listModel.set(y, listModel.get(x));
listModel.set(x, tmp.get(0));
}
}
}
}
该解决方案的一个问题:
测试 compareTo
return 是否为正值,无论 x
是否小于或大于 y
。
例如,假设我们只有 2 个 ID,如 ["2", "1"]
- 如果 x=0, y=1
"2".compareTo("1")
将 return >0
所以两个值被交换导致 ["1", "2"]
.
一些迭代之后,x=1, y=0
所以 id[x]=="2", id[y]=="1"
,比较 ("2".compareTo("1")
) 将再次 return >0
并且值将再次交换。
解决方案:y
应始终大于(或始终小于)x
(例如 for (int y = x + 1; ...
)
使用调试器并逐步执行应该有助于了解正在发生的事情...