Я не хочу вводить размер списка, но я также хочу динамически добавлять номер в список - PullRequest
2 голосов
/ 01 октября 2019

Я использую List для динамического хранения значений, но мне нужно указать размер List перед тем, как вводить данные в программе бинарного поиска. Мне нужна помощь в том, что я не хочу принимать размер в качестве ввода.

Я пытался использовать length, но это не работает, кто-то предложил мне использовать size(), но я нене знаю, как его использовать.

import java.util.*;

class Binary
{
    public static void main(String args[])
    {
        Scanner s=new Scanner(System.in);
        System.out.println("Enter size of array");
        int n=s.nextInt();
        System.out.println("Enter array elements in ascending order");
        List<Integer> L=new ArrayList<>();
        for(int i=0;i<n;i++)
        {
            int e=s.nextInt();
            L.add(e);
        }
        System.out.println("Enter the element you want to search");
        int h=s.nextInt();
        int left=L.get(0);
        int right=L.get(n-1);
        while(left<=right)
        {
            if(h<=right){
                int m=(left+right)/2;

                if(m==h)
                {
                    System.out.println("Element found at index:"+L.indexOf(m)+" starting from 0");
                    return;
                }
                if(m>h)
                {
                    right=m-1;
                }
                if(m<h)
                {
                    left=m+1;
                }
            }
            else{
                System.out.println("Element not present");
            }   
        }
    }
}

Теперь я ожидаю, что пользователь будет вводить элементы до тех пор, пока он не захочет, а затем найти индекс элемента с помощью бинарного поиска

1 Ответ

0 голосов
/ 02 октября 2019

Ваш вопрос на самом деле является дубликатом Как завершить работу сканера, когда ввод завершен? .

Но вот несколько советов, как заставить вашу программу работать.

Эта часть кода неверна.

    int left=L.get(0);
    int right=L.get(n-1);

Вам необходимо установить левую и правую границы поиска, а не значения, введенные пользователем в эти позиции.

    int left=0;
    int right=L.size() - 1;

Тогда, когда вам нужно сравнить введенные пользователем значения.

    if (L.get(m) < h)

L.indexOf (m) на самом деле не имеет смысла. Это работало бы, если бы у вас был L.indexOf (L.get (m)), но это то же самое, что и просто m.

    System.out.println("Element found at index:" + m + " starting from 0");
...