黑马程序员技术交流社区

标题: 那错了。。。。。。。。。。 [打印本页]

作者: 张红伟    时间: 2013-10-3 01:00
标题: 那错了。。。。。。。。。。

public class arrDemo{

public static int halfselect(int[] arr,int key){
         int min,max,mid;
         min=0;
         max=arr.length-1;
         mid=(min+max)/2;
         
                 while(key!=arr[mid]){
                         if(key<arr[mid])
                                 min=min+1;
                         else if(key>arr[mid])
                                 max=max-1;
                         if(arr[min]>arr[max])
                                 return -1;
                 }
                 return mid;
         }
   public static void main(String[] args){
           int[] x={1,2,3,4,5,35};
           int y=5;
           halfselect(x,y);
}

}


作者: 酱爆    时间: 2013-10-3 01:47


  1. public class arrDemo{

  2. public static int halfselect(int[] arr,int key)
  3. {
  4.          int min,max,mid;
  5.          min=0;
  6.          max=arr.length-1;
  7.          mid=(min+max)/2;
  8.          
  9.                  while(key!=arr[mid])
  10.                  {
  11.                          System.out.println("AAAAAAAAAAAAA" + max + mid + min);
  12.                          if(key<arr[mid])  // 这个条件没有成立 , 所以min永远都是0
  13.                                  min=min+1;
  14.                          else if(key>arr[mid])
  15.                                  max=max-1;   // 循环5次后max就变成了-1,
  16.                          if(arr[min]>arr[max])  //因为min为0,所以这个条件也不可能成立,max = -1  arr[-1] 抛异常了 ,
  17.                                                         return -1;
  18.                  }
  19.                              
  20.                  return mid;
  21.          }
  22.    public static void main(String[] args)
  23.    {
  24.            int[] x={1,2,3,4,5,35};
  25.            int y=5;
  26.            halfselect(x,y);
  27.         }

  28. }
复制代码

作者: 李政    时间: 2013-10-3 14:37
public static int halfselect(int[] arr,int key){
         int min,max,mid;
         min=0;
         max=arr.length-1;
         mid=(min+max)/2;
         
                 while(key!=arr[mid]){
                         if(key<arr[mid])
                               max=mid-1;    //min=min+1; 这里有个判断上的错误
                         else if(key>arr[mid])
                               min=mid+1;    //max=max-1;
                         mid=(max+min)>>1;   //这里没有进行折半
                          if(min>max)   //if(arr[min]>arr[max])  //这里应该写成坐标的比较,而不是坐标对应的值的比较,防止一些特殊情况的数组,如都是同一个数组成的数组,如果使用值比较,会出现角标越界
                                 return -1;
                 }
                 return mid;
         }
作者: 乔兵    时间: 2013-10-3 18:07
问题解决后,请修改帖子分类为:提问结束




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2