【问题标题】:Sorting a List Model in descending order Java以降序对列表模型进行排序 Java
【发布时间】:2021-05-14 07:12:05
【问题描述】:

我正在尝试通过拆分一个字符串来对列表模型进行排序,该字符串比较我分配给任何给定索引的 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));
                }
            }
        }
    }

【问题讨论】:

    标签: java sorting defaultlistmodel


    【解决方案1】:

    该解决方案存在一个问题:
    测试compareTo 是否返回正值,无论x 小于还是大于y
    例如,假设我们只有 2 个像 ["2", "1"] 这样排序的 id - 如果 x=0, y=1 "2".compareTo("1") 将返回 &gt;0,因此两个值交换后得到 ["1", "2"]
    稍后进行一些迭代,x=1, y=0id[x]=="2", id[y]=="1",比较 ("2".compareTo("1")) 将再次返回 &gt;0,并且值将再次交换。

    解决方案:y 应始终大于(或始终小于)x(例如 for (int y = x + 1; ...

    使用调试器并逐步执行应该有助于了解正在发生的事情...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 2016-10-18
      • 2022-01-06
      • 2021-02-03
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多