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()清空缓冲区,记得用完要关闭!

相关推荐
BBB努力学习程序设计2 小时前
Java面向对象编程:封装、继承与多态深度解析
java
Lucky_Turtle2 小时前
【Springboot】解决PageHelper在实体转Vo下出现total数据问题
java·spring boot·后端
Mr.朱鹏2 小时前
大模型入门学习路径(Java开发者版)下
java·python·学习·微服务·langchain·大模型·llm
期待のcode2 小时前
验证码实现
java·vue.js
老华带你飞2 小时前
志愿者服务管理|基于springboot 志愿者服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
汤姆yu2 小时前
基于springboot的宠物服务管理系统
java·spring boot·后端
鹿角片ljp2 小时前
智能家居控制系统Java实现
java·开发语言·智能家居
猿饵块3 小时前
python--锁
java·jvm·python
Charlie_Byte3 小时前
用 MurmurHash + Base62 生成短链接
java·后端