import java.util.*;
public class Example2_4{
public static void main(String args[]){
Scanner reader=new Scanner(System.in);
double sum=0;
int m=0;
while(reader.hasNextDouble()){
double x=reader.nextDouble();
m=m+1;
sum=sum+x;
}
System.out.printf("%d个数的和为%f\n",m,sum);
System.out.printf("%d个数的平均数是%f\n",m,sum/m);
}
}程序代码如上,现在的问题就是,为什么while循环的判断里,reader.hasNextDouble()对直接输入一个回车的返回值还是true?
或者有什么判断方法能在直接输入一个回车后能停止while循环,否则继续循环?

解决方案 »

  1.   

    回车是一个空白字符,并不表示输入流已经结束,所以 Scanner 会继续等待直到获得下一个非空白字符。
      

  2.   

    要实现你这种的,就不能使用Scanner,要自己读取输入流,自己判断是不是仅仅输入了会车.
      

  3.   

    不知道谁告诉你用 Scanner 的,我还以为必须用这个类。这很简单:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;public class SumAndAverage {    public static void main(String[] args) throws Exception {
            double sum = 0;
            int count = 0;        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String line;
            while (!(line = reader.readLine()).equals("")) {
                sum += Double.parseDouble(line);
                count++;
            }        System.out.printf("%d 个数字的和为 %f\n", count, sum);
            System.out.printf("%d 个数字的平均值为 %f", count, sum / count);
        }
    }