java - 简单的二分查找程序...请告诉我这段特定代码有什么问题

标签 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();

     }
}

最佳答案

目前,您的代码确实可以编译并永远运行 - 因为这个循环:

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

假设它完全进入该循环(确实如此),条件永远不会变为假 - 所以除非您从循环内返回或中断(您不会)或抛出异常(它不是t) 你只会继续循环。

这是您应该:

  • 使用调试器观察发生的情况
  • 考虑一下条件实际上应该是什么,以及您希望它如何变为假
  • 调整代码以更改条件,或更改循环体,以便修改 midlen

关于java - 简单的二分查找程序...请告诉我这段特定代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720029/

相关文章:

swift - 将 String 类型转换为 Error 是不可预测的

c++ - nv-pro示例编译失败,全局范围没有 “int_least8_t”

c++ - 错误 2296 : '^' : illegal , 左操作数的类型为 'double'

java - JLabel图片显示问题

java - WebDriver容器无法访问DockerComposeContainer服务

search - 监控 Plone 中的搜索词

php - 使用 wpdb 搜索用户元值

java - Swing 物质外观下载

java - 找到字符串数组的唯一值并保持顺序

mysql - 在 VB.NET 中寻找在 MYSQL 中搜索字符串模式的有效过程