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

    •  
  • 相关阅读:
    九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)
    如何通过 API 获取 Cookie
    电脑D盘格式化会有什么影响?电脑D盘格式化了怎么恢复数据
    基于滤波反投影的图像重建算法matlab仿真,R-L滤波和S-L滤波
    前端技能树,面试复习—— 风中劲草:知识要点精讲精炼手册(二)
    【概念】make 与 configure
    夏日小风扇(.html实现)——小太阳给她带去凉爽
    专访HuggingFace CTO:开源崛起、创业故事和AI民主化丨智源独家
    mac 启动mysql Error: Failure while executing; `/bin/launchctl bootstrap gui/501
    计算机相关术语科普之什么叫网关(Gateway)
  • 原文地址:https://www.cnblogs.com/HomeFJ/p/16952436.html