本节学习目标
- 熟练掌握控制台输出三种方式
- 熟练使用
Scanner完成键盘输入 - 掌握 OJ 常见多组循环输入
- 综合练习:猜数字小游戏
1. 控制台输出
Java 控制台输出三个核心方法
System.out.println(msg); //输出内容,自带换行
System.out.print(msg); //输出内容,**不换行**
System.out.printf(format,参数); //格式化输出,用法类似C语言printf
代码示例
int x = 10;
System.out.println("hello world");
System.out.printf("x = %d\n", x);
常用格式化转换符
表格
| 转换符 | 含义 | 示例 |
|---|---|---|
%d | 十进制整数 | printf("%d",100) →100 |
%x | 十六进制整数 | printf("%x",100) →64 |
%o | 八进制整数 | printf("%o",100) →144 |
%f | 浮点数 | printf("%.2f",3.1415) →3.14 |
%e | 科学计数法输出浮点数 | printf("%e",100.0) →1.000000e+02 |
%s | 字符串 | printf("%s","Java") →Java |
%c | 字符 | printf("%c",'A') →A |
%b | 布尔值 | printf("%b",true) →true |
%% | 输出百分号 | printf("%.2f%%", 0.29) →0.29% |
💡不用死记表格,写代码需要的时候查阅文档即可。
2. 键盘输入 Scanner
使用 Scanner 需要导包:
import java.util.Scanner;
2.1 基础输入示例
import java.util.Scanner;
public class TestInput {
public static void main(String[] args) {
// 创建Scanner对象,从标准键盘读取输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine(); //读取一整行字符串
System.out.println("请输入你的年龄:");
int age = sc.nextInt(); //读取int整数
System.out.println("请输入你的工资:");
float salary = sc.nextFloat(); //读取float浮点数
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); //用完记得关闭扫描器
}
}
⚠️经典坑:
nextInt()/nextFloat()之后接nextLine()nextInt()只会读取数字,会把回车换行符残留在输入缓冲区,后面的nextLine()直接读到空字符串。 解决办法:
- 数字读取完成后,调用一次
sc.nextLine();吃掉残留换行;- 或者全部使用
nextLine()读取字符串再做类型转换。
2.2 多组输入(OJ 刷题高频)
sc.hasNextInt():判断下一个输入是不是 int,有输入返回 true,没有输入结束循环。
import java.util.Scanner;
public class TestMultiInput {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int count = 0;
//不断读取整数,直到结束标记
while (sc.hasNextInt()) {
int tmp = sc.nextInt();
sum += tmp;
count++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + (double)sum / count);
sc.close();
}
}
结束输入标记:
- Windows CMD / IDEA 控制台:
Ctrl + Z- Linux / Mac 终端:
Ctrl + D这个写法是在线 OJ 平台多组测试用例的标准写法。
3. 综合实战:猜数字游戏
游戏规则:
- 系统随机生成 1‑100 之间整数;
- 用户循环输入猜测数字;
- 提示高了 / 低了;猜对输出提示,结束游戏。
随机数类
Random,导包:import java.util.Random;random.nextInt(100)→ 生成范围 [0,99],想要 1‑100 需要 + 1。
完整可运行代码:
import java.util.Random;
import java.util.Scanner;
public class GuessGame {
public static void main(String[] args) {
Random random = new Random();
Scanner sc = new Scanner(System.in);
//生成 [1,100]随机数字
int toGuess = random.nextInt(100) + 1;
//System.out.println("答案:" + toGuess); //调试打开看答案
while (true) {
System.out.println("请输入猜测数字(1‑100):");
int num = sc.nextInt();
if (num < toGuess) {
System.out.println("低了");
} else if (num > toGuess) {
System.out.println("高了");
} else {
System.out.println("猜对了!");
break; //猜对跳出死循环,游戏结束
}
}
sc.close();
}
}
📝本篇核心考点总结
- 输出:
println()带换行;print()不换行;printf()格式化输出,和 C 语法相似。 Scanner使用前需要import java.util.Scanner;,创建对象Scanner sc = new Scanner(System.in);,用完sc.close()关闭。- 方法区分:
nextInt()、nextFloat():读取数字,不会吃掉末尾回车换行;nextLine()读取一整行(包含空格),容易读到残留空行。
- OJ 多组输入模板:
while(sc.hasNextInt()){ ... };Windows 结束Ctrl+Z,Mac/Linux 结束Ctrl+D。 Random.nextInt(n)生成[0, n‑1]整数;要得到[1‑100]写nextInt(100)+1。
面试小问答 Q:
sc.nextInt()之后调用sc.nextLine()为什么直接读到空字符串? A:nextInt()只读取数字,输入敲下的回车\n留在缓冲区;nextLine()读到这个换行直接返回空字符串。需要额外调用一次sc.nextLine()消费换行。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/wuqingyigexiaoba/article/details/164884857




