使用对象名字段字段在Java中进行二进制搜索

时间:2013-09-25 23:08:11

标签: java binary-search

我遇到二进制搜索问题。

它第一次工作但是如果用户从菜单中选择此选项,则它不适用于不在阵列中的度假村,有时根本不起作用。我无法弄清楚它为什么不起作用。我一直在阅读不同的主题,试图弄明白但是我很难过。

编辑:我认为我得到了它的工作。我拿出了代码的全部内容并重写了唯一的区别,看看最终结果是if else if语句中的括号

                    if (resorts[middle].getName().compareTo(getDataFor) > 0)
                    {
                        high = middle - 1;
                    }
                    else if (resorts[middle].getName().compareTo(getDataFor) < 0)
                    {
                        low = middle + 1;
                    }
                    else
                    {
                        resorts[middle].display();
                        found = true;
                    }

感谢您的帮助!

  else if (choice == '2')
        {
            found = false;
            while (!found)
            {    
                System.out.print("Which resort would you like data for?: ");
                getDataFor = kb.nextLine().toUpperCase();
                low = 0;
                high = resorts.length;
                while (low <= high && !found)
                {
                    middle = (high + low) / 2;
                    if (resorts[middle].getName().compareTo(getDataFor) > 0)
                        high = middle - 1;
                    else if (resorts[middle].getName().compareTo(getDataFor) < 0)
                        low = middle + 1;
                    else
                    {
                        resorts[middle].display();
                        found = true;
                    }
                }
                if (!found)
                    System.out.println("Resort not found, please try again.");
            }
        }

1 个答案:

答案 0 :(得分:0)

您必须将low初始化为-1,而不是零,并且必须将每个非匹配集lowhigh初始化为middle,而无需添加或减去任何内容。

lowhigh视为指向已经过检查且无法匹配的条目。您在阵列“外部”启动一个元素。当middle证明不匹配时,它会将lowhigh替换为无法匹配的条目的外部界限。

或者,您可以编写代码lowhigh代表候选范围的“内部边界”,在这种情况下,您的middle-1middle+1将是正确,初始条件为low=0high=length-1

您可以选择可视化,但您的起始条件(lowhigh值)不一致。