A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 刘俊佳 中级黑马   /  2012-7-20 17:57  /  2297 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘俊佳 于 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)

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

5 个回复

倒序浏览
  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

}
回复 使用道具 举报
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作为标记

}
}// 这里少了一个大括号,应该是你复制的时候少了
回复 使用道具 举报
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语句
  }

}
回复 使用道具 举报
这里我少写了一个return -1,唉 真的是太粗心了
回复 使用道具 举报
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;
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马