主题
Java流程控制与循环完全指南
目录
一、键盘录入Scanner
1.1 基本概念
Scanner是Java提供的一个类,用于通过键盘录入的形式将数据放到代码中参与运行。
1.2 使用步骤
java
// 1. 导包
import java.util.Scanner;
// 2. 创建对象
Scanner sc = new Scanner(System.in);
// 3. 调用方法录入数据
int data1 = sc.nextInt(); // 录入整数
String data2 = sc.next(); // 录入字符串1.3 常用方法对比
| 方法 | 说明 | 结束条件 |
|---|---|---|
next() | 录入字符串 | 遇到空格或回车结束 |
nextLine() | 录入字符串 | 遇到回车结束 |
nextInt() | 录入整数 | 遇到回车结束 |
1.4 代码示例
java
import java.util.Scanner;
public class Demo01Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
System.out.println(data1 + 1);
String data2 = sc.next();
System.out.println(data2 + 1);
}
}二、switch选择语句
2.1 基本格式
java
switch(变量) {
case 目标值1:
执行语句1;
break;
case 目标值2:
执行语句2;
break;
...
default:
执行语句n;
break;
}2.2 执行流程
- 用变量的值挨个和case后面的目标值做匹配
- 哪个case匹配上了,就走对应的执行语句
- 遇到break结束switch语句
- 如果所有case都没匹配上,走default语句
2.3 支持的数据类型
- byte、short、int、char
- 枚举类型
- String类型(Java 7+)
2.4 case穿透性
重要特性:如果没有break,代码会一直往下穿透执行,直到遇到break或switch结束。
java
// 利用case穿透性简化代码
switch (month) {
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
// ...
}2.5 Java新特性(Java 12+)
Java 12:switch表达式
java
// 多case合并
switch (month) {
case 12, 1, 2:
System.out.println("冬季");
break;
case 3, 4, 5:
System.out.println("春季");
break;
}
// 使用箭头语法(自动避免穿透)
switch (month) {
case 12, 1, 2 -> System.out.println("冬季");
case 3, 4, 5 -> System.out.println("春季");
case 6, 7, 8 -> System.out.println("夏季");
case 9, 10, 11 -> System.out.println("秋季");
default -> System.out.println("输入的月份有误");
}Java 13:yield关键字
java
// 使用yield返回值
String season = switch (month) {
case 12, 1, 2 -> {
yield "冬季";
}
case 3, 4, 5 -> {
yield "春季";
}
default -> {
yield "输入的月份有误";
}
};
System.out.println(season);三、if分支语句
3.1 if第一种格式
java
if (boolean表达式) {
执行语句;
}执行流程:先判断,如果是true,执行if后面大括号中的语句。
java
if (data == 100) {
System.out.println("输入的数据是100");
}3.2 if第二种格式
java
if (boolean表达式) {
执行语句1;
} else {
执行语句2;
}执行流程:如果boolean表达式为true,执行语句1;否则执行语句2。
示例:判断奇偶数
java
if (data % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}示例:求两个数的较大值
java
if (data1 > data2) {
System.out.println(data1);
} else {
System.out.println(data2);
}示例:判断闰年
java
// 闰年条件:能被4整除但不能被100整除,或者能被400整除
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println("闰年");
} else {
System.out.println("平年");
}3.3 if第三种格式
java
if (boolean表达式1) {
执行语句1;
} else if (boolean表达式2) {
执行语句2;
} else if (boolean表达式3) {
执行语句3;
} else {
执行语句n;
}执行流程:从上到下挨个判断,哪个条件为true就走对应的执行语句。
示例:星期判断
java
if (week == 1) {
System.out.println("星期一");
} else if (week == 2) {
System.out.println("星期二");
} else if (week == 3) {
System.out.println("星期三");
} else if (week == 4) {
System.out.println("星期四");
} else if (week == 5) {
System.out.println("星期五");
} else if (week == 6) {
System.out.println("星期六");
} else if (week == 7) {
System.out.println("星期日");
} else {
System.out.println("输入的数字有误");
}示例:成绩奖励
java
if (score >= 95 && score <= 100) {
System.out.println("山地自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚玩具一个");
} else if (score >= 0 && score <= 79) {
System.out.println("胖揍一顿");
} else {
System.out.println("输入的分数有误");
}四、循环结构
4.1 for循环
基本格式
java
for (初始化变量; 比较布尔表达式; 步进表达式) {
循环语句;
}执行流程
- 先初始化变量
- 比较,如果是true,走循环语句
- 走步进表达式(变量值变化)
- 再比较,直到比较为false,循环结束
流程图

示例:打印3次
java
for (int i = 0; i < 3; i++) {
System.out.println("我爱money");
}示例:求1-3的和
java
int sum = 0;
for (int i = 1; i <= 3; i++) {
sum += i;
}
System.out.println(sum); // 输出: 6示例:求1-100的偶数和
java
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
sum += i;
}
}
System.out.println(sum);4.2 while循环
基本格式
java
初始化变量;
while (比较布尔表达式) {
循环语句;
步进表达式;
}执行流程
- 先初始化变量
- 比较,如果是true,走循环语句
- 走步进表达式
- 再比较,直到比较为false,循环结束
示例
java
int i = 1;
while (i <= 10) {
System.out.println("HelloWorld");
i++;
}4.3 do-while循环
基本格式
java
初始化变量;
do {
循环语句;
步进表达式;
} while (比较布尔表达式);特点
至少执行一次,先执行后判断。
示例
java
int i = 1;
do {
System.out.println("HelloWorld");
i++;
} while (i < 0); // 即使条件为false,也会执行一次4.4 三种循环对比
| 循环类型 | 执行次数 | 使用场景 |
|---|---|---|
| for | 可能0次 | 已知循环次数 |
| while | 可能0次 | 未知循环次数 |
| do-while | 至少1次 | 至少执行一次 |
五、常见面试题
5.1 switch相关
⭐ 题目1:case穿透性
java
int x = 2;
switch (x) {
case 1:
System.out.println(1);
case 2:
case 3:
System.out.println(3);
case 4:
System.out.println(4);
}答案:输出 3 和 4
解析:case 2没有break,会穿透到case 3和case 4继续执行。
⭐⭐ 题目2:switch穿透计算
java
int i = 10, j = 25, x = 30;
switch (j - i) {
case 15:
x++;
case 16:
x += 2;
case 17:
x += 3;
default:
--x;
}
System.out.println(x);答案:35
解析:j-i=15,匹配case 15后无break,穿透执行所有语句:x=30→31→33→36→35
⭐⭐ 题目3:多选判断
java
int x = 1, a = 0, b = 0;
switch (x) {
case 0:
b++;
case 1:
a++;
case 2:
a++;
b++;
}
System.out.println("a=" + a);
System.out.println("b=" + b);答案:a=2, b=1
解析:x=1匹配case 1,无break穿透到case 2,a执行两次++,b执行一次++。
5.2 if相关
⭐ 题目4:if基本判断
java
int a = 3, b = 4, x = 5;
if (a < b) {
x = x + 1;
}
System.out.println(x);答案:6
⭐⭐ 题目5:if-else判断
java
int a = 10, b = 3, m = 5;
if (a == b) {
m += a;
} else {
m *= a;
}
System.out.println(m);答案:50
解析:a!=b,执行else分支,m=5*10=50
⭐⭐ 题目6:嵌套if判断
java
if (条件1) {
if (条件2) {
语句体1;
} else {
语句体2;
}
}问题:语句体2在什么情况下执行?
答案:只有当条件1为true且条件2为false时,语句体2才能执行。
5.3 循环相关
⭐ 题目7:while循环次数
java
int i = 1;
while (i <= 10) {
i++;
System.out.println("HelloWorld");
}答案:输出10次HelloWorld
解析:i从1到10,循环10次。
⭐⭐ 题目8:while累加
java
int sum = 0;
int i = 1;
while (i <= 5) {
sum += i;
i++;
}
System.out.println(sum);答案:15
解析:1+2+3+4+5=15
⭐⭐ 题目9:do-while特点
java
int i = 1;
do {
System.out.println("HelloWorld");
i++;
} while (i < 0);答案:输出1次HelloWorld
解析:do-while先执行后判断,至少执行一次。
⭐ 题目10:for循环计数
java
int count = 0;
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
count++;
}
}
System.out.println(count);答案:3
解析:1-10中3的倍数有3、6、9,共3个。
六、实用代码示例
6.1 计算器功能
java
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
System.out.println("请输入运算符(0:加 1:减 2:乘 3:除):");
int operator = sc.nextInt();
switch (operator) {
case 0:
System.out.println(num1 + num2);
break;
case 1:
System.out.println(num1 - num2);
break;
case 2:
System.out.println(num1 * num2);
break;
case 3:
System.out.println(num1 / num2);
break;
default:
System.out.println("输入有误");
}
}
}6.2 工龄涨工资
java
import java.util.Scanner;
public class SalaryIncrease {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入工龄:");
int years = sc.nextInt();
System.out.println("请输入基本工资:");
int salary = sc.nextInt();
int upSalary;
if (years >= 10 && years < 15) {
upSalary = 20000;
} else if (years >= 5 && years < 10) {
upSalary = 10000;
} else if (years >= 3 && years < 5) {
upSalary = 5000;
} else if (years >= 1 && years < 3) {
upSalary = 3000;
} else {
upSalary = 0;
}
System.out.println("您目前工作了" + years + "年,基本工资为 " + salary +
"元, 应涨工资 " + upSalary + "元,涨后工资 " + (salary + upSalary) + "元");
}
}6.3 求三个数最大值
java
import java.util.Scanner;
public class MaxOfThree {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int temp;
if (a > b) {
temp = a;
} else {
temp = b;
}
int max;
if (temp > c) {
max = temp;
} else {
max = c;
}
System.out.println("最大值: " + max);
}
}七、经典练习题
7.1 基础题
练习1:打印3和5的倍数
需求:打印1到100之间既是3的倍数又是5的倍数的数字及其和。
java
int sum = 0;
for (int num = 1; num <= 100; num++) {
if ((num % 3 == 0) && (num % 5 == 0)) {
System.out.println(num);
sum += num;
}
}
System.out.println("以上满足条件的数字之和: " + sum);输出:15, 30, 45, 60, 75, 90,和为315
练习2:筛选三位数
需求:从键盘录入一个大于100的三位数,打印100到该数字之间满足条件的数字:
- 个位数不为7
- 十位数不为5
- 百位数不为3
java
Scanner sc = new Scanner(System.in);
int maxNum = sc.nextInt();
int sum = 0;
int count = 0;
for (int num = 100; num <= maxNum; num++) {
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;
if ((ge != 7) && (shi != 5) && (bai != 3)) {
System.out.println(num);
sum += num;
count++;
}
}
System.out.println("满足条件的数字之和: " + sum);
System.out.println("满足条件的数字个数: " + count);7.2 进阶题
练习3:四位数特殊规律
需求:打印所有四位数中,个位+千位==百位+十位的数字,并统计数量。
java
int count = 0;
for (int num = 1000; num <= 9999; num++) {
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;
int qian = num / 1000 % 10;
if ((ge + qian) == (bai + shi)) {
System.out.println(num);
count++;
}
}
System.out.println("以上满足条件的四位数总共有: " + count + "个");结果:共有615个符合条件的四位数。