黑马程序员技术交流社区
标题:
while语句的问题
[打印本页]
作者:
高鑫
时间:
2012-4-27 02:12
标题:
while语句的问题
请问下面这个循环语句中,第一个if+语句,else if+语句,if+语句,这3部分哪几部分属于while循环结构。
while(min<=max )
if(key>arr[mid]) //第一个if
min=mid+1;
else if(key<arr[mid]) //第二个else if
max=mid-1;
if (key==arr[mid]) //第3个if
return mid;
mid=(min+max)/2;
作者:
贾联国
时间:
2012-4-27 03:30
这是二分法找key的方法,三个if肯定都在循环里,也都属于循环,具体看代码:
while(min<=max )
if(key>arr[mid]) //第一个if 判断key离min较近,可以让max向min移动,需要循环
min=mid+1;
else if(key<arr[mid]) //第二个else if 判断key离max较近,可以让min向max移动,需要循环
max=mid-1;
if (key==arr[mid]) //第3个if 判断key和max与min的中间值是否相等,前两个条件循环的同时,这个也有可能成立
return mid;
mid=(min+max)/2;
复制代码
作者:
高彰谦
时间:
2012-4-27 05:51
第三个if断开了,不属于while体内
作者:
光sail
时间:
2012-4-27 07:43
while(min<=max )
if(key>arr[mid])
//while循环内
min=mid+1;
else if(key<arr[mid])
//while循环内
max=mid-1;
if (key==arr[mid])
//while循环外
return mid;
mid=(min+max)/2;
作者:
陆强强
时间:
2012-4-27 08:18
本帖最后由 陆强强 于 2012-4-27 08:20 编辑
三个循环都不能放在循环外,不然你这代码执行不了,
while(min<=max )
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if (key==arr[mid])
return mid;
mid=(min+max)/2;
}
return min;
作者:
马浩
时间:
2012-4-27 08:39
while(min<=max )
if(key>arr[mid]) //第一个if//
只有这一个if语句是属于while循环的循环体
min=mid+1;
else if(key<arr[mid]) //第二个else if
max=mid-1;
if (key==arr[mid]) //第3个if
return mid;
mid=(min+max)/2;
楼主想做的是折半查找吧,while循环的时候,在没加大括号的情况下,会把与它最近的一个语句作为循环体的,后面的都不在循环之内……为了避免这种情况出现,在些循环结构的时候还是按照格式,不管循环体是一句还是多句,都加上括号,这样安全,if,for都是这样的
作者:
HeiMaYSL
时间:
2012-4-27 14:27
while(min<=max )
if(key>arr[mid]) //第一个if
min=mid+1;
else if(key<arr[mid]) //第二个else if
max=mid-1;
if (key==arr[mid]) //第3个if
return mid;
mid=(min+max)/2;
当然是第一个if在while循环结构里了。因为程序在执行没有加大括号限制范围时,就会自动按照临近原则,
执行离它最近的那一行代码。
不过,这样写虽然简化了,但是,很不利于阅读。最好按照规范来写。这样方便他人和自己日后观看和阅读。
作者:
丁佼
时间:
2012-4-27 15:54
while(min<=max )
if(key>arr[mid]) //第一个if
min=mid+1;
只有第一个if属于while管辖,在没有{}标示范围的情况下,第一个分号(;)标志了循环或者if等流程控制语句块的结束。
作者:
任睦强
时间:
2012-4-27 15:55
while(min<=max )
{
if(key>arr[mid]) //第一个if
min=mid+1;
else if(key<arr[mid]) //第二个else if
max=mid-1;
}
if (key==arr[mid]) //第3个if
return mid;
mid=(min+max)/2;
被红色括号括起来的是一个逻辑,它在while循环中
蓝色部分在循环外
作者:
胡奎
时间:
2012-4-27 15:58
都在循环里
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2