gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:16:44 25 4
gpt4 key购买 nike

我正在开发一个程序,我必须在其中演示线性和二分搜索算法的工作原理。为此,我接受用户提供的包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com