我使用List来动态存储值,但是在输入Binary搜索程序之前,我必须指定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");
}
}
}
}
现在我希望用户输入元素直到他想要,然后使用二进制搜索找到元素的索引
答案 0 :(得分:0)
您的问题实际上是How to terminate Scanner when input is complete?的副本。
但是这里有一些使程序正常工作的指针。
这部分代码不正确。
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");