简单的二进制搜索程序....请告诉我这个特定代码有什么问题

时间:2014-11-03 17:54:15

标签: java search compiler-errors binary

我是初学者。 这是一个二进制搜索代码。它显示了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();

     }
}

1 个答案:

答案 0 :(得分:2)

目前你的代码已编译,并且永远运行 - 因为这个循环:

while(mid>=0 && mid<=len)
{
    // Code which doesn't modify mid or len
}

假设它完全进入该循环(它所做的),条件永远不会变为假 - 所以除非你在循环中返回或中断(你没有)或抛出异常(它不是是的,你只是继续绕圈。

这是你应该去的地方:

  • 使用调试器观察正在发生的事情
  • 想一想实际上的条件是什么以及你希望它如何变得虚假
  • 调整代码以更改条件,或更改循环体以便修改midlen