![](/img/trans.png)
[英]Java - binarySearch(). How do I set up a binarySearch for a Spell Check
[英]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.