Scanner例题讲解
题:输入多个平均数,求其总和与平均数;每输入一个数用回车确认,通过输入非数字来结束输入并输出执行结果
public class Demo05 {
//输入多个平均数,求其总和与平均数;每输入一个数用回车确认,
// 通过输入非数字来结束输入并输出执行结果
public static void main(String[] args){
double sum=0; //和
int m=0; //个数
Scanner scanner = new Scanner(System.in);
//通过循环判断是否还有输入,并对每一次进行求和与计数
while(scanner.hasNextDouble()){
//用x收集数据
double x=scanner.nextDouble();
m++; //m=m+1
sum=sum+x;
}
System.out.println(m + "个数的和为:" + sum);
System.out.println(m + "个数的平均值为:" + (sum / m));
scanner.close(); //别忘了
}
}
scanner.hasNextDouble:检测输入的值是否符合double类型,符合才会转化,若不符合double则结束输入(不能输入了)。输入的各个数据可以用空格或enter隔开。
重点:
-
scanner.nextdouble只能读取一个double,如:
public class test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double i=scanner.nextDouble();
System.out.println(i);
}
}//输入多个double以空格隔开,只会读取第一个
-
接收数据对象放在循环外还是循环内的问题,例
public class Demo05 {
//输入多个平均数,求其总和与平均数;每输入一个数用回车确认,
// 通过输入非数字来结束输入并输出执行结果
public static void main(String[] args){
double sum=0; //和
int m=0; //个数
Scanner scanner = new Scanner(System.in);
//通过循环判断是否还有输入,并对每一次进行求和与计数
double x=scanner.nextDouble();
while(scanner.hasNextDouble()){
//用x收集数据
//double x=scanner.nextDouble();
m++; //m=m+1
sum=sum+x;
}
System.out.println(m + "个数的和为:" + sum);
System.out.println(m + "个数的平均值为:" + (sum / m));
scanner.close(); //别忘了
}
}x的变量定义放在while里为正解,while循环一次x就定义一次。但是放在while外面时,.nextdouble只会读取一个即第一个double数据,当输入3.14 2.5 时,发现无法停止输入。因为x一直为3.14,nextdouble是对2.5进行判断,是符合double类型的,相当于没有检测到结束符,所以要求一直输入,while一直为true一直运行循环里;
当输入3.14 asd时,x为3.14,nextdouble检测的是asd,为非double数据,相当于结束符,且while条件为false,结束循环。