繁体   English   中英

为什么我的 findMax 方法给我的是数组的第一个元素而不是最大元素的结果?

[英]Why does my findMax method gives me the result of the first element of an array instead of the maximum element?

我正在尝试使用静态 findMax 方法找到具有最大周长的矩形。 不知何故,它只给了我在数组中生成的矩形,而不是具有最大周长的数组。 我不知道出了什么问题,因为我覆盖的 compareTo 方法似乎工作正常。

这是矩形类的代码:

public class Rectangle implements Comparable<Rectangle> {
    private double length;
    private double width;
        private double perimeter;


    public Rectangle(double l, double w){
        this.length = l;
        this.width = w;
    } 

    public  double getLength() {
        return length;
    }

    public  double getWidth(){
        return width;
    }

        public void setLength(double l){
            length= l;
        }
        public void setWidth(double w){
            width = w;
        }

    public double getPerimeter(){
               perimeter = 2*(length+width);

               return perimeter;
    }




        @Override
    public int compareTo(Rectangle other){
               return Double.compare(this.perimeter, other.perimeter);
        }

        @Override
        public String toString(){
            return "Rectangle: "+ width +" by "+ length ;
        }




}

这是具有 findMax 的主要内容:它有点乱,因为我正在测试

public class Problem1{

    public static <Anytype extends Comparable<Anytype>> Anytype findMax(Anytype[] arr){
                int maxIndex = 0;
        for (int i = 1; i < arr.length; i++)
                if ( arr[i].compareTo(arr[maxIndex]) > 0 )
                            maxIndex = i;
            return arr[maxIndex];
        }


              public static void main(String[] args){

        Rectangle[] arr = new Rectangle[5];

        for(int i = 0; i < 5; i++)
        {
         Rectangle r = new Rectangle(10, 20);
         r.setWidth((Math.random()*10)+10); 
         r.setLength((Math.random()*10)+10);

         arr[i] = r;
        }

               // Rectangle max = findMax(<Rectangle>[] arr);

                Rectangle max = findMax(arr);
                double maxP =max.getPerimeter();
                System.out.println( "The rectangle that has the max perimeter is "+findMax(arr)+" maxP is "+maxP);
                for(Rectangle rec: arr){
                    System.out.println(rec.getPerimeter());
                    System.out.println(rec);


                }

    }


}

您没有调用 getPerimeter() 来设置对象的周长,因此周长将具有默认值 0,我建议您编辑 compareTo 以在其主体中调用 getPerimeter 方法,如下所示:

public int compareTo(Rectangle other){
    return Double.compare(this.getPerimeter(), other.getPerimeter());
} 
@Override
public int compareTo(Rectangle other){
    System.out.println(this.perimeter + " :: " + other.perimeter);//all 0.0 :: 0.0
   return Double.compare(this.perimeter, other.perimeter);
}

改变回报:

return Double.compare(this.getPerimeter(), other.getPerimeter());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM