Java - "not"扫描仪问题

标签 java arrays algorithm

<分区>

当我运行该程序时,它恰好通过了插入排序,但是当我使用二进制搜索询问您想在数组中搜索哪个数字时,该程序停滞不前,但它并没有终止或任何东西。我相信这与我的扫描仪有关。我已经使用单独的扫描器进行插入排序和二进制搜索解决了这个问题,但我不应该创建一个单独的扫描器来让它工作,对吧?

import java.util.Scanner;
public class Search {
    public static void main(String [] args){

        Insertion insert = new Insertion();
        Scanner input = new Scanner(System.in);

        int[] array = new int[5];

        int low = 0, high = array.length - 1, mid = (low+high)/2;
        int num =0;
        int target = 0;

        for(int i = 0; i < array.length; i++){
            System.out.println("Enter a number: ");
            num = input.nextInt();
            array[i] = num;
        }

        insert.insertion_srt(array, array.length);

        System.out.println("Your numbers sorted: ");

        for(int a = 0; a < array.length; a++){
            System.out.print(array[a]+" ");
        }

        System.out.println("\nWhich number do you want to look for?: ");
            target = input.nextInt();

        while(low<=high && array[mid] != target){
            if(target > array[mid])
                low = mid + 1;
            else
                high = mid -1;
        }

        if(low>high)
                mid = -1;

        System.out.println(mid);
        input.close();

    }

}

最佳答案

这很可能是因为 mid 的值在你的 WHILE 循环中永远不会改变:while(low<=high && array[mid] != input) .因此,循环永远不会终止,因为如果 array[mid]最初不等于输入(并且永远不会改变),然后它将继续运行。也许重新定义 mid IF 决定后的变量?

if(target > array[mid])
  low = mid + 1
else
  high = mid - 1
mid = (low+high)/2

while条件的另一半while(low<=high .. 也永远不会是真的,因为 mid变量永远不会改变。即如果mid = 2target > array[mid] , 然后 low将变为 3。因此,在每次迭代中,low变量将始终继续分配值 3。

关于Java - "not"扫描仪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14721794/

相关文章:

php - 如何处理 while 循环内的 foreach 中的空数组键?

java - 如何使用不同类中的数组?

algorithm - 为什么这段代码占用这么多内存?

algorithm - 如何删除重复的矩阵(以数组表示)?

java - 将字节数组解码为字符串并替换字符串内容并将其编码回来?

java - 如何在 Visual 2017 解决方案中包含 proxygen 的 "target"文件夹?

java - 在这种情况下性能优于 AspectJ 的方面框架?

java - 在 Spring Boot 中通过 POST 创建对实体创建的父引用

ruby - Ruby 中的卡住对象

algorithm - 哪种算法可以用来求解这个方程组?