我是初学者。 这是一个二分搜索代码。它显示 main 方法的数组越界错误。 请查看该程序并请告诉我我的错误。我将感谢您的服务。 我必须写下所有这些废话,因为我无法发布它,因为它要求更多细节。
public class BinaryS
{
int n;
public BinaryS(int z)
{
n=z;
}
static int pos;
static boolean flag=false;
public void disp()
{
int arr[]={0,1,2,3,4};
int len=arr.length;
int first=0;
int last=len;
int mid=(int)(first+last/2);
//boolean flag=false;
while(mid>=0 && mid<=len)
{
if(n<arr[mid])
{
last=mid;
}
if(n>arr[mid])
{
first=mid;
}
if(n==arr[mid])
{
flag=true;
pos=mid+1;
}
}
if(flag==true){
System.out.println("the no."+n+"is found at"+pos);
}
else{
System.out.println("the no."+n+"is not found ");
}
}
public static void main(String args[])
{
BinaryS obj=new BinaryS(2);
obj.disp();
}
}
最佳答案
目前,您的代码确实可以编译并永远运行 - 因为这个循环:
while(mid>=0 && mid<=len)
{
// Code which doesn't modify mid or len
}
假设它完全进入该循环(确实如此),条件永远不会变为假 - 所以除非您从循环内返回或中断(您不会)或抛出异常(它不是t) 你只会继续循环。
这是您应该:
- 使用调试器观察发生的情况
- 考虑一下条件实际上应该是什么,以及您希望它如何变为假
- 调整代码以更改条件,或更改循环体,以便修改
mid
或len
关于java - 简单的二分查找程序...请告诉我这段特定代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720029/