JAVA中输入后关闭 javascanner怎么结束输入_System

输入多个数字。求出总和与平均数,每输入一个数字使用回车确认,输入的如果是非数字结束并执行结果。

输入---scanner

1.特点

  • 使用scanner是得用户输入内容。
  • scanner 是在Java05之后的新特性。
  • 需要定义

2.用法

  • 定义:创建一个扫描对象,并且封装成scanner
Scanner scanner = new Scanner(System.in);
  • 接收:使用next接收
String str = scanner.next();

3.接收方法的特点

01使用next接收

  • 以空格当作分隔符或结束符
  • 当遇到空格后默认结束不会执行后续的内容
  • 读取到有效字符才可以结束输入
  • 不能得到带空格的字符串

02使用nextLine接收

  • 一回车当作结束符,没按回车之前会输出所有内容

4.注意!!!

  • 由于scanner是基于I/O流的类型,所以最后需要关闭否则会占用内存消耗
scanner.color();

5.使用scanner判断类型

day02完成

01hasNext使用(判断类型)

  • hasNext(); 使用来判断类型的,可以在后面添加类型名可以使得程序精准确定到类型。比如:hasNextInt();、hasNextDouble();....
  • 一般来说我们把它配合条件控制中去。比如:if、while....
if (hasNextInt()){ // 如果判断的是整数就...
    pass
}

02next扩展

  • 那么聪明的你看来已经是想到了next也是可以添加定位精准类型的。
  • 如果用它们两个组合就可以写出一个小算法啦
  • 题目在这快去试试:输入多个数字。求出总和与平均数,每输入一个数字使用回车确认,输入的如果是非数字结束并执行结果。
  • 这里我将搞两个版本,一个是师父的答案一个是我的答案。
  • 标准答案
  1. 这里的意思其实就是sum = sum + save,这里save是0如果新来一个数是1的话,那么sum的整体也就是1,那么再次执行到这里的时候输入的值是2的情况下 此时的sum = save + sum也就是 sum = 2 + 1这个意思啦。
Scanner scanner = new Scanner(System.in);

        double sum = 0.0; // 提前定义相加需要保存的值
        int i = 0; // 计次用的值,后面也可以用来记平均数

        while (scanner.hasNextDouble()){ // 使用while循环来判断只要不是括号中的条件就一直执行
            double save = scanner.nextDouble(); // 使用save来保存输入的值
            sum += save; // 1
            i++;
            System.out.println("输入了第" + i + "个数据,当前sum=" + sum);
        }

        System.out.println("共" + i + "个数;\n和为"+sum + ";\n平均数为" + (sum / i));
        scanner.close();
  • 我的乱七八糟的答案(虽然答对了)
int i = 1; // 计次使用的值

        float save = 0.0f; // 保存输入使用的预备值
        float date = 0.0f; // 最终的结果使用的预备值
        float num = 0.0f; // 最后取平均数使用的预备值

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入第"+i+"次输入的数字:"); // 写成这样的原因:由于我想让其出现的结果是先出提示后输入
        while (scanner.hasNextInt() || scanner.hasNextFloat()){ // 写成这样的原因:认为Java是强类型语言如果不加Int判断的话害怕判断不出来
            System.out.println("请输入第"+(i+1)+"次输入的数字:"); // 写成这样的原因:显示的计数由于上面的print导致会出现两次同样的数字所以再此+1
            save = scanner.nextFloat(); // save保存输入值
            date = save + date; // date相加
            if (!(scanner.hasNextInt() || scanner.hasNextFloat())){ // 写出这样的原因:如果发现整数和小数以外的就在此停止,如果不提前停止会出现计次i多加的情况。
                break;
            }
            i++;
        }
        num = date / i;
        System.out.println("总数是:"+date+"平均数是:"+num);
        scanner.close();
  • 总结:最后我发现我的错误在哪里了,师父他十分清楚的知道Java的一些特性所以他可以反过来利用特性,而我没有好好利用特性一股脑的坚持自己的想法和死脑筋一样。