Scanner类简介

java.util.Scanner是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,

首先要导入包 import java.util.Scanner;

Scanner类的用法🍬

使用步骤

导包---创建---使用

  • 用于获取用户的输入,使用前需要导入:import java.util.Scanner
  • 使用前需要先实例化一个对象,并且与标准输入流System.in关联

    1. Scanner sc = new.Scanner(System.in);
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串跟数字,在读取前我们一般需要使用hasNext()与hasNextline()判断是否还有输入的数据

  • 调用Scanner类对象sc的方法从输入流中获取你需要的输入

    当创建了一个Scanner类对象之后,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给对象sc,若要获取需要的内容,调用sc的方法即可

  • 属于IO流的类如果不关闭会一直占用资源,所以在用完后要加上:sc.close();

    1. public class Demo02 {
    2. public static void main(String[] args) {
    3. //System.in从键盘进行输入
    4. Scanner sc = new Scanner(System.in);
    5. System.out.println("请输入数据");
    6. ///判断是否输入字符串
    7. if(sc.hasNext()){
    8. //获取键盘输入的字符串
    9. String str = sc.next();
    10. System.out.println("输入的字符串是:"+ str);
    11. }
    12. }
    13. //用完要关闭
    14. scanner.close();
    15. }

    常用方法🌼

    nextInt()

    只读取数值,读取完后\n没有读取并且光标放在本行

    1. Scanner sc=new Scanner(System.in);
    2. int i = sc.nextInt();

nextDouble()

只读取小数,否则报错

  1. Scanner sc=new Scanner(System.in);
  2. Double i = sc.nextDouble();

  1. public class Demo03_Scanner {
  2. public static void main(String[] args) {
  3. Scanner scanner = new Scanner(System.in);
  4. //从键盘接收数据
  5. int i = 0;
  6. float f = 0.0f;
  7. System.out.println("请输入整数: ");
  8. if (scanner.hasNextInt()) {
  9. i = scanner.nextInt();
  10. System.out.println("整数数据: " + i);
  11. } else {
  12. System.out.println("输入的不是整数数据! ");
  13. }
  14. System.out.println("请输入小数: ");
  15. if (scanner.hasNextFloat()) {
  16. f = scanner.nextFloat();
  17. System.out.println("小数数据: " + f);
  18. } else {
  19. System.out.println("输入的不是小数数据! ");
  20. }
  21. scanner.close();
  22. }
  23. }

同理nextByte()nextFloat(),nextLong(),nextShot(),当某个方法读取的数字超过自身范围,则会报错

next()

  • 读到有效数字后才可以结束输出,否则会一直占用资源。一个next只接受一次
  • next()会自动去掉有效输入字符之前的空格
  • 有效输入字符之后的空格为结束符或分隔符
  • 不能接收空格

  1. public class Demo01{
  2. public static void main(String[] args) {
  3. //创建一个扫描器对象,用于接受键盘数据
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.println("使用next方式接受:");
  6. //判断用户有没有输入字符串
  7. if(scanner.hasNext()){
  8. //使用next方式接受
  9. String str = scanner.next();
  10. System.out.println("输出的内容为:"+str);
  11. }
  12. //凡是输入IO流的类如果不关闭会一直占用资源
  13. scanner.close();
  14. }
  15. }

image.png

输出的结果只有hello,因为使用next()接受,而hello后是空格在接world,所以输出的结果是hello,next()是以空格为结束符

nextLine()

  • 以回车为结束符
  • 可以接受空格

  1. public class Demo02{
  2. public static void main(String[] args) {
  3. //创建一个扫描器对象,用于接受键盘数据
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.println("使用nextLine方式接受:");
  6. //判断用户有没有输入字符串
  7. if(scanner.hasNext()){
  8. //使用next方式接受
  9. String str = scanner.nextLine();
  10. System.out.println("输出的内容为:"+str);
  11. }
  12. //凡是输入IO流的类如果不关闭会一直占用资源
  13. scanner.close();
  14. }
  15. }

image.png

输出的结果只有hello world,因为使用nextLine()接受,nextLine()是以回车键为结束符,会输出回车之前所有的字符

以上可以这样写

  1. public class Demo03 {
  2. public static void main(String[] args) {
  3. //创建一个扫描器对象,用于接受键盘数据
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.println("使用nextLine方式接受:");
  6. //使用next方式接受
  7. String str = scanner.nextLine();
  8. System.out.println("输出的内容为:"+str);
  9. scanner.close();
  10. }
  11. }

📝键盘输入2个数求和

  1. public class Demo01 {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. System.out.println("请输入第一个数字");
  5. int num1 = sc.nextInt();
  6. System.out.println("请输入第二个数字");
  7. int num2 = sc.nextInt();
  8. int result = num1 + num2;
  9. System.out.println("两个数字的和:" +result);
  10. }
  11. }

📝键盘输入3个int数,求最大值

  1. public class Demo03 {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. System.out.println("请输入第一个数");
  5. int a = sc.nextInt();
  6. System.out.println("请输入第二个数");
  7. int b = sc.nextInt();
  8. System.out.println("请输入第三个数");
  9. int c = sc.nextInt();
  10. int num1 = a > b ? a : b;
  11. int max = num1 > c ? num1 :c;
  12. System.out.println("三个数的最大值:"+max);
  13. }
  14. }

匿名对象

创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用场景非常有限。

  • 匿名对象没有变量名的对象

格式:

  1. new 类名(参数列表);
  2. egnew Scanner(System.in);

应用场景:

  • 创建匿名对象直接调用方法,没有变量名

    1. new Scanner(System.in).nextInt();
  • 一旦调用两次方法,就是创建了两个对象,造成浪费

    1. new Scanner(System.in).nextInt();
    2. new Scanner(System.in).nextInt();

    一个匿名对象,只能使用一次

  • 匿名对象可以作为方法的参数和返回值

    1. 做为参数

如何查看底层代码

  • 按住command点击关键字,进入类的定义
  • 点击structure,查看类所有的方法

第5章:Scanner&Random - 图3

Random

  • Random类用来生成水机数字

三个步骤


1、导包
import java.util.Random;

2、创建
Random r = new Random(); 小括号当中留空即可

3、使用
int num = r.nextInt();,获取一个随机的int数字(范围是int所有返回,有正负2种)

  1. public class Demo01Random {
  2. public static void main(String[] args) {
  3. Random r = new Random();
  4. int num = r.nextInt();
  5. System.out.println("随机数是:"+ num);
  6. }
  7. }

int num = r.nextInt(3); ,获取一个随机的int数字(参数代表范围,左闭右开区间),也就是0~2

  1. public class Demo03Random {
  2. public static void main(String[] args) {
  3. Random r = new Random();
  4. for (int i = 0; i < 100; i++) {
  5. int num = r.nextInt(3);
  6. System.out.println(num);
  7. }
  8. }
  9. }


猜数字小游戏

  1. import java.util.Random;
  2. import java.util.Scanner;
  3. public class Demo04RandGame {
  4. public static void main(String[] args) {
  5. Random r = new Random();
  6. int randomNem =r.nextInt(100)+1; //1~100
  7. Scanner sc = new Scanner(System.in);
  8. while (true){
  9. System.out.println("请输入你猜测的数字:");
  10. int guessNum = sc.nextInt();//键盘输入猜测的数字
  11. if(guessNum > randomNem){
  12. System.out.println("太大了,请重试");
  13. }else if(guessNum < randomNem){
  14. System.out.println("太小了,请重试");
  15. }else {
  16. System.out.println("恭喜你,猜中了");
  17. break;
  18. }
  19. }
  20. System.out.println("游戏结果");
  21. }
  22. }

[

](https://blog.csdn.net/m0_37381646/article/details/81456067)