我是初学者。 这是一个二进制搜索代码。它显示了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();
}
}
答案 0 :(得分:2)
目前你的代码已编译,并且永远运行 - 因为这个循环:
while(mid>=0 && mid<=len)
{
// Code which doesn't modify mid or len
}
假设它完全进入该循环(它所做的),条件永远不会变为假 - 所以除非你在循环中返回或中断(你没有)或抛出异常(它不是是的,你只是继续绕圈。
这是你应该去的地方:
mid
或len