Java 线性和二进制搜索逻辑错误
我正在做一个程序,我必须演示线性和二进制搜索算法的工作。为此,我从用户那里获取了一个包含20个数字的数组和一个搜索键。代码将编译,并且不会引发运行时错误。但是,当我在数组中搜索一个数字(例如12)时,它不是打印在位置12找到的数字,而是显示在位置6找到的数字:Java 线性和二进制搜索逻辑错误,java,arrays,binary-search,linear-search,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
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);
}
}
import java.util.*;
prg14类
{
int num[]=新int[20];
整数搜索;
公共无效林(内部arr[],内部a)
{
num=arr;
搜索=a;
int i;
int标志=0;
对于(i=0;i删除字符串str
,如
for( i = 0; i<linn.length; i++)
{
// str = sc.next();
linn[i] = sc.nextInt();
}
for(i=0;i你确定值12不在位置6吗?为什么只读取10个值?二进制搜索在排序数组上工作。你确定输入是按排序方式输入的吗?还有一点,“if(array[middle]==Search)…print”在中间+1处找到--为什么+1?--但是从if语句数组[middle]必须等于search,因此它打印的任何内容都是正确的(减1)是的,输入的输入已排序。是的,值12不在位置6。但是,仅读取10个值有问题。我将对此进行更改。@ElliottFrisch我将主方法中的for循环更改为读取20个值。但是,程序现在要求用户提供40个值。此外,不需要将数组值分配给类成员variables,它更适合作为静态实用方法,而不是给它一个状态
public static int linear(int arr[], int a) {
for (int pos = 0; pos < arr.length; pos++) {
if (arr[pos] == a) {
return pos;
}
}
return -1;
}