Java 比较两个对象中的值时出错

Java 比较两个对象中的值时出错,java,Java,我想比较betterResult()方法中maxMarks方法计算的值,然后返回并打印较高的maxMarks。执行此操作时出现错误。也可以忽略我创建的其他一些方法(类内结果),因为它们是供以后使用的 public class Result { int[] marks; public int maxMarks(int[] marks) { int max = marks[0]; for (int i = 0; i < marks.length -

我想比较betterResult()方法中maxMarks方法计算的值,然后返回并打印较高的maxMarks。执行此操作时出现错误。也可以忽略我创建的其他一些方法(类内结果),因为它们是供以后使用的

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;

    }


}
错误:

Error in betterResult "bad operand types for binary operator '>'"
您正在尝试与结果类型的对象进行比较。你不能那样做。res1>res2的含义是什么?应该检查哪些值

您可以在结果类中添加大于的
方法,例如:

public boolean greaterThan(Result res2) {
   // do somtheing to compare this to res2
}

或者,您可以实现
Comparable
界面

在没有比较器的情况下比较两个对象:

 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;

        }
或者实现可比较的界面,并在比较对象时使用它:

private class ResultsComparator implements Comparator<Result> {
        public int compare(Result res1, Result res2) {
            if (res1.value1 > res2.value1)
                    return res1;
                else
                    return res2;
        }
    }
私有类ResultComparator实现Comparator{
公共整数比较(结果res1,结果res2){
如果(res1.value1>res2.value1)
返回res1;
其他的
返回res2;
}
}
  • 不能使用操作数直接比较两个对象。我变了 您的代码,以便结果类实现Comparable to compare 对象及其maxMark()结果
  • 不需要创建结果类的两个实例,因为没有使用
    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;
           }   
     }
    
    公共类结果实现可比较{
    私人int[]标志;
    公开成绩(整数[]分){
    这个。标记=标记;
    }
    公共整数maxMarks(){
    int max=标记[0];
    对于(int i=0;i最大值){
    max=分数[i];
    }
    }
    系统输出打印项次(最大值);
    返回最大值;
    }
    公开双平均马克(){
    双平均值;
    双和=0;
    for(int i=0;i0)
    返回res1;
    其他的
    返回res2;
    }   
    }
    

  • 看起来你有两个问题

  • 您不明白静态类与实例类的工作方式有什么不同
  • 您正在尝试比较2个非基本体对象
  • 现在,您的结果类提供了应该/可以作为静态的方法,但同时,您正在实例化结果对象

    现在,如果您想比较两个结果实例,您应该更改您的类,以便实际使用/保留marks[]变量

    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 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;
           }   
     }
    
    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;
    
     }