当前位置: 首页 > 面试题库 >

对arrayList中对象的双精度值排序

裴鸿熙
2023-03-14
问题内容

我正在尝试通过其score属性的值(是double值)对自定义类染色体进行排序。这些染色体存储在ArrayList中。我知道我必须使用比较器,但是在过去的一个小时里我已经在线阅读了很多不同的观点,这使我感到非常困惑。

附上我的代码,如果有人可以指出正确的方向,我将不胜感激。

public class Chromosome
{

    public Gene[] genes;
    public double score;

    public Chromosome(int l)
    {
        genes = new Gene[l]; 
    }

    public int getLength()
    {
        return genes.length;
    }

    public void printChromo()
    {
        for(int i=0;i<this.genes.length;i++)
        {
            System.out.println(""+this.genes[i].teacher+","+
                this.genes[i].lecture+","+
                this.genes[i].room+","+
                this.genes[i].time+"");
        }   
    }

    public void setScore(double score)
    {
        this.score=score;
    }

    public double getScore()
    {
        return this.score;
    }
}

不知道这有什么区别,但是分数只能是0.0到1.0之间(包括0.0到1.0)的两倍


问题答案:

要使用Comparator

Collections.sort(myList, new Comparator<Chromosome>() {
    @Override
    public int compare(Chromosome c1, Chromosome c2) {
        return Double.compare(c1.getScore(), c2.getScore());
    }
});

如果您打算List以这种方式对大量s
进行排序,我建议您Chromosome实现Comparable接口(在这种情况下,您可以简单地调用Collections.sort(myList),而无需指定显式Comparator)。



 类似资料:
  • 我是一名Java初学者,我正在基于Stackowerflow上的一个示例构建一个简单的购物清单程序: 使用用户输入将对象添加到ArrayList的方法 用户输入(名称价格)将商品添加到购物清单中。 现在我希望输出显示通过使用即可比按价格(上升)排序的对象,但不知道如何将其添加到代码中。我真的是个初学者,所以我希望我写的东西有意义。 非常感谢。 代码如下:

  • 是否可以使用 compareTo 对整数值和双精度值进行排序?我的系统给了我一个错误,我无法在基元类型int上调用 compareTo(int)。 法典:

  • 问题内容: 我正在编写一个简单的Java程序。我需要从输入中获取一个字符串并将其分为两部分:1-double 2-string。然后,我需要对double进行简单的计算,并将结果发送到具有特定精度的输出(4)。它工作正常,但是当输入为0时出现问题,则不能正常工作。 例如,对于这些输入,输出将是: 1公斤 输出:2.2046 3.1公斤 输出:6.8343 但是当输入为0时,输出应为0.0000,但

  • 问题内容: 我发现的每个示例都是按字母顺序进行的,而我需要按日期对元素进行排序。 我的ArrayList包含其数据成员之一是DateTime对象的对象。在DateTime上,我可以调用以下函数: 因此,我可以做一些比较: 我应该在if块内做什么? 问题答案: 你可以使对象具有可比性: 然后通过调用以下命令对其进行排序: 但是,有时你不想更改模型,例如想要对几个不同的属性进行排序时。在这种情况下,你

  • 问题内容: 是否有比浮点精度更好的数据类型? 问题答案: 小数数据类型 与基于硬件的二进制浮点数不同,十进制模块具有用户可更改的精度(默认为28位),可以与给定问题所需的精度一样大。 如果您对性能问题感到困扰,请查看GMPY

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(