簡體   English   中英

我應該如何為矩形遞歸實現二進制搜索?

[英]How should I implement a binarySearch recursively for rectangles?

我正在為矩形遞歸編寫一個 binarySearch 方法。 我的矩形類工作正常這是它:

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


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

    public  int getLength() {
        return length;
    }

    public  int getWidth(){
        return width;
    }

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

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

               return perimeter;
    }




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

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

但問題是我在 main 方法中的 binarySearch 方法無法打印出實際的矩形。 我不知道是方法本身有問題還是我在印刷品中寫的方式有問題?

import java.util.Arrays;

public class Problem2{

    public static <AnyType extends Comparable<AnyType>>       
     int binarySearch(AnyType[] a, AnyType x){
        return binarySearch(a, x, 0, a.length-1);
     }

    public static <AnyType extends Comparable<AnyType>> int binarySearch
      (AnyType[] a, AnyType x, int start, int stop){
        if(start < stop)
            {
                int mid = (stop + start) / 2;
                if(x.compareTo(a[mid]) == -1)
                    return binarySearch(a, x, start, mid);
                else if(x.compareTo(a[mid]) == 1)
                    return binarySearch(a, x, mid+1, stop);
                else
                    return mid;
            }
        return -1;
    }

      public static void main(String []args){

            Rectangle[] arr = { new Rectangle(2,6), new Rectangle(4,7), new Rectangle(3,9),
                                new Rectangle(1,2), new Rectangle(2,4), new Rectangle(7,7)}; 


            for(Rectangle rec: arr){
            System.out.println("the list is " + rec);
            }

          System.out.println(binarySearch(arr,arr[5]));

      }
}

所以基本上如果你運行這個上面的部分工作正常。 最后的打印輸出沒有給我矩形。 它打印出數字。 就像如果它是 arr[1] 那么它打印 1,但如果它是 5 那么它給出 -1。

您的binarySearch方法返回找到矩形的數組中的索引,而不是矩形本身。

你想要這樣的東西:

int index = binarySearch(arr,arr[5]);
if (index != -1)
    System.out.println(arr[index]);
else
    System.out.println("Rectangle not found");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM