我正在尝试复制这个确切的代码,用Double
(而不是double
)替换每个Integer实例,但每次尝试时都会出现类型不匹配错误...任何人都可以帮忙?
import java.util.ArrayList;
import java.util.Scanner;
public class Mean {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
Integer input = in.nextInt();
numbers.add(input);
}
in.close();
Integer sum = 0;
for (Integer element : numbers) {
sum += element;
}
System.out.println(sum / numbers.size());
}
}
答案 0 :(得分:3)
您需要更改Scanner
正在寻找的内容,我还建议您使用界面List
和钻石运营商。最后,在Scanner
上关闭System.in
总是一个坏主意。所以,
public static void main(String[] args) {
List<Double> numbers = new ArrayList<>(); // <-- List and Diamond Operator
Scanner in = new Scanner(System.in);
while (in.hasNextDouble()) { // <-- hasNextDouble()
Double input = in.nextDouble(); // <-- get the next double
numbers.add(input);
}
// in.close(); // <-- Wraps System.in, don't do this.
Double sum = 0.0; // <-- initialize as double
for (Double element : numbers) {
sum += element; // <-- add the values.
}
System.out.println(sum / numbers.size());
}
答案 1 :(得分:1)
只有一行导致问题,那就是
Double sum = 0;
这是因为文字0
被Java视为int
,可以自动将其设置为Integer
或加宽为double
,但不能两者都是Double
。
只需将声明更改为双字面值:
Double sum = 0d;
答案 2 :(得分:1)
我没有足够的代表评论艾略特的帖子。我刚刚在他的代码中添加了一个结束条件,这样我们就可以防止无限循环,一旦你输入“end”,输入结束的过程就会计算结果。
package Mean;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Mean {
public static void main(String[] args) {
List<Double> numbers = new ArrayList<>(); // <-- List and Diamond Operator
Scanner in = new Scanner(System.in);
while (in.hasNextDouble()) { // <-- hasNextDouble()
Double input = in.nextDouble(); // <-- get the next double
numbers.add(input);
//if (numbers.equals("end")) (revision : unnecessary, type any non double to stop loop)
// break;
}
}
// in.close(); // <-- Wraps System.in, don't do this.
Double sum = 0.0; // <-- initialize as double
for (Double element : numbers) {
sum += element; // <-- add the values.
}
System.out.println(sum / numbers.size());
}
}