• Scanner例题讲解


    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,结束循环。

    •  
  • 相关阅读:
    源码解析Synchronous Queue 这种特立独行的队列
    PY32F003F18点灯
    【前端性能】性能优化手段-高频面试题
    5种典型 API 攻击及预防建议
    nginx 安全配置
    Session会话追踪的实现机制
    力扣刷题 day49:10-19
    【python】OpenCV—Rectangle, Circle, Selective Search(1.2)
    小样本学习(Few-shot Learning)
    一台机器下,多个Java版本的粗放与精细管理
  • 原文地址:https://www.cnblogs.com/HomeFJ/p/16952436.html