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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓熊财 中级黑马   /  2015-3-28 09:15  /  1012 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Lx05
{
        public static void main(String[] args)
        {
                int[] arr = {1,2,3,4,5,6,7,8,9};
                int a = show(arr,6);
                System.out.println("6对应的角标是:"+a);
        }
        public static int show(int[] arr, int num)
        {
                int a = 0 ;
                int b = arr.length-1;
                int c = (a+b)/2;
                while (arr[c]!=num)
                {
                        if (arr[c]>num);
                                b=c-1;
                        if (arr[c]<num);
                                a = c+1;
                        if (a>b)
                                return -1;
                        c=( a+b)/2;
                }
                return c;
        }
}

12 个回复

倒序浏览
有爱的伙伴来帮忙看看嘛!
回复 使用道具 举报
  1.   if (arr[c]>num);
  2.                                 b=c-1;
  3.                         if (arr[c]<num);
  4.                                 a = c+1;
复制代码

1.if()后面不要加分号;
2.你的num应该是角标吧?应该用arr[num]来比较。
回复 使用道具 举报
num不是角标
回复 使用道具 举报
剑雨飘扬 发表于 2015-3-28 10:02
1.if()后面不要加分号;
2.你的num应该是角标吧?应该用arr[num]来比较。

num不是角标是我要查找的数
回复 使用道具 举报
邓熊财 发表于 2015-3-28 10:10
num不是角标是我要查找的数

那你把if后面的分号去掉试试
回复 使用道具 举报
剑雨飘扬 发表于 2015-3-28 10:11
那你把if后面的分号去掉试试

去了,但是还是-1
回复 使用道具 举报
DxxD 中级黑马 2015-3-28 10:16:47
8#
最近你这种错误貌似很多人范。。。
回复 使用道具 举报
DxxD 发表于 2015-3-28 10:16
最近你这种错误貌似很多人范。。。

快点帮忙解答解答呗!
回复 使用道具 举报
邓熊财 发表于 2015-3-28 10:14
去了,但是还是-1

if(){}
括号后面不要加分号,加了分号if语句就结束了,所以你程序里循环的时候每次都 b=c-1;a=c+1;肯定会返回-1。

QQ截图20150328102050.png (167.13 KB, 下载次数: 22)

QQ截图20150328102050.png
回复 使用道具 举报
剑雨飘扬 发表于 2015-3-28 10:22
if(){}
括号后面不要加分号,加了分号if语句就结束了,所以你程序里循环的时候每次都 b=c-1;a=c+1;肯定 ...

谢谢,好人一生平安
回复 使用道具 举报
  1. //根据你的思路,我也做了一下。

  2. public class Demo {
  3.         public static void main(String[] args){
  4.                 int[] arr= {1,2,3,4,5,6,7,8,9};
  5.                 //定义需要查找的数值。
  6.                 int a=6;
  7.                
  8.                 int num=show(arr,a);
  9.                
  10.                 if(num==-1){
  11.                         System.out.println(a+"这个数不存在。");
  12.                 }else{
  13.                         System.out.println(a+" 在数组中的角标是:"+num);
  14.                 }
  15.                        
  16.         }
  17.        
  18.         public static int show(int[] arr,int num){
  19.                
  20.                 //这里定义的都是角标。
  21.                 int min=0;
  22.                 int max=arr.length-1;
  23.                 int mid =-1;
  24.        
  25.                 while(min<=max){
  26.                         //给mid赋值。
  27.                         mid=(min+max)/2;
  28.                        
  29.                         //如果找到直接返回该角标。
  30.                         if(arr[mid]==num){
  31.                                 return mid;
  32.                         }
  33.                         //mid角标上的数小于查找值。
  34.                         else if(arr[mid]<num){
  35.                                 //让最小角标等于mid角标+1.
  36.                                 min = mid+1;
  37.                         }
  38.                         //mid角标上的数大于查找值。
  39.                         else {
  40.                                 //让最大角标等于mid角标-1.
  41.                                 max=mid-1;
  42.                         }
  43.                 }
  44.                 //如果不满足min<=max条件,查找结束,直接返回-1;
  45.                 return -1;
  46.         }
  47. }
复制代码
运行结果:


回复 使用道具 举报
对了,最后的那个return可以直接写成return mid;
疏忽了。{:2_32:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马