Java 如何递归地实现矩形的二进制搜索?
我正在为矩形编写一个递归的二进制搜索方法。 我的班很好 这是:Java 如何递归地实现矩形的二进制搜索?,java,recursion,Java,Recursion,我正在为矩形编写一个递归的二进制搜索方法。 我的班很好 这是: public class Rectangle implements Comparable<Rectangle> { private int length; private int width; private int perimeter; public Rectangle(int l, int w){ this.length = l; t
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 ;
}
}
公共类{
私有整数长度;
私有整数宽度;
私人内线;
公共矩形(整数l,整数w){
这个长度=l;
这个宽度=w;
}
公共整数getLength(){
返回长度;
}
公共int getWidth(){
返回宽度;
}
公共无效设置长度(整数l){
长度=l;
}
公共无效设置宽度(整数w){
宽度=w;
}
公共int getpermiture(){
周长=2*(长度+宽度);
返回周长;
}
@凌驾
公共整数比较(矩形其他){
返回Double.compare(this.getpermiture(),other.getpermiture());
}
@凌驾
公共字符串toString(){
返回矩形:“+宽度+”乘以“+长度;
}
}
但问题在于我的binarySearch方法
在main方法中,我无法打印出实际的矩形。我不知道是方法本身错了,还是我在印刷品上写的方式错了
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]));
}
}
导入java.util.array;
公共类问题2{
公共静电
int二进制搜索(AnyType[]a,AnyType x){
返回二进制搜索(a,x,0,a.length-1);
}
公共静态int二进制搜索
(任意类型[]a,任意类型x,整数开始,整数停止){
如果(启动<停止)
{
int mid=(停止+启动)/2;
如果(x.compareTo(a[mid])=-1)
返回二进制搜索(a、x、start、mid);
else如果(x.compareTo(a[mid])==1)
返回二进制搜索(a,x,mid+1,stop);
其他的
中途返回;
}
返回-1;
}
公共静态void main(字符串[]args){
矩形[]arr={新矩形(2,6),新矩形(4,7),新矩形(3,9),
新矩形(1,2),新矩形(2,4),新矩形(7,7)};
用于(矩形rec:arr){
System.out.println(“列表为“+rec”);
}
System.out.println(二进制搜索(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");
是的,我意识到了!那么打印声明应该是这样的吗?System.out.println(binarySearch(arr,矩形(4,7));我对anytypex部分感到困惑