Java compareTo()未定义运算符

时间:2017-03-21 09:51:01

标签: java eclipse

我试图编写比较两张成绩单标记的代码,但每次使用像>这样的运算符时或者<它说参数类型未定义。有人能告诉我我做错了吗?

修改(来自评论): marksgetMarks的类型为double[]

 * @param other
 * @return 1 if the average mark of calling object is more than average of parameter object
 * -1 if the average mark of calling object is less than average of parameter object
 * 0 if the average mark of calling object and the average of parameter object are the same
 */
public int compareTo(ReportCard other) {

    if(this.marks > other.getMarks()) {
        return 1;
        } else if (this.marks < other.getMarks()) {
            return -1;
        } else {
            return 0;
        }
    } //to be completed

2 个答案:

答案 0 :(得分:3)

您的代码可以简化为:

public int compareTo(ReportCard other) {
    return Double.compare(this.getMarks(), other.getMarks());
}

或者,如果您想创建Comparator<ReportCard>而不是实施Comparable<ReportCard>,那么您可以执行以下操作:

Comparator<ReportCard> comparator = Comparator.comparingDouble(ReportCard::getMarks);

答案 1 :(得分:0)

运营商<><=>=仅适用于原始数字类型(doubleint,{{ 1}}等。)。

类型char不是基本类型。它是一个数组类型(它是一个对象)。你必须设计自己的方法来比较一个数组并为它编写一个循环。

考虑一下:如果当前的成绩单有3个分数,另一个成绩单有5个分数,你会怎么做?假设前三个标记是相同的。应该考虑哪个报告卡更大?

如果它们具有相同数量的标记,那么你的循环应该类似于(伪代码):

double []

您需要扩展它以考虑数组长度不同的情况。

请注意,这对第一个标记具有最重要的意义。如果所有标记同等重要,您可能想要做其他事情,比如标记平均值或总和。

总结一下:您试图使用比较运算符比较非原始值。没有为对象和数组类型定义运算符,您必须编写自己的实现来正确执行此操作。