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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一碗小米周 中级黑马   /  2013-10-5 20:47  /  1268 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一碗小米周 于 2013-10-5 20:50 编辑
  1. package test;

  2. public class FindIndex {
  3.         public static void main(String[] args) {
  4.                 int[] arr = new int[]{1,2,3,4,5,6};
  5.                 getIndex(arr,5);
  6.                 }
  7.         public static int getIndex(int[] arr,int key){
  8.                 int min =0;
  9.                 int max =arr.length-1;
  10.                 int mid = (min+max)/2;
  11.                 while(arr[mid]!=key){
  12.                         if(key>arr[mid])
  13.                                 min = mid+1;
  14.                         else if(key<arr[mid])
  15.                                 max= mid -1;
  16.                         mid=(min+max)/2;
  17.                         if(min>max)
  18.                                 return -1;
  19.                 }
  20.                 return mid;
  21.                
  22.         }

  23. }
复制代码
各位帮忙看下,为什么会没有返回值呢?谢谢。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
算法没有问题,只是缺少输出语句,正确带入如下:
public class FindIndex {
        public static void main(String[] args)
       {
             int[] arr = new int[]{1,2,3,4,5,6};
             System.out.println(getIndex(arr,1));
        }
        public static int getIndex(int[] arr,int key)
        {
                int min =0;
                int max =arr.length-1;
                int mid = (min+max)/2;
                while(arr[mid]!=key)
                {
                        if(key>arr[mid]) min = mid+1;
                        else if(key<arr[mid]) max= mid -1;
                        mid=(min+max)/2;
                        if(min>max) return -1;
                }
                return mid;   
        }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Rockray 于 2013-10-5 21:18 编辑

有返回值,只不过你没有输出啊
  1.                 int a;      
  2.                 a=getIndex(arr,5);    //把返回值赋给 a
  3.                 System.out.println(a);  //输出a,即可
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
有返回值,只不过你没用一个int类型的变量来接收他,返回了你也不知道放在哪里!!
int x=getIndex(arr,5);你可以定义一个int类型的x来接受返回值!!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 FFF 于 2013-10-5 23:00 编辑

你只是没有输出而已,有返回值的!设置一下返回值的接收就好了!
我写了一个二分法查找的,给你参考一下!
  1. public class Temp10_05 {
  2.         public static void main(String[] args) {
  3.                 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  4.                 int num = 4;//要查找的数
  5.                 int a = 0;//下限
  6.                 int b = 8;//上限
  7.                 int c;//输出值,中间值
  8.                 try {//防错误的
  9.                         if (arr[a] == num) {//判断是否是第一个,如果是第一个就直接输出。不找了
  10.                                 System.out.println(a);//输入
  11.                         } else if (arr[b] == num) {//判断是否是最后一个,如果是最后一个就直接输出。不找了
  12.                                 System.out.println(b);//输入
  13.                         } else {//二分法
  14.                                 while (a != b) {//上限不等于下限
  15.                                         c = (a + b) / 2;//取中间值
  16.                                         if (arr[c] == num) {//判断是否是中间,如果是中间的那个就直接输出。不找了
  17.                                                 System.out.println("您要找的数在数组中的位置是:"+c+"号位置");//输出
  18.                                                 System.out.println("您输入要查找的数:" + num);
  19.                                                 return;//返回,跳出循环
  20.                                         } else if (arr[c] < num) {//取值为中间值C的数组判断是否小于你要找的数num
  21.                                                 a = c;//小于则把中间值赋给最小
  22.                                         } else {//否则
  23.                                                 b = c;//把中间值赋为最大
  24.                                         }
  25.                                 }
  26.                         }
  27.                 } catch (ArrayIndexOutOfBoundsException e) {
  28.                         System.out.println(e.getMessage());
  29.                         e.printStackTrace();
  30.                         System.exit(0);
  31.                 }
  32.         }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
ily521125 发表于 2013-10-5 21:15
算法没有问题,只是缺少输出语句,正确带入如下:
public class FindIndex {
        public static void m ...

恩。是这样的。当时发过就发现了。。谢谢你{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马