java - 线性和二分搜索逻辑错误

标签 java arrays binary-search linear-search

我正在开发一个程序,我必须在其中演示线性和二分搜索算法的工作原理。为此,我接受用户提供的包含 20 个数字的数组和一个搜索键。代码可以编译,并且不会引发运行时错误。但是,当我在数组中搜索数字(例如 12)时,它不会打印在位置 12 中找到该数字,而是显示在位置 6 中找到该数字:

import java.util.*;
class prg14
{
    int num [] = new int [20];
    int search;

    public void lin (int arr[], int a)
    {
        num = arr;
        search = a;
        int i;
        int flag = 0;

        for (i=0; i<num.length; i++)
        {
            if (search == num[i])
            {
                flag = 1;
                break;
            }

        }
        if (flag == 1)

        { 
            System.out.println("Linear Search : ");
            System.out.println(a+ " found at position " + (i + 1));
        }
        else
        {
            System.out.println("Linear Search : ");
            System.out.print(a+ " not present in the list \n");
        }
    }

    public void binary(int array[], int a)
    {

        int first  = 0;
        int n = 20;
        int last   = n - 1;
        int middle = (first + last)/2;

        while( first <= last )
        {
            if ( array[middle] < search )
                first = middle + 1;    
            else if ( array[middle] == search ) 
            {
                System.out.println("Binary search : ");
                System.out.println(search + " found at position " + (middle+1) + ".");
                break;
            }
            else
                last = middle - 1;

            middle = (first + last)/2;
        }
        if ( first > last )

        {System.out.println("Binary Search : ");
            System.out.println(search + " not present in the list.\n");
        }
    }   


    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        prg14 obj = new prg14();
        System.out.println("Enter any 20 numbers.");
        String str;
        int linn[] = new int[20];
        int i;
        for( i = 0; i<10; i++)
        {
            str = sc.next();
            linn[i] = sc.nextInt();
        }
        System.out.println("Enter number to be searched.");
        int search = sc.nextInt();
        obj.lin(linn, search);
        obj.binary(linn, search);

    }

}

如何解决这个问题? TIA。

最佳答案

删除字符串str,例如

for( i = 0; i<linn.length; i++)
{
   // str = sc.next();
   linn[i] = sc.nextInt();
}

您没有混合行输入和标记化输入,因此您无需担心尾随换行符(在本例中)。另外,我将通过返回匹配索引(如果未找到则返回 -1)来实现线性搜索函数

public static int linear(int arr[], int a) {
    for (int pos = 0; pos < arr.length; pos++) {
        if (arr[pos] == a) {
            return pos;
        }
    }
    return -1;
}

我会对二进制搜索做同样的事情。这样您就可以将消息显示与计算分开。

关于java - 线性和二分搜索逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954500/

相关文章:

php - 使用动态准备语句更新表

PHP:数组可以有一个数组作为键值对中的键吗?

java - 从服务器调用方法

java - 为什么我的递归不起作用?

c - 将 NULL 指针的常量数组分配给结构数组内结构中的数组

c++ - 在已移动的排序数组中找到最小值

algorithm - 查找数组中两个数字之间的最小绝对差的最佳算法

c++ - 二进制搜索陷入无限循环?

java - Java中用逗号或双引号对分割字符串的优雅算法

java - 无法在Windows 10中安装JDK 8