黑马程序员技术交流社区
标题:
为什么没有输出东西
[打印本页]
作者:
孙飞
时间:
2012-6-18 17:31
标题:
为什么没有输出东西
本帖最后由 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;
}
}
搞了半天还没搞明天为什么编译没错,但运行却没有结果
作者:
胡大强
时间:
2012-6-18 17:39
本帖最后由 胡大强 于 2012-6-18 19:32 编辑
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; //这是折半查找,每次key在与a[mid]比较之后,都会判断key的位置是在a[mid]的左边还是右边,然后更改
//min或者max的值,然后继续判断。。这时候就要循环。。。所以mid=(min+max)/2;要放在循环里面
while(min<=max)
{
mid=(min+max)/2;
if (arr[mid]<key)
min=mid+1;
else if(arr[mid]>key)
max=mid-1;
else
return mid;
}
return -1;
}
}
复制代码
作者:
孙飞
时间:
2012-6-18 17:50
胡大强 发表于 2012-6-18 17:39
原来这样啊,谢了,哎这个小问题费了好长时间,水平还是太次啊
作者:
王晓新
时间:
2012-6-18 17:53
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;
while(min<=max)
{
mid=(min+max)/2;//这条语句要放到while循环里面,因为你的min和max在变,所以每次都要对mid重新计算再判断
if (arr[mid]<key)
min=mid+1;
else if(arr[mid]>key)
max=mid-1;
else
return mid;
}
return -1;//这里返回-1表示要查找的数不在数组里
}
}
复制代码
作者:
胡大强
时间:
2012-6-18 19:30
feigecal 发表于 2012-6-18 17:50
原来这样啊,谢了,哎这个小问题费了好长时间,水平还是太次啊
多多注意就行。。。写代码遇到问题,用毕老师的话说,那是好事。。。应该高兴啊。。。这样你下次就不会范这样的错了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2