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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙飞 中级黑马   /  2012-6-18 17:31  /  1306 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 feigecal 于 2012-6-18 23:29 编辑

class ChaZhao
{
        public static void main(String[] args)
        {
                int [] arr={2,4,6,7,9,};
                int a=chaZhao(arr,8);
                System.out.println(a);
        }
        public static int chaZhao(int[] arr,int key)
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;
                mid=(min+max)/2;
                while(min<=max)
                {
                if (arr[mid]<key)
                        min=mid+1;
                else if(arr[mid]>key)
                        max=mid-1;
                else
                        return mid;
                }
                return -1;
        }
}
搞了半天还没搞明天为什么编译没错,但运行却没有结果

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 胡大强 于 2012-6-18 19:32 编辑
  1. class ChaZhao
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int [] arr={2,4,6,7,9,};//这里多写的逗号。。。那个数组的长度就会变的。。。
  6.                 int a=chaZhao(arr,8);
  7.                 System.out.println(a);
  8.         }
  9.         public static int chaZhao(int[] arr,int key)
  10.         {
  11.                 int min,max,mid;
  12.                 min=0;
  13.                 max=arr.length-1;
  14.               //  mid=(min+max)/2;    //这是折半查找,每次key在与a[mid]比较之后,都会判断key的位置是在a[mid]的左边还是右边,然后更改
  15.                                                                    //min或者max的值,然后继续判断。。这时候就要循环。。。所以mid=(min+max)/2;要放在循环里面
  16.                 while(min<=max)
  17.                 {
  18.                                          mid=(min+max)/2;
  19.                 if (arr[mid]<key)
  20.                         min=mid+1;
  21.                 else if(arr[mid]>key)
  22.                         max=mid-1;
  23.                 else
  24.                         return mid;
  25.                 }
  26.                 return -1;
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
胡大强 发表于 2012-6-18 17:39

原来这样啊,谢了,哎这个小问题费了好长时间,水平还是太次啊
回复 使用道具 举报
  1. class ChaZhao
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int [] arr={2,4,6,7,9};//你这里多了一个分号
  6.                 int a=chaZhao(arr,8);
  7.                 System.out.println(a);
  8.         }
  9.         public static int chaZhao(int[] arr,int key)
  10.         {
  11.                 int min,max,mid;
  12.                 min=0;
  13.                 max=arr.length-1;
  14.                  
  15.                 while(min<=max)
  16.                 {
  17.                                         mid=(min+max)/2;//这条语句要放到while循环里面,因为你的min和max在变,所以每次都要对mid重新计算再判断
  18.                     if (arr[mid]<key)
  19.                         min=mid+1;
  20.                     else if(arr[mid]>key)
  21.                         max=mid-1;
  22.                     else
  23.                         return mid;
  24.                 }
  25.                 return -1;//这里返回-1表示要查找的数不在数组里
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
feigecal 发表于 2012-6-18 17:50
原来这样啊,谢了,哎这个小问题费了好长时间,水平还是太次啊

多多注意就行。。。写代码遇到问题,用毕老师的话说,那是好事。。。应该高兴啊。。。这样你下次就不会范这样的错了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马