java - 以降序对列表模型进行排序 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
返回正值,无论是否x
小于或大于y
。
例如,假设我们只有 2 个 id 排序,如["2", "1"]
- ifx=0, y=1
"2".compareTo("1")
将返回>0
,因此两个值交换导致["1", "2"]
.
稍后进行一些迭代,x=1, y=0
因此id[x]=="2", id[y]=="1"
,比较 ( "2".compareTo("1")
) 将再次返回>0
,并且值将再次交换。
解决方案:y
应该总是大于(或总是小于)x
(例如for (int y = x + 1; ...
)
使用调试器并逐步执行应该有助于了解正在发生的事情......
推荐阅读
- javascript - 将 obj 数组转换为 JavaScript 中的数组数组
- angular - Angular 2+ 等待订阅完成以更新/访问变量
- java - 当我们在 firebase 中引用一个不存在的孩子时会发生什么?
- javascript - 我如何保持由最大宽度,最大高度构造的 div 的形状?
- python - python 2.x 中的这个脚本在一次运行中工作并制作了多个绘图。现在,在 python 3.x 中,它只制作一个图
- mongodb - 检查范围内的子文档是否符合条件
- vb.net - 如何围绕图片框网格“移动”图片框图像?
- python - int(input()) 错误 - NameError: name '...' is not defined
- sql - 合并通过“UNION ALL”分区在一起的 2 个表
- javascript - 未处理的错误 TypeError: snapshot.val is not a function when using forEach Firebase Cloud Functions