跳到主要内容

Java 循环与控制结构

While 循环

当需要在满足特定条件时重复执行一段代码时,我会使用 while 循环。下面的示例根据用户输入的数字,输出对应的工作日名称,直到 dayOfWeek 大于 5 为止。

System.out.println("请输入一个数字");
Scanner scanner = new Scanner(System.in);
int dayOfWeek = scanner.nextInt();

while (dayOfWeek <= 5) {
switch (dayOfWeek) {
case 1:
System.out.println("周一");
break;
case 2:
System.out.println("周二");
break;
case 3:
System.out.println("周三");
break;
case 4:
System.out.println("周四");
break;
case 5:
System.out.println("周五");
break;
}
dayOfWeek++;
}

Do-While 循环

do-while 循环至少会执行一次循环体,然后再判断条件是否满足。以下是一个简单的用户登录验证程序:

  • 用户名和密码均为 sumingcheng
  • 程序会提示用户输入用户名和密码,直到输入正确为止。
String userName = "sumingcheng";
String password = "sumingcheng";
Scanner scanner = new Scanner(System.in);
String inputUserName;
String inputPassword;

do {
System.out.println("Please enter your username");
inputUserName = scanner.next();
} while (!inputUserName.equals(userName));

do {
System.out.println("Please enter your password");
inputPassword = scanner.next();
} while (!inputPassword.equals(password));

System.out.println("Login successfully!");

记账本案例

我编写了一个简单的记账程序,可以实现以下功能:

  • 查询账户余额
  • 记录收入
  • 记录支出
  • 退出程序

用户可以通过选择菜单选项来执行相应的操作。以下是代码实现:

import java.util.Scanner;
import java.math.BigDecimal;

BigDecimal balance = BigDecimal.ZERO;
int option = 0;

do {
System.out.println("1. 查询账户余额,输出总额\n" +
"2. 记录收入,总额+收入=新总额\n" +
"3. 记录支出,总额-支出=新总额\n" +
"4. 退出");
option = new Scanner(System.in).nextInt();

switch (option) {
case 1:
System.out.println("您的账户余额为" + balance);
break;
case 2:
System.out.println("请输入收入金额");
BigDecimal income = new Scanner(System.in).nextBigDecimal();
balance = balance.add(income);
System.out.println("您的账户余额为" + balance);
break;
case 3:
System.out.println("请输入支出金额");
BigDecimal expense = new Scanner(System.in).nextBigDecimal();
balance = balance.subtract(expense);
System.out.println("您的账户余额为" + balance);
break;
case 4:
System.out.println("您已经退出了记账本!");
break;
default:
System.out.println("您的输入有误,请重新输入!");
break;
}

} while (option != 4);

生成六位随机字符串

我需要生成一个由六个小写字母组成的随机字符串。以下是代码实现:

import java.util.Random;

Random random = new Random();
StringBuilder randomStr = new StringBuilder();

do {
char c = (char) (random.nextInt(26) + 97);
randomStr.append(c);
} while (randomStr.length() < 6);

System.out.println(randomStr.toString());

注意:在生成随机字母时,我使用了 random.nextInt(26) + 97,这样可以得到从 'a''z' 的字符。

For 循环

当知道需要循环的次数时,我会使用 for 循环。下面的代码输出从 1 到 10 的数字:

for (int i = 1; i <= 10; i++) {
System.out.println(i);
}

Continue 语句

continue 语句用于跳过当前循环中的剩余语句,直接进入下一次循环。下面的代码输出 100 以内的奇数:

for (int i = 0; i <= 100; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}

Break 语句

break 语句用于立即跳出循环。下面的代码在遇到第一个偶数时跳出循环,因此只会输出数字 1:

for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
break;
}
System.out.println(i);
}

循环类型对比

  • for 循环适合用于已知循环次数的情况。
  • while 循环适合用于根据条件决定是否继续执行的情况。

两种循环可以相互替代,根据实际需求选择合适的循环结构。

双重循环练习

我使用双重循环来打印一个等腰三角形:

for (int i = 1; i <= 5; i++) {
for (int j = i; j < 5; j++) {
System.out.print(" ");
}

for (int j = 1; j <= (i * 2 - 1); j++) {
System.out.print("*");
}
System.out.println();
}

运行结果如下:

九九乘法表

我使用双重循环打印九九乘法表:

for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "x" + j + "=" + i * j + " ");
}
System.out.println();
}

运行结果如下: