当前位置: 代码迷 >> 综合 >> JavaSE 26 流程控制 → Scanner
  详细解决方案

JavaSE 26 流程控制 → Scanner

热度:100   发布时间:2023-11-24 14:17:57.0

5.1 用户交互Scanner


  • 用户交互Scanner
  • 顺序结构
  • 选择结构
  • 循环结构
  • break & continue
  • 练习

Scanner 的学习,是让我们 和 计算机 有基本的交互,比如说 “输入”“输出”,程序获取我们用户输入的东西,并且反馈输出给我们一些有用的信息。在C/C++中我们一般采用 scanf&printf 、 cin&cout。

Java5 引入 Scanner 类,为了 支持 最基本的 人机交互。

  • 语法格式:
Scanner s = new Scanner(System.in);
  • 通过Scanner 类的 next() 与 nextLine() 方法 是用来获取 输入的字符串的,在读取前 我们一般需要使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。

5.1.1 hasNext && next

import java.util.Scanner;public class 输入和输出 {
    public static void main(String[] args) {
    //创建一个扫描器对象,用于接收 键盘数据Scanner scanner = new Scanner(System.in);System.out.println("使用next方式接收:");//判断用户有没有 输入字符串if(scanner.hasNext()){
    //使用 nex 方式接收String str = scanner.next();System.out.println("输出的内容为:"+str);}//凡是属于 IO流 的类 如果不关闭,会一直占用资源,要养成好习惯,用完就关!scanner.close();//直接释放掉 就行。}
}

next() 遇到 空格 将会终止,不再读取字符串!
但是如果你不输入 有效地字符串,那么会一直让你输入下去,输入了有效字符串之后,再输入空格和回车才会被终止!
在这里插入图片描述


5.1.2 hasNextLine && nextLine

nextLine() 直接获取一行,不会遇到空格终止,会读取空格!

package Scanner;import java.util.Scanner;public class hasNextLineAndnextLine {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);System.out.println("hasNextLine接收:");if(scanner.hasNextLine()){
    String str = scanner.nextLine();System.out.println(str);}scanner.close();}
}

在这里插入图片描述


5.1.3 Scanner进阶用法

实际上 Scanner 扫描器 功能还是很强大的,它可以直接 判断和接收 准确类型的数据。

比如:nextInt() 只获取 整数
nextFloat() 只获取小数

package Scanner;import java.util.Scanner;public class 进阶方法 {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);int i = 0;float f = 0;System.out.println("请输入整数:");//来判断输入的是否是 整数if(scanner.hasNextInt()){
    i = scanner.nextInt();//如果是整数,那就获取 这个整数数据System.out.println("整数数据为:"+i);}else{
    String str = scanner.next();//如果不是整数,那也要把这个数据继续获取下来,否则下一个的 小数获取 还会从当前 IO流位置 进行!!!System.out.println("你输入的不是整数数据!");}System.out.println("请输入小数:");if(scanner.hasNextFloat()){
    f  = scanner.nextFloat();System.out.println("小数数据为:" + f);}else{
    System.out.println("你输入的不是小数数据!");}}
}

在这里插入图片描述
注意事项:IO流是从开头往下顺着来的,如果你不让光标位置移动,那么光标会一直停在那个位置,而对于我们新手而言,目前能让光标移动的方法就是获取/读取 输入的数据,获取一行,光标就会移动到下一行!!!

如果不让光标移动,会出现什么情况?
//String str = scanner.next();
//如果不是整数,那也要把这个数据继续获取下来,否则下一个的 小数获取 还会从当前 IO流位置 进行!!!
System.out.println(“你输入的不是整数数据!”);

我们在这里,不去进行读取数据,那么如果第一个数据不是整数,光标就会一直在开头的位置,那么小数的读取就还会读取第一个数据!!!
在这里插入图片描述在这里插入图片描述
就会导致 这样的 情况 发生,所以 以后 出现这种情况,很明显 是因为 IO流的 光标位置 并没有 像我们 想的那样 进行移动或退回!!!


5.1.4 练习:sum && average

package Scanner;import java.util.Scanner;public class 练习 {
    public static void main(String[] args) {
    double sum = 0;int m = 0;int num1 = 0;double num2 = 0;Scanner scanner = new Scanner(System.in);System.out.println("请输入几个数:");while (true)//循环一直进行着,死循环,这样才能一直接收数据{
    if(scanner.hasNextInt())//可能是整数{
    num1 = scanner.nextInt();m++;sum+=num1;}else if(scanner.hasNextDouble()) {
    //也可能是小数num2 = scanner.nextDouble();m++;sum += num2;}else if(scanner.hasNext())//如果既不是整数,也不是小数,那就要判断是否是 字符串 break,如果是 则退出!{
    String str = scanner.next();if(str.equals("break")){
    System.out.println("已结束录入数据!");break;}}else{
    System.out.println("出现异常情况!请开发者处理!");}System.out.println("总数:"+sum);System.out.println("平均数:"+sum/m);scanner.close();//别忘了 释放掉哟 ~ ~ }
}

在这里插入图片描述

  相关解决方案