黑马程序员技术交流社区

标题: 为什么返回的是-1呢? [打印本页]

作者: 邓熊财    时间: 2015-3-28 09:15
标题: 为什么返回的是-1呢?
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;
        }
}
作者: 邓熊财    时间: 2015-3-28 09:40
有爱的伙伴来帮忙看看嘛!
作者: 剑雨飘扬    时间: 2015-3-28 10:02
  1.   if (arr[c]>num);
  2.                                 b=c-1;
  3.                         if (arr[c]<num);
  4.                                 a = c+1;
复制代码

1.if()后面不要加分号;
2.你的num应该是角标吧?应该用arr[num]来比较。

作者: 邓熊财    时间: 2015-3-28 10:07
num不是角标
作者: 邓熊财    时间: 2015-3-28 10:10
剑雨飘扬 发表于 2015-3-28 10:02
1.if()后面不要加分号;
2.你的num应该是角标吧?应该用arr[num]来比较。

num不是角标是我要查找的数
作者: 剑雨飘扬    时间: 2015-3-28 10:11
邓熊财 发表于 2015-3-28 10:10
num不是角标是我要查找的数

那你把if后面的分号去掉试试
作者: 邓熊财    时间: 2015-3-28 10:14
剑雨飘扬 发表于 2015-3-28 10:11
那你把if后面的分号去掉试试

去了,但是还是-1
作者: DxxD    时间: 2015-3-28 10:16
最近你这种错误貌似很多人范。。。
作者: 邓熊财    时间: 2015-3-28 10:17
DxxD 发表于 2015-3-28 10:16
最近你这种错误貌似很多人范。。。

快点帮忙解答解答呗!

作者: 剑雨飘扬    时间: 2015-3-28 10:22
邓熊财 发表于 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:26
剑雨飘扬 发表于 2015-3-28 10:22
if(){}
括号后面不要加分号,加了分号if语句就结束了,所以你程序里循环的时候每次都 b=c-1;a=c+1;肯定 ...

谢谢,好人一生平安
作者: huangchunwei    时间: 2015-3-28 11:21
  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. }
复制代码
运行结果:



作者: huangchunwei    时间: 2015-3-28 11:22
对了,最后的那个return可以直接写成return mid;
疏忽了。{:2_32:}




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