关于一个二分查找数据结构没学好运行没报错好像进入死循环了最后
import java.util.Scanner;public class BiranySearch{
    public static void main(String args[]){
     Scanner s = new Scanner(System.in);
     int arr[] = setArray();
System.out.println("========生成的一组随机数是=========");
print(arr);
System.out.println("========排列好的这组数是===========");
sort(arr);
print(arr);
System.out.println("请输入要查找的数据    若输出为-1  则查找的数不存在");
int target = s.nextInt();
System.out.println(Search(arr,0,9,target));
    }
public static void print(int[] Array){
for(int i=0;i<=9;i++){
System.out.print(Array[i]+"\t");
}
}
public static int[] setArray(){
int a[] = new int[10];;
for(int i = 0;i <= 9;i++){
a[i] = (int)(Math.random() *100) ;
}
return a;
}
public static int[] sort(int[]  Array){
java.util.Arrays.sort(Array);
return Array;
}
public static int Search(int[] Array,int left,int right,int target){
while(left<=right){
if(target == Array[(left+right)/2])  return (left+right)/2;
if(target < Array[(left+right)/2])  Search(Array,left,(left+right)/2-1,target);
if(target > Array[(left+right)/2])  Search(Array,(left+right)/2+1,right,target);
    }
return -1;
}
}

解决方案 »

  1.   


            public static int Search(int[] Array, int left, int right, int target)
            {
                while (left <= right)
                {
                    if (target == Array[(left + right) / 2]) return (left + right) / 2;
                    if (target < Array[(left + right) / 2]) return Search(Array, left, (left + right) / 2 - 1, target);
                    if (target > Array[(left + right) / 2]) return Search(Array, (left + right) / 2 + 1, right, target);
                }
                return -1;
            }
      

  2.   

    楼主的Search方法中有2路分支一直不返回