问题描述
写了个图中的代码(在控制台),用二分法检索数组元素,调试时什么都不显示,是怎么回事?
解决方案
解决方案二:
int[]myArray=newint[10]{13,15,23,25,45,46,57,58,78,79};intkey=78;intlow=0,high=9;while(low<=high){intmid=(low+high)/2;//要放到while循环的里面,让mid每次折半if(myArray[mid]==key){Console.WriteLine("找到key值,其位置在:"+mid);break;//一定要加break跳出while循环,否则死循环}elseif(myArray[mid]<key){low=mid+1;}else{high=mid-1;}}Console.Write("没有找到key值");
解决方案三:
该回复于2015-07-26 23:45:40被版主删除
解决方案四:
在ask回答你了。
解决方案五:
分析啊,没输出就是陷入了死循环喽
解决方案六:
就是low永远小于等于high,你的low是mid+1,然而你的mid在循环内是不变的,所以low也不会变啊,high也一样,所以死循环没输出
解决方案七:
你死循环了...只要你自己调试一下看一下每一步程序是怎么运行的就会知道为什么
解决方案八:
从语句分析可以知道错误在哪里,应该在哪里修改,因为if(myArray[mid]==key)判断语句需要其中的mid随循环变化,因此,在一个循环判断后应该使mid值朝目标方向靠近变化,所以,应该修改如下语句即可:elseif(myArray[mid]<key){//low=mid+1;mid=mid+1;}else{//high=mid-1;mid=mid-1;}
解决方案九:
断点调试,看到底走进哪个分支里去了
解决方案十:
你写的这种思路是在数组已经排序的情况时使用的,假如数组没有排序的情况,应该如何?有两种方案,1从头和尾开始分别向中间进行,2从中间分别向头和尾进行,就可以使用改变low=?和high=?这种思路了。
解决方案十一:
实测输出找到key值,其位置在:8你先在最后一行加上Console.ReadLine();避免程序执行完没等看清结果就退出了如果还是啥反应都没有,查看项目属性,看是否并不是控制台程序而是winform程序,那样当然不会有控制台窗口出现