我是Java的新手,所以我的知识非常有限。我一直试图在这段代码中找到问题。
import java.util.Scanner;
public class avgFinder {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Input numbers to average. Separate by a space.");
String nums = scan.next();
String[] parseNums = nums.split("[ ]");
double sum = 0;
int cnt = 0;
for (int a=0; a<=parseNums.length-1; a++) {
sum += Double.parseDouble(parseNums[a]);
cnt++;
}
double mean = sum/cnt;
System.out.println("Mean: " + mean);
}
}
但是当我输入一组数字时,只打印第一个数字而不是实际的平均值。例如:
Input numbers to average. Separate by a space.
1 2 3
Mean: 1.0
另一件事是如果我用nums.split("[ ]")
替换nums.split("[,]")
并在输出中的数字之间加上逗号而不是空格,它实际上输出均值。我更喜欢空间,它看起来更干净。为什么会这样?
答案 0 :(得分:3)
试试这个
使用nextLine()
代替next()
nextLine返回完整的文本行,而next返回只有一个单词
也可以使用nums.split(" ");
import java.util.Scanner;
public class avgFinder {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Input numbers to average. Separate by a space.");
String nums = scan.nextLine();
String[] parseNums = nums.split(" ");
double sum = 0;
int cnt = 0;
for (int a=0; a<=parseNums.length-1; a++) {
sum += Double.parseDouble(parseNums[a]);
cnt++;
}
double mean = sum/cnt;
System.out.println("Mean: " + mean);
}
}
答案 1 :(得分:1)
调用Scanner.next()
将返回空格前一行中的下一个元素,因此您只能获得输入中的第一个数字。使用Scanner.nextLine()
将返回该行的所有值。
答案 2 :(得分:0)
Scanner.next()返回下一个单词。默认情况下,单词由空格分隔。因此,当您调用Scanner.next()时,您的扫描仪会读取第一个数字的数字,点击一个空格,并说“好”,这就是单词的结尾。是时候返回结果&#34;而你最终得到的第一个数字。
当你用逗号替换空格时它的工作原理:没有任何空格,扫描器在到达换行符之前不会找到空格,所以它返回整行。
Scanner.nextLine()返回整行,而不只是一个单词(直到它到达换行符为止),所以我建议改用它。