黑马程序员技术交流社区
标题:
while 循环中的条件改变问题
[打印本页]
作者:
邹海洋
时间:
2012-6-6 13:12
标题:
while 循环中的条件改变问题
本帖最后由 邹海洋 于 2012-10-30 14:57 编辑
public class ZheBan1
{
//定义求值的方法
public static int halfSearch(int [] arr,int key)
{
int min = 0,max = arr.length-1,mid=0;
while (min<=max)
{
mid = (min+max)>>1;
if (key < arr[mid])
{
max = mid - 1;
}else if (key>arr[mid])
{
min = mid + 1;
}else
{
return mid;
}
//mid = (min + max)>>1; //此处如果注释掉,那么这个循环不就没法继续吗但是,结果却是对的,求解?
}
return -1;
}
//定义主函数
public static void main(String args[])
{
int score[]={2,3,5,7,9,23,25,35,56};
int num = halfSearch(score,56);
System.out.println(num);
}
}
作者:
杨海波
时间:
2012-6-6 13:20
本帖最后由 杨海波 于 2012-6-6 13:24 编辑
你看一下你的代码:
public static int halfSearch(int [] arr,int key)
{
int min = 0,max = arr.length-1,mid=0;
while (min<=max)
{
[color=Red]mid = (min+max)>>1;[/color] if (key < arr[mid])
{
max = mid - 1;
}else if (key>arr[mid])
{
min = mid + 1;
}else
{
return mid;
}
//mid = (min + max)>>1; //此处如果注释掉,那么这个循环不就没法继续吗但是,结果却是对的,求解?
}
return -1;
复制代码
上面已经有一个mid = (min + max)>>1,这个是在局部中的语句,比如执行了max=mid-1,那上面的局部变量就重新赋值了,继续这样循环,知道找到结果为止,你那一句是多余的。
看我自己写的一中折半查找:
public static int halfSearch(int[]arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid=(min+max)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid+1;
else if(key<arr[mid])
max = mid-1;
if(min>max)
return -1;
mid = (max+min)/2;
}
return mid;
}
复制代码
折半查找有多种写法,关键就是要找我它的原理。
作者:
马东华
时间:
2012-6-6 13:21
while (min<=max)
{
mid = (min+max)>>1;//这一步你已经定义为mid的值了啊,
if (key < arr[mid])
{
max = mid - 1;
}else if (key>arr[mid])
{
min = mid + 1;
}else
{
return mid;
}
//mid = (min + max)>>1; //这一步没有作用啊 ,加不加注释对结果没有影响的啊 }
return -1;
复制代码
作者:
吴小铁你好
时间:
2012-6-6 13:26
本帖最后由 吴小铁你好 于 2012-6-6 13:28 编辑
public class ZheBan1
{
//定义求值的方法
public static int halfSearch(int [] arr,int key)
{
int min = 0,max = arr.length-1,mid=0;
while (min<=max)
{
mid = (min+max)>>1;//此处以有了改变while条件量。
if (key < arr[mid])
{
max = mid - 1;
}else if (key>arr[mid])
{
min = mid + 1;
}else
{
return mid;
}
//mid = (min + max)>>1; //此处如果注释掉,那么这个循环不就没法继续吗但是,结果却是对的,求解?
}
return -1;
}
//定义主函数
public static void main(String args[])
{
int score[]={2,3,5,7,9,23,25,35,56};
int num = halfSearch(score,56);
System.out.println(num);
}
}
复制代码
你在while中第九行已经有一个
mid = (min+max)>>1;
复制代码
,下面的这个可以注释不影响结果。但如果你把上面的这个也注释就会一直循环啊。
作者:
邹海洋
时间:
2012-6-6 13:28
非常感谢,也就是说改变条件的表达式不一定要在最后,之前对mid的赋值同样起到这样的作用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2