我试图编写比较两张成绩单标记的代码,但每次使用像>这样的运算符时或者<它说参数类型未定义。有人能告诉我我做错了吗?
修改(来自评论): marks
和getMarks
的类型为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
答案 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)
运营商<
,>
,<=
和>=
仅适用于原始数字类型(double
,int
,{{ 1}}等。)。
类型char
不是基本类型。它是一个数组类型(它是一个对象)。你必须设计自己的方法来比较一个数组并为它编写一个循环。
考虑一下:如果当前的成绩单有3个分数,另一个成绩单有5个分数,你会怎么做?假设前三个标记是相同的。应该考虑哪个报告卡更大?
如果它们具有相同数量的标记,那么你的循环应该类似于(伪代码):
double []
您需要扩展它以考虑数组长度不同的情况。
请注意,这对第一个标记具有最重要的意义。如果所有标记同等重要,您可能想要做其他事情,比如标记平均值或总和。
总结一下:您试图使用比较运算符比较非原始值。没有为对象和数组类型定义运算符,您必须编写自己的实现来正确执行此操作。