输入多个数字。求出总和与平均数,每输入一个数字使用回车确认,输入的如果是非数字结束并执行结果。
输入---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也是可以添加定位精准类型的。
- 如果用它们两个组合就可以写出一个小算法啦
- 题目在这快去试试:输入多个数字。求出总和与平均数,每输入一个数字使用回车确认,输入的如果是非数字结束并执行结果。
- 这里我将搞两个版本,一个是师父的答案一个是我的答案。
- 标准答案
- 这里的意思其实就是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的一些特性所以他可以反过来利用特性,而我没有好好利用特性一股脑的坚持自己的想法和死脑筋一样。