我想在betterResult()方法中比较maxMarks方法计算的值,并返回并打印更高的maxmark。我这样做时出错。还要忽略我创建的其他方法(在类Result中)以供以后使用。
public class Result {
int[] marks;
public int maxMarks(int[] marks) {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public double averageMarks(int[] marks) {
double avg;
double sum = 0;
for (int i = 0; i < marks.length; i++) {
sum = sum + marks[i];
}
avg = sum / marks.length;
System.out.println(avg);
return avg;
}
public int total(int[] marks) {
int total = 0;
for (int i = 0; i < marks.length; i++) {
total = total + marks[i];
}
return total;
}
}
第二课:
public class TestResult {
public static void main(String args[]) {
TestResult result = new TestResult();
result.display();
}
public void display() {
TestResult result1 = new TestResult();
Result res1 = new Result();
res1.maxMarks(new int[] {45, 56, 88, 42, 76 });
Result res2 = new Result();
res2.maxMarks(new int[] { 60, 70, 78, 55, 40 });
result1.betterResult(res1, res2);
}
public Result betterResult(Result res1, Result res2) {
if (res1 > res2)
return res1;
else
return res2;
}
}
错误:
Error in betterResult "bad operand types for binary operator '>'"
答案 0 :(得分:2)
if (res1 > res2)
您正在尝试与Result类型的对象进行比较。你不能这样做。 res1&gt;是什么意思? res2?应该检查哪些值?
您可以在Result类中添加greaterThan
方法,例如:
public boolean greaterThan(Result res2) {
// do somtheing to compare this to res2
}
或者您可以实施Comparable
界面
答案 1 :(得分:0)
您在没有比较器的情况下比较两个对象:
public Result betterResult(Result res1, Result res2) {
if (res1 > res2)
return res1;
else
return res2;
}
您的方法不知道如何比较两个对象,它们不是整数或一些原始类型来直接比较。
您可以将方法更改为以下内容:
public Result betterResult(Result res1, Result res2) {
if (res1.value1 > res2.value1)
return res1;
else
return res2;
}
或者实现Comparable接口并在比较对象时使用它:
private class ResultsComparator implements Comparator<Result> {
public int compare(Result res1, Result res2) {
if (res1.value1 > res2.value1)
return res1;
else
return res2;
}
}
答案 2 :(得分:0)
>
操作数直接比较两个对象。我变了
您的代码,以便Result类实现Comparable进行比较
具有maxMark()结果的对象。不需要创建Result类的两个实例,因为未使用int[] marks
实例变量,因此我创建了一个参数化构造函数来初始化数组。
public class Result implements Comparable{
private int[] marks;
public Result(int[] marks){
this.marks = marks;
}
public int maxMarks() {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public double averageMarks() {
double avg;
double sum = 0;
for (int i = 0; i < marks.length; i++) {
sum = sum + marks[i];
}
avg = sum / marks.length;
System.out.println(avg);
return avg;
}
public int total() {
int total = 0;
for (int i = 0; i < marks.length; i++) {
total = total + marks[i];
}
return total;
}
public int compareTo(Object o){
Result secondResult = (Result)o;
return this.maxMark()-secondResult.maxMark();
}
}
public class TestResult{
public static void main(String args[]) {
TestResult result = new TestResult();
result.display();
}
public void display() {
TestResult result1 = new TestResult();
Result res1 = new Result(new int[] {45, 56, 88, 42, 76 });
int maxMark1 = res1.maxMarks();//you can remove this line
Result res2 = new Result(new int[] { 60, 70, 78, 55, 40 });
int maxMark2 = res2.maxMarks();//you can remove this line
result.betterResult(res1,res2);
}
public Result betterResult(Result res1, Result res2) {
if (res1.compareTo(res2) > 0)
return res1;
else
return res2;
}
}
答案 3 :(得分:0)
看起来你有2个问题
现在,您的Result Class提供了应该/可以作为静态工作的方法,但同时您实例化Result对象。
现在,如果你想比较2个结果实例,你应该改变你的类,你可以实际使用/保持那个标记[]变量
public Result(int[] marks){
this.marks = marks
}
//Notice, I've removed the int[] marks property, we'll use the local variable instead
public int maxMarks() {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
然后,这将起作用:
public void display() {
Result result1 = null;// this will point to the greatest Result, that betterResult will return
Result res1 = new Result(new int[] {45, 56, 88, 42, 76 });
Result res2 = new Result(new int[] { 60, 70, 78, 55, 40 });
result1 = betterResult(res1, res2);
}
public Result betterResult(Result res1, Result res2) {
res1.maxMarks() > res2.maxMarks() ? return res1 : return res2;
}