解决方案 »

  1.   


    mid = (min + max) / 2;
    放到while(min <= max)
    {}
    内。
      

  2.   

    把min=(min+max)/2;放到循环中间后,应该   不在数组中  这个输不出来吧!
      

  3.   


    else if (n < arr[0] || n > arr[max])
    改为
    else if (n < arr[min] || n > arr[max])
      

  4.   

    import java.util.Scanner;public class HalfSearch
    {
    public static void main(String[] args)
    {
    int[] arr =
    {
    92, 5, 13, 19, 37, 56, 64, 75, 80, 21, 88
    };
    for (int x = 0; x < arr.length - 1; x++)
    {
    for (int y = 0; y < arr.length - 1; y++)
    {
    if (arr[y] > arr[y + 1])
    {
    int temp = arr[y];
    arr[y] = arr[y + 1];
    arr[y + 1] = temp;
    }
    }
    }
    System.out.println("排序后的数组为");
    for (int x = 0; x < arr.length; x++)
    {
    if (x == 0)
    {
    System.out.print("{" + arr[x] + " ");
    }
    else if (x == arr.length - 1)
    {
    System.out.print(arr[x] + "}");
    }
    else
    {
    System.out.print(arr[x] + " ");
    }
    }
    Scanner reader = new Scanner(System.in);
    System.out.println("请输入您要查找的数:");
    while (reader.hasNextInt())
    {
    int min = 0, max = arr.length - 1, mid;
    int n = reader.nextInt();
    while (min <= max)
    {
    mid = (min + max) / 2;

    if (n == arr[mid])
    {
    System.out.println(n + "是数组中的元素");
    break;
    }
    else if (n < arr[min] || n > arr[max])
    {
    System.out.println(n + "不在数组中");
    break;
    }
    else if (n < arr[mid])
    {
    max = mid - 1;
    }
    else if (n > arr[mid])
    {
    min = mid + 1;
    }
    }
    System.out.println("\n可继续输入整数,或输入非整数结束程序");
    }
    reader.close();
    System.out.println("你输入的数据不是整数,程序结束!");
    }
    }
    运行结果
    排序后的数组为
    {5 13 19 21 37 56 64 75 80 88 92}请输入您要查找的数:
    4
    4不在数组中可继续输入整数,或输入非整数结束程序
    5
    5是数组中的元素可继续输入整数,或输入非整数结束程序
    6
    6不在数组中可继续输入整数,或输入非整数结束程序
    88
    88是数组中的元素可继续输入整数,或输入非整数结束程序
    89
    89不在数组中可继续输入整数,或输入非整数结束程序
    哪里不行了?