//二分法查找指定数组中的某元素
import java.util.*;
public class binarySearch {
int numberOfArray;
float[] scores = null;
//初始化数组
public void init() {
Scanner input = new Scanner(System.in);
System.out.println("请输入数组长度:");
numberOfArray = input.nextInt();
scores=new float[numberOfArray];
System.out.println("请输入数组元素:");
for (int i=0;i<scores.length;i++) {
scores[i]=input.nextFloat();
}
System.out.println("数组排序后:");
Arrays.sort(scores);
}
//二分查找
public int binarySearch(float[] array,int from,int to,float key) {
if(from<0||to<0||from>to) {
return -1;
}
int middle = (from>>>1)+(to>>>1);
float temp=array[middle];
if(temp>key) {
to=middle-1;
}else if(temp<key) {
from=middle+1;
}else {
return middle;
}
return binarySearch(array,from,to,key);
}
//数组打印
public void print() {
for(float x : scores) {
System.out.print(x+" ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
binarySearch bs=new binarySearch();
bs.init();
bs.print();
Scanner input1 = new Scanner(System.in);
System.out.println("\n请输入查找范围和目标:");
int num=bs.binarySearch(scores, input1.nextInt(), input1.nextInt(), input1.nextFloat());
if(num==-1) {
System.out.println("目标元素不存在");
}
else {System.out.println("目标的下标为:"+num);}
}
}
代码在第53行报错,原因是在静态方法中使用了非静态数据scores,要想调用scores数据,必须通过实例化对象来调用,所以第53行改为:
int num=bs.binarySearch(bs.scores, input1.nextInt(), input1.nextInt(), input1.nextFloat());
运行结果: