java - 我不想输入列表的大小,但我也想在列表中动态添加数字
问题描述
我使用 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");
}
}
}
}
现在我希望用户输入元素直到他想要,然后使用二分搜索找到元素的索引
解决方案
您的问题实际上是输入完成时如何终止扫描仪的重复?.
但是这里有一些提示可以让您的程序正常工作。
这部分代码不正确。
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");
推荐阅读
- jquery - 如何避免在 jQuery 中重复类似的代码?
- ionic4 - 离子 4 离子含量背景图像未显示在设备上
- python - 有没有一种有效的方法来从 Python 中的嵌套实例中累积值?
- node.js - NODEJS SOAP:对象引用未设置为对象的实例
- aws-cloud9 - AWS Cloud9 Node Express 可从 Internet 获取
- spring-transactions - 鉴于 Kotlin,检查异常行为是否仍然合适?
- web-applications - Facebook OAuth 登录与应用程序集成?
- javascript - 为什么 Flow 不能用方法参数的默认值推断类型
- go - 在 Linux 4.15.0 上编译的静态 Go 二进制文件在旧版 Linux 2.6.18 上不起作用
- python - 如何使用格式在输出字符串中插入标点符号?