Java - 将多个用户输入添加到arraylist

时间:2017-11-23 17:09:49

标签: java arraylist

我试图读取用户在同一行上输入的无限数量的数字(用空格分隔)并打印0以上所有值的平方 - 所有这些都不使用for循环。

例如......

输入:

1 2 3 4 -10 -15

输出:

30

以下是我目前的代码:

ArrayList<Integer> numbers = new ArrayList<Integer>();

    //insert into array if > 0
    int x = sc.nextInt();
    if(x > 0){
        numbers.add(x);
    }

    //square numbers array
    for (int i = 0; i < numbers.size(); ++i) {
        numbers.set(i, numbers.get(i) * numbers.get(i));
    }

    //sum array
    int sum = 0;
    for(int i = 0; i < numbers.size(); ++i){
        sum += numbers.get(i);
    }
    System.out.println(sum);

正如您所看到的,我只是扫描用户的一个输入,因为我不确定如何处理存储无限输入。此外,我正在为我的两个方程使用for循环。

由于

5 个答案:

答案 0 :(得分:2)

由于您要添加每个数字的平方,因此您不需要任何列表,只需要为输入中读取的每个数字添加正方形的单个数字。类似的东西:

int result = 0;    
Scanner scanner = new Scanner(System.in);

while(scanner.hasNextInt()){
    int num = scanner.nextInt();
    if(num > 0)
        result += num * num;
}

System.out.println(result);

答案 1 :(得分:1)

正如第一个答案所说,你不需要一个ArrayList。

但如果你坚持这样做,这是一个解决方案:

要存储号码,请使用以下代码:

while(sc.hasNextInt()){
    int x = sc.nextInt();
    if(x > 0){
        numbers.add(x);
    }
}

可以通过这种方式避免for循环:

而不是:

for (int i = 0; i < numbers.size(); ++i) {
    numbers.set(i, numbers.get(i) * numbers.get(i));
}

您可以使用:

List<Integer> newNumbers = numbers.stream().map(x->x*x).collect(toList());

答案 2 :(得分:0)

您可以使用数组列表以这种方式重构您的程序:

ArrayList<Integer> numbers = new ArrayList<Integer>(); 
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
   int x = in.nextInt();
    if(x > 0){
        numbers.add(x * x);
    }
}
int sum = 0;
for(int i = 0; i < numbers.size(); i++){
    sum += numbers.get(i);
}
    System.out.println(sum);

答案 3 :(得分:0)

您可以在阅读该行后使用split,然后执行计算:

        int result = 0;
        Scanner scanner = new Scanner(System.in);

        String a[] = scanner.nextLine().split(" ");

        for (String aa : a) {
            if (Integer.parseInt(aa) > 0) {
                result = result + Integer.parseInt(aa) * Integer.parseInt(aa);
            }
        }
System.out.println(result);

I / P: 2 3 1 -44 -22

O / P 14

答案 4 :(得分:0)

使用lambdas:

    ArrayList<Integer> numbers = new ArrayList<>();

    while (sc.hasNextInt()) {
        int x = sc.nextInt();
        if (x > 0) {
            numbers.add(x);
        }
    }

    int sum = numbers.stream().map(i -> i * i).reduce((xx, yy) -> xx + yy).get();
    System.out.println(sum);