在java中使用线性和二进制搜索的用户输入

时间:2014-01-29 23:50:20

标签: user-input binary-search linear-search

我正在尝试编写一个程序,要求用户输入用户想要创建的数组的大小,然后要求用户用数组填充数组,然后它应该显示数组及其元素并要求用户搜索整数。它应该进行线性和二进制搜索,同时显示确定的数量是元素在数组中的数量。到目前为止,我得到的唯一输出是该元素尚未找到。如果你能查看我的代码,看看问题是什么,因为我已经尝试了几个小时,我已经改变了我能想到的一切。任何帮助将不胜感激。

import java.util.Scanner;

public class Searching
{
public static int[] anArray = new int[100];

private int numberOfElements;

public int arraySize = numberOfElements;

public String linearSearch(int value)
{

    int count = 0;

    boolean valueInArray = false;

    String indexOfValue = "";

    System.out.print("The Value was Found in: ");

    for(int i = 0; i < arraySize; i++)
    {   
        if(anArray[i] == value)
        {   
            valueInArray = true;

            System.out.print(i + " ");

            indexOfValue += i + " ";

        }
        count ++;
    }
    if(!valueInArray)
    {
        indexOfValue = " None found";

        System.out.print(indexOfValue);
    }
    System.out.println("\nIt took " + count + " probes with a linear search to find");

    return indexOfValue;

}

public void binarySearch(int value)
{

    int min = 0;
    int max = arraySize - 1;
    int count = 0;

    while(min <= max)
    {

        int mid = (max + min) / 2;

        if(anArray[mid] < value) min = mid + 1;

        else if(anArray[mid] > value) max = mid - 1;

        else
        {

            System.out.println("\nFound a Match for " + value + " at Index " + mid);

            min = max + 1;
        }
        count ++;
    }   
    System.out.println("It took " + count + " probes with a binary search to find");
}

public static void main(String[] args)
{
    @SuppressWarnings("resource")
    Scanner scan = new Scanner(System.in);

    System.out.println("Input the number of elements in your Array");
    int numberOfElements = scan.nextInt();

    if(numberOfElements <= 0)
    {
        System.exit(0);
    }

    int[] anArray = new int[numberOfElements];

    System.out.println("\nEnter " + numberOfElements + " Integers");
    for(int i = 0; i < anArray.length; i ++)
    {
        System.out.println("Int # " + (i + 1) + ": ");
        anArray[i] = scan.nextInt();
    }

    System.out.println("\nThe integers you entered are: ");
    for(int i = 0; i < anArray.length; i ++)        // for loop used to print out each element on a different line
    {
        System.out.println(anArray[i]);
    }

    System.out.println("Which element would you like to find?");
    int value = scan.nextInt();

    Wee3Q2JOSHBALBOA newArray = new Wee3Q2JOSHBALBOA();

    newArray.linearSearch(3);

    newArray.binarySearch(value);

}
}

1 个答案:

答案 0 :(得分:0)

嗯我不确定你是否以正确的方式使用数组,你看到数组是一个设定的大小,我不认为你可以像你正在做的那样扩展......

而是尝试将数组的大小设置为特定长度。 或使用矢量