所以我有一个方法,它接收用户想要输入的数字并将它们存储到数组列表中。现在我有以下方法:
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。但是,我无法想到另一种方法。
非常感谢任何帮助。
答案 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