如何存储一个;“无限”;ArrayList中的整数数(Java)

如何存储一个;“无限”;ArrayList中的整数数(Java),java,arraylist,java.util.scanner,Java,Arraylist,Java.util.scanner,所以我有一个方法,它接收用户想要输入的数字,并将它们存储到数组列表中。现在我有以下方法: public static ArrayList<Integer> inputArrayList(){ ArrayList<Integer> a = new ArrayList<Integer>(); Scanner scan = new Scanner(System.in); int t; for(int i=0;i<10000;

所以我有一个方法,它接收用户想要输入的数字,并将它们存储到数组列表中。现在我有以下方法:

public static ArrayList<Integer> inputArrayList(){

    ArrayList<Integer> a = new ArrayList<Integer>();
    Scanner scan = new Scanner(System.in);

    int t;
    for(int i=0;i<10000;i++){
        t = scan.nextInt();
        if(t!=0){
            a.add(t);                                                                                              
        }else{
            i+=200000;
        }
    }
    return a;
}
公共静态ArrayList inputArrayList(){
ArrayList a=新的ArrayList();
扫描仪扫描=新扫描仪(System.in);
int t;

for(int i=0;i
ArrayList
采用类型为
int
的索引,因此只能索引到整数的最大值


您可以处理一个值流,但它不会使用
ArrayList
。您应该重新考虑您的需求和实现。

ArrayList
采用
int
类型的索引,因此您只能索引到整数的最大值


您可以处理一个值流,但它不会使用
ArrayList
。您应该重新考虑您的需求和实现。

您可以更改条件,在得到零时退出

boolean accumulating = true;
while(accumulating){

    accumulating = scan.hasNextInt();
    if(accumulating){
        a.add(scan.nextInt());                                                                                              
    }

}
如果用户输入的内容不是int,则此操作将退出。因为您使用的是
ArrayList
,并且您只能保存
Integer.MAX\u VALUE
元素,所以会出现一个li模拟

或者更简洁地说

while(scan.hasNextInt()){
   a.add(scan.nextInt());
}

当得到零时,您可以将条件更改为退出

boolean accumulating = true;
while(accumulating){

    accumulating = scan.hasNextInt();
    if(accumulating){
        a.add(scan.nextInt());                                                                                              
    }

}
如果用户输入的内容不是int,则此操作将退出。因为您使用的是
ArrayList
,并且您只能保存
Integer.MAX\u VALUE
元素,所以会出现一个li模拟

或者更简洁地说

while(scan.hasNextInt()){
   a.add(scan.nextInt());
}
这是我现在能想到的最简单的实现。非常简单,只需使用另一个变量跟踪是否退出循环,否则添加到无穷大。现在它接受任何达到固有极限的整数


这是我现在能想到的最简单的实现。非常简单,只需使用另一个变量来跟踪是否退出循环,否则添加到无穷大。现在它接受任何达到固有极限的整数。

我认为您需要这样做:

System.out.println("If you want to exit, enter any non number?");
int t;
do {
    try {
        t = scan.nextInt();
        a.add(t);
    } catch (NumberFormatException e) {
        break;//if the user enter a non number break your loop
    }

} while (true);//loop until the user enter a non number

我认为你需要做这样的事情:

System.out.println("If you want to exit, enter any non number?");
int t;
do {
    try {
        t = scan.nextInt();
        a.add(t);
    } catch (NumberFormatException e) {
        break;//if the user enter a non number break your loop
    }

} while (true);//loop until the user enter a non number

使用while(true)循环并在给定的输入上使用break退出它;这样您就可以输入0并退出,或者您的意思是什么?“[…]我想改进它,以便该方法在技术上可以接受无限多的值[…]”除了限制之外,您还需要非常大的内存,这在技术上是不可能的……是的,这也是。使用while(true)循环并在给定的输入上使用break退出它;这样您就可以输入0并退出,或者您的意思是什么?“[…]我想改进它,以便该方法在技术上可以接受无限多的值[…]”除了限制之外,您还需要非常大的内存,这在技术上是不可能的……是的,也是这样。如果用户输入0,它就会退出。您的@matt是什么意思?您最初的示例中有
if(t!=0)
这意味着当用户输入0时,循环将退出,这意味着用户不能将其列表设置为0。如果用户输入0,循环将退出。您的@matt是什么意思?您最初的示例中有
if(t!=0)
这意味着当用户输入0时,循环退出,这意味着用户无法将其列表设置为0。在使用它之前,您需要初始化
u
。在使用它之前,您需要初始化
u