2

私はこれがどこで起こるのか正確に混乱しています。私はこの単純なコードを紙で追跡し、コンピューターを使用しましたが、理解できません。私の例では、{1、2、3、4、5}の配列を作成しましたが、4番と5番でこのエラーが発生しました。1番、2番、3番、およびアレイ。誰か助けてもらえますか?

public static int search(int[] ar, int num)
{
    int low=0;
    int hi=ar.length-1;
    int mid=(low+hi/2);
    while(hi>=low || mid<=low || mid>=hi )
    {
        if(ar[mid]==num)
        {
            return mid;
        }
        else if(ar[mid]>num)
        {
            hi=mid-1;
            mid=(low+hi/2);
        }
        else
        {
            low=mid+1;
            mid=(low+hi/2);
        }
    }
    return -1;
}
4

2 に答える 2

3
mid=(low+hi/2);

lowとhiを追加した後に分割するように、pranthesesを使用する必要があります。

mid=(low+hi) / 2;

また、ループ条件では、midが> highになることを許可しないでください。そうすると、配列にない多数の数が終了しなくなります。

于 2012-03-18T20:24:58.857 に答える
0

問題は、ループを継続する条件です。これを変更してみてください:

while (hi>=low || mid<=low || mid>=hi) {

これに:

while (hi>=low) {

の場合hi < low、他の2つの条件に関係なくループを続行したくない(そのうちの1つは常に真になると思いますhi < low)。

于 2012-03-18T20:23:11.223 に答える