我试图读取用户在同一行上输入的无限数量的数字(用空格分隔)并打印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循环。
由于
答案 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);