本节学习目标
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()直接读到空字符串。 解决办法:
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. 综合实战:猜数字游戏
游戏规则:
随机数类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();
}
}
📝本篇核心考点总结
- nextInt()、nextFloat():读取数字,不会吃掉末尾回车换行;
- nextLine()读取一整行(包含空格),容易读到残留空行。
面试小问答 Q:sc.nextInt()之后调用sc.nextLine()为什么直接读到空字符串? A:nextInt()只读取数字,输入敲下的回车\\n留在缓冲区;nextLine()读到这个换行直接返回空字符串。需要额外调用一次sc.nextLine()消费换行。


