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

时间:2014-04-04 12:16:55

标签: java

我想在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 '>'"

4 个答案:

答案 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)

  1. 您无法使用>操作数直接比较两个对象。我变了 您的代码,以便Result类实现Comparable进行比较 具有maxMark()结果的对象。
  2. 不需要创建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个问题

  1. 您不明白静态类的工作方式与可执行的类
  2. 有何不同
  3. 您正在尝试2比较2个非原始对象
  4. 现在,您的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;
    
     }