如何存储"无限" ArrayList中的整数数(Java)

时间:2017-05-15 14:47:31

标签: 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;i++){
        t = scan.nextInt();
        if(t!=0){
            a.add(t);                                                                                              
        }else{
            i+=200000;
        }
    }
    return a;
}

我想改进它,以便该方法在技术上可以接受无限数量的值(而不是10,000)因为我现在感觉就像在逻辑上不太可能有人会将更多的值放在10,000以内,我仍觉得现在的代码很草率。

我也希望能够输入任何数字并将其存储在ArrayList中,包括当前作为一种标记值的数字0。但是,我无法想到另一种方法。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

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

您可以处理价值流,但它不会使用ArrayList。您应该重新考虑您的要求和实施。

答案 1 :(得分:1)

当你得到零时,你可以改变条件退出。

.form-group {
    .form-error ~ input {
        border: 1px solid red;
    }
}

如果用户输入的内容不是int,则会退出。由于您使用的是boolean accumulating = true; while(accumulating){ accumulating = scan.hasNextInt(); if(accumulating){ a.add(scan.nextInt()); } } ,因此您只能拥有ArrayList个元素。

或者更简洁。

Integer.MAX_VALUE

答案 2 :(得分:0)

int t = 0;
int u = 1;
while(u != 0){
    t = scan.nextInt();
    a.add(t);
    u = scan.nextInt();                                                                                              
}

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

答案 3 :(得分:0)

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

sum_list_tail :: (Num b, Foldable t) => t b -> b
sum_list_tail = foldl (+) 0