第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()吸收换行,再读真正的字符串。
三、实操代码案例 + 场景说明
场景:写一个登录验证小工具,让用户输入用户名和年龄,并输出欢迎信息。
importjava.util.Scanner;publicclassInputOutputDemo{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入用户名(可含空格):");Stringname=scanner.nextLine();// 使用nextLine获取整行System.out.print("请输入年龄:");intage=scanner.nextInt();// 读取数字,换行符留在缓冲区// 吸收换行符(重要!)scanner.nextLine();// 消耗掉数字后面的换行System.out.print("请输入城市:");Stringcity=scanner.nextLine();// 格式化输出System.out.printf("用户:%s,年龄:%d,城市:%s%n",name,age,city);scanner.close();}}演示错误写法(不吸收换行):
Scannersc=newScanner(System.in);System.out.print("数字:");intnum=sc.nextInt();System.out.print("字符串:");Stringstr=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输出后换行,
Q2:next()和nextLine()的区别?
next()以空格/换行为分隔符,不读取空格;nextLine()读取整行直到换行,包含空格。
Q3:如何读取控制台密码(不显示输入)?
使用
Console类:Console console = System.console(); char[] pwd = console.readPassword();注意System.console()在IDE中可能为null。
六、练习题
- 编程:写一个程序,从控制台输入圆的半径(浮点数),输出周长和面积(保留两位小数)。
- 陷阱修复:现有代码
scanner.nextInt(); String s = scanner.nextLine();为什么s可能是空?怎么改? - 动手:用
printf实现一个表格输出,对齐两列数据(使用%-10s和%10d)。
📊 你的学习进度
- 当前:第11篇 / 共44篇 ·第二阶段:核心语法与面向对象(第5~20篇)
- ✅ 已完成:第1~10篇
- 📖 正在学:第11篇
- ⏳ 待学习:第12~44篇
👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇
💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!
👉 下一篇预告
《Java对象、类、抽象类、构造函数》
内容简介:类与对象的关系、构造方法的重载、this关键字、抽象类的定义与使用场景。
💡 学完这篇,你将掌握面向对象编程的基础语法,能独立设计类和对象。
📌《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!