黑马程序员技术交流社区

标题: 关于折半查找遇到的一个小问题 [打印本页]

作者: 刘俊佳    时间: 2012-7-20 17:57
标题: 关于折半查找遇到的一个小问题
本帖最后由 刘俊佳 于 2012-7-20 20:27 编辑

今天在编写折半查找中,按照毕老师的编写代码报错了:

package array;
public class ArrayTest4 {
public static void main(String[] args)
{
  /*int[] arr={3,1,5,4,2,9};
  int index=getIndex(arr, 2);
  System.out.println("index="+index);*/
  
  int[] arr={2,4,5,7,19,32,45};
  
  int index=halfSearch_2(arr,7);
  
  System.out.println("index="+index);
  
  
}
public static int halfSearch_2(int[] arr,int key)
{
  int min=0, max=arr.length-1, mid;
  
  while(min<=max)
  {
   mid=(max+min)>>1;
  
      if(key>arr[mid])
       min=mid+1;
      else if(key<arr[mid])
       max=mid-1;
      else
       return mid;
  }

}
以下是报错信息:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
This method must return a result of type int
at array.ArrayTest4.halfSearch_2(ArrayTest4.java:43)
at array.ArrayTest4.main(ArrayTest4.java:12)


作者: 马林康    时间: 2012-7-20 18:19
  while(min<=max)
   {
    mid=(max+min)>>1;
   
       if(key>arr[mid])
        min=mid+1;
       else if(key<arr[mid])
        max=mid-1;
       else
        return mid;
   }
return -1;添加这个代码;P

}
作者: 陌花╮有意、    时间: 2012-7-20 18:27
package array;
public class ArrayTest4 {
public static void main(String[] args)
{
  /*int[] arr={3,1,5,4,2,9};
  int index=getIndex(arr, 2);
  System.out.println("index="+index);*/
  
  int[] arr={2,4,5,7,19,32,45};
  
  int index=halfSearch_2(arr,7);
  
  System.out.println("index="+index);
  
  
}
public static int halfSearch_2(int[] arr,int key)
{
  int min=0, max=arr.length-1, mid;
  
  while(min<=max)
  {
   mid=(max+min)>>1;
  
      if(key>arr[mid])
       min=mid+1;
      else if(key<arr[mid])
       max=mid-1;
      else
       return mid;
  }
return -1;  这个方法要求必须要有一个返回值,所以如果没有找的话就返回-1作为标记

}
}// 这里少了一个大括号,应该是你复制的时候少了

作者: 黑马张涛    时间: 2012-7-20 18:32
public static int halfSearch_2(int[] arr,int key) //必须返回一个int类型的值
{
  int min=0, max=arr.length-1, mid;
  
  while(min<=max)
  {
   mid=(max+min)>>1;
  
      if(key>arr[mid])
       min=mid+1;
      else if(key<arr[mid])
       max=mid-1;
      else
       return mid;//return 只在while内有效,还需要在while外加return语句
  }

}
作者: 刘俊佳    时间: 2012-7-20 20:27
这里我少写了一个return -1,唉 真的是太粗心了
作者: 罗宵    时间: 2012-7-20 20:27
return 返回int型时,需要在while循环外面有个返回值。并且你定义int mid时,没有初始化值。 int min=0, max=arr.length-1, mid  ;改成 int min=0, max=arr.length-1, mid =(max+min)>>1 ;先给定mid一个值。
public class ArrayTest4 {
public static void main(String[] args)
{
  /*int[] arr={3,1,5,4,2,9};
  int index=getIndex(arr, 2);
  System.out.println("index="+index);*/
  
  int[] arr={2,4,5,7,19,32,45};
  
  int index=halfSearch_2(arr,7);
  
  System.out.println("index="+index);
  
  
}
public static int halfSearch_2(int[] arr,int key)
{
  int min=0, max=arr.length-1, mid =(max+min)>>1 ;
  
  while(min<=max)
  {
             mid=(max+min)>>1;
  
      if(key>arr[mid])
       min=mid+1;
      else if(key<arr[mid])
       max=mid-1;
      else
       break;

  }
  return mid;
}
}




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