Java学习08:Scanner用户交互

Scanner对象

  • 用于实现程序与人的交互,可以获取用户的输入

通过Scanner实现:需要java.util.Scanner

Scanner scanner = new Scanner(system.in);

//输入的时候,只需要输入:
new Scanner(system.in);
//然后alt+回车,引入局部变量。

通过Scanner类的next() 与nextLine()方法获取输入的字符串,

在读取前我们一般需要使用hasNext() 与hasNextLine()判断是否还有输入的数据。

凡是属于IO流(输入输出)的类如果不关闭会一直占用资源,要养成好习惯用完就关掉。使用 scanner.close() 即可。

next()、hasNext()

简单写一个输入例

package com.nekodream.Scanner;

import java.util.Scanner;

public class Scanner1 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");

        //判断用户有没有输入字符串
        if(scanner.hasNext()){//如果用户还有输入
            String str = scanner.next();//接收用户的输入
            System.out.println("输入的内容为:" + str);
        }


        scanner.close();//关掉关掉,一定要关掉
    }
}

注意:if那一行(判断用户是否输入)是可以去掉的。

此方法的特点是:

  • 在有效字符之前的空白,会自动去掉。
  • 遇到有效字符后面第一个空格会当做分隔符/结束符。
  • 不能得到带有空格的字符串!!!!

所以如果输入了Neko Dream,最后sout出来的只有一个Neko。

nextLine()、hasNextLine()

还是上面那个输入例

    package com.nekodream.Scanner;

import java.util.Scanner;

public class Scanner02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");

        if(scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("输出的内容为:" + str);
        }

        scanner.close();
    }
}

此方法的特点:

  • 以回车为结束符
  • 可以读取空格!! 所以无论输入什么东西他都能复述出来。

注意:if那一行(判断用户是否输入)是可以去掉的。

拓展:指定数据类型的输入

  • 可以用nextInt、nextDouble等方法让他输入指定类型的字符。
  • 可以用hasNextInt、hasNextDouble等方法判断用户是否输入了指定类型的字符。

举个例子:判断输入的是否为指定数据类型的数据。

package com.nekodream.Scanner;


import java.util.Scanner;

public class Scanner4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //从键盘输入数据
        int i = 0;
        float f = 0.0f;

        System.out.println("请输入整数:");

        if(scanner.hasNextInt()){//是否还有下一个整数???
            i = scanner.nextInt();
            System.out.println("整数数据:" + i);

        }else{
            System.out.println("你输入的不是整数数据!");
        }

        System.out.println("请输入小数:");

        if(scanner.hasNextFloat()){//是否还有下一个小数???
            f = scanner.nextFloat();
            System.out.println("小数数据:" + f);

        }else{
            System.out.println("你输入的不是小数数据!");
        }


        scanner.close();
    }
}

再有一个例子:我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

package com.nekodream.Scanner;

import java.util.Scanner;


public class Scanner5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        double sum = 0;
        int cnt= 0;
        System.out.println("请输入若干数字,输入非数字以停止。");
        //通过循环判断是否有输入,并在里面对每一次进行求和与统计。
        while(scanner.hasNextDouble()){
            double x = scanner.nextDouble();//输入scanner.nextDouble();后alt+回车引入局部变量。
            cnt++;
            sum += x;
            System.out.println("你输入了第" + cnt + "个数,当前和为:" + sum);

        }
        System.out.println(cnt +"个数的和为:" +sum);
        System.out.println(cnt +"个数的平均数为:" + (sum/cnt));
        scanner.close();
    }
}

posted @ 2022-04-06 19:59  晓梦ペ  阅读(46)  评论(0)    收藏  举报