Java Scanner完全指南:让程序与用户对话

在Java编程中,Scanner就像程序的"耳朵",让程序能够听到用户的声音,实现真正的交互式程序。今天,我们学习这个让Java程序"活"起来的关键工具。

一、Scanner基础:创建与使用

1.1 导入和创建Scanner

java 复制代码
import java.util.Scanner;  // 第一步:导入

public class ScannerBasic {
    public static void main(String[] args) {
        // 第二步:创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        
        // 第三步:使用Scanner
        System.out.print("请输入你的名字:");
        String name = scanner.nextLine();
        System.out.println("你好," + name + "!");
        
        // 第四步:关闭Scanner(重要!)
        scanner.close();
    }
}

1.2 读取不同类型的数据

java 复制代码
import java.util.Scanner;

public class ReadDifferentTypes {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取整数
        System.out.print("请输入年龄:");
        int age = scanner.nextInt();
        
        // 读取小数
        System.out.print("请输入身高(米):");
        double height = scanner.nextDouble();
        
        // 读取字符串
        scanner.nextLine();  // 重要:先清空缓冲区
        System.out.print("请输入城市:");
        String city = scanner.nextLine();
        
        System.out.println("年龄:" + age);
        System.out.println("身高:" + height);
        System.out.println("城市:" + city);
        
        scanner.close();
    }
}

二、最重要的两个方法:next() vs nextLine()

2.1 关键区别示例

java 复制代码
import java.util.Scanner;

public class NextVsNextLine {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // ❌ 错误示例
        System.out.print("请输入年龄:");
        int age = scanner.nextInt();
        
        System.out.print("请输入姓名:");
        String name = scanner.nextLine();  // 这里会出问题!
        System.out.println("你好," + name);
        
        // ✅ 正确做法
        System.out.print("\n请重新输入年龄:");
        int age2 = scanner.nextInt();
        scanner.nextLine();  // 关键:清空缓冲区
        
        System.out.print("请重新输入姓名:");
        String name2 = scanner.nextLine();
        System.out.println("这次对了,你好," + name2);
        
        scanner.close();
    }
}

2.2 记忆技巧

  • next() :读取一个"单词"(遇到空格就停止)
  • nextLine() :读取整行(包括空格)
  • 重要 :使用nextInt()、nextDouble()等后,要用scanner.nextLine()清空缓冲区

三、实战应用:学生成绩计算器

java 复制代码
import java.util.Scanner;

public class StudentGradeCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("=== 学生成绩计算器 ===\n");
        
        // 输入学生信息
        System.out.print("请输入学生姓名:");
        String name = scanner.nextLine();
        
        System.out.print("请输入语文成绩:");
        int chinese = scanner.nextInt();
        
        System.out.print("请输入数学成绩:");
        int math = scanner.nextInt();
        
        System.out.print("请输入英语成绩:");
        int english = scanner.nextInt();
        
        scanner.nextLine();  // 清空缓冲区
        
        // 计算
        int total = chinese + math + english;
        double average = total / 3.0;
        
        // 输出结果
        System.out.println("\n=== 成绩报告 ===");
        System.out.println("姓名:" + name);
        System.out.println("总分:" + total);
        System.out.printf("平均分:%.2f\n", average);
        
        // 判断等级
        if (average >= 90) {
            System.out.println("等级:优秀");
        } else if (average >= 80) {
            System.out.println("等级:良好");
        } else if (average >= 60) {
            System.out.println("等级:及格");
        } else {
            System.out.println("等级:不及格");
        }
        
        scanner.close();
    }
}

四、错误处理和输入验证

java 复制代码
import java.util.Scanner;

public class InputValidation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 验证年龄输入(必须是1-100之间的整数)
        int age = 0;
        boolean valid = false;
        
        while (!valid) {
            System.out.print("请输入年龄(1-100):");
            
            if (scanner.hasNextInt()) {
                age = scanner.nextInt();
                if (age >= 1 && age <= 100) {
                    valid = true;
                } else {
                    System.out.println("错误:年龄必须在1-100之间!");
                }
            } else {
                System.out.println("错误:请输入整数!");
                scanner.next();  // 清除错误的输入
            }
        }
        
        scanner.nextLine();  // 清空缓冲区
        System.out.println("年龄验证通过:" + age);
        
        scanner.close();
    }
}

五、最重要知识点总结

1. 核心三步骤

java 复制代码
// 1. 导入
import java.util.Scanner;

// 2. 创建
Scanner scanner = new Scanner(System.in);

// 3. 使用
String input = scanner.nextLine();

// 4. 关闭(不要忘!)
scanner.close();

2. 黄金法则

  • 混合使用nextXXX()和nextLine()时 :先用scanner.nextLine()清空缓冲区
  • 输入验证 :用hasNextInt()hasNextDouble()检查输入类型
  • 关闭Scanner:用完一定要关闭,释放资源

3. 一句话记住

Scanner是Java程序的"麦克风"------nextXXX()接收用户输入,nextLine()清空缓冲区,记得用完要关闭!

相关推荐
NE_STOP13 小时前
Docker--Docker Swarm集群
java
两年半的个人练习生^_^13 小时前
JMM 进阶:彻底理解 CAS 实现原理
java·开发语言
wuminyu13 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++
W_LuYi18514 小时前
手撸极简zkEVM验证器:RISC-V电路实践
java·risc-v
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题 第102题】【并发篇】第2题:volatile 能否保证线程安全?
java·安全·面试
KobeSacre14 小时前
JUC 概述
java·开发语言
小bo波14 小时前
形式化方法 × UML
java·软件工程·uml·面向对象·形式化方法·tla+
就叫_这个吧15 小时前
IDEA中Javaweb项目创建+servlet,实现简单的信息录入获取
java·servlet·intellij-idea·web
程序员Jelena15 小时前
接口调用的代码实现:从入门到实战
java
代码钢琴师15 小时前
Throttle4j 快速上手教程
java