第11篇:Java控制台输入输出语句

📌 系列导航《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第10篇:Java操作符有哪些? |
➡️ 下一篇:第12篇:Java对象、类、抽象类、构造函数

一、核心知识点

  • System.out输出:print()println()printf()(格式化)
  • Scanner输入:创建、常用方法、关闭
  • nextLine()nextInt()等方法的陷阱
  • 格式化输出:%d%s%f%n
  • 控制台交互程序的标准写法

二、通俗讲解(1分钟开心学)

1. 输出到控制台

  • System.out.print("不换行"):输出后光标留在本行末尾。
  • System.out.println("换行"):输出后光标移到下一行(最常用)。
  • System.out.printf("格式", 参数):类似C语言,可以控制小数位数、宽度等。

2. 从控制台输入

使用Scanner类(需要import java.util.Scanner;):

  • next():读取字符串,以空格/换行作为分隔符(不能读取带空格的字符串)。
  • nextLine():读取一整行,直到换行(能读取空格)。
  • nextInt()nextDouble():读取对应类型的数字。

3. 经典陷阱

nextInt()不会消耗换行符!如果在nextInt()之后立即调用nextLine()nextLine()会读取到残留的换行符,直接返回空字符串。

生活类比
nextInt()就像你只拿走了盘子里的包子,但盘子上留下的油渍(换行符)还在。下一个nextLine()本来想拿一碗汤,结果只拿到油渍。

解决:在nextInt()后加一个scanner.nextLine()吸收换行,再读真正的字符串。

三、实操代码案例 + 场景说明

场景:写一个登录验证小工具,让用户输入用户名和年龄,并输出欢迎信息。

import java.util.Scanner;

public class InputOutputDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入用户名(可含空格):");
        String name = scanner.nextLine();   // 使用nextLine获取整行
        
        System.out.print("请输入年龄:");
        int age = scanner.nextInt();        // 读取数字,换行符留在缓冲区
        
        // 吸收换行符(重要!)
        scanner.nextLine();   // 消耗掉数字后面的换行
        
        System.out.print("请输入城市:");
        String city = scanner.nextLine();
        
        // 格式化输出
        System.out.printf("用户:%s,年龄:%d,城市:%s%n", name, age, city);
        
        scanner.close();
    }
}

演示错误写法(不吸收换行)

Scanner sc = new Scanner(System.in);
System.out.print("数字:");
int num = sc.nextInt();
System.out.print("字符串:");
String str = sc.nextLine();   // 直接读到了换行符,str为空字符串
System.out.println("str = [" + str + "]");

四、避坑要点

错误/误区 后果 正确做法
nextLine()放在nextInt()后面没额外调用 读不到想要的字符串 加一个scanner.nextLine()吸收换行
忘记import java.util.Scanner 编译错误 开头加上import
不关闭Scanner 资源泄漏(虽程序结束会释放) 用完后调用close()
next()读取带空格的姓名 只能读到第一个词 使用nextLine()
输入类型不匹配(如字符串给nextInt InputMismatchException 先判断hasNextInt()

五、面试高频考点

Q1:System.out.println()System.out.print()的区别?

println输出后换行,print不换行。

Q2:next()nextLine()的区别?

next()以空格/换行为分隔符,不读取空格;nextLine()读取整行直到换行,包含空格。

Q3:如何读取控制台密码(不显示输入)?

使用Console类:Console console = System.console(); char[] pwd = console.readPassword(); 注意System.console()在IDE中可能为null。

六、练习题

  1. 编程:写一个程序,从控制台输入圆的半径(浮点数),输出周长和面积(保留两位小数)。
  2. 陷阱修复:现有代码scanner.nextInt(); String s = scanner.nextLine();为什么s可能是空?怎么改?
  3. 动手:用printf实现一个表格输出,对齐两列数据(使用%-10s%10d)。

📊 你的学习进度

  • 当前:第11篇 / 共44篇 · 第二阶段:核心语法与面向对象(第5~20篇)
  • ✅ 已完成:第1~10篇
  • 📖 正在学:第11篇
  • ⏳ 待学习:第12~44篇

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


👉 下一篇预告

《Java对象、类、抽象类、构造函数》

内容简介:类与对象的关系、构造方法的重载、this关键字、抽象类的定义与使用场景。

💡 学完这篇,你将掌握面向对象编程的基础语法,能独立设计类和对象。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!

更多推荐