循环控制是编程基础中的重点
在程序员面试中,循环控制相关的题目几乎成了必考内容。不管是刚入门的新手,还是有一定经验的开发者,面对循环结构时,稍不注意就容易出错。尤其像 for、while、do-while 这些基础语法,看似简单,但结合条件判断和变量更新后,问题就变得复杂起来。
比如常见的“打印九九乘法表”或“找出1到100之间的所有质数”,表面上看只是写个循环,实际上考察的是对循环条件、嵌套逻辑以及跳出机制的理解。
经典题目:计算阶乘并处理边界
面试官可能会让你写一个函数计算 n 的阶乘。很多人第一时间写出 for 循环:
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}但如果 n 是 0 呢?按照数学定义,0 的阶乘是 1。这时候如果不加判断,逻辑上虽然没错,但会显得考虑不周全。更稳妥的做法是在循环前单独处理边界情况。
嵌套循环容易掉进死循环陷阱
另一个常见问题是嵌套循环中变量使用混乱。例如想打印一个 5×5 的星号矩阵:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}这没问题。但有人把内层循环的 j 错写成 i,结果外层变量被修改,导致无法正常退出循环。这种低级错误在紧张的面试环境下特别容易发生。
break 和 continue 的实际应用
面试官有时会设置场景题,比如“遍历一个数组,找到第一个负数就停止”。这时候应该用 break:
for (int num : arr) {
if (num < 0) {
System.out.println("找到第一个负数:" + num);
break;
}
}如果题目变成“跳过所有偶数,只处理奇数”,那就要用 continue:
for (int num : arr) {
if (num % 2 == 0) {
continue;
}
System.out.println(num);
}这些关键字看起来简单,但在复杂逻辑中是否能准确使用,直接反映一个人的编码习惯。
实际场景:用户登录重试机制
有个贴近生活的例子:模拟用户登录,最多允许输错3次密码。可以用 while 循环实现:
int attempts = 0;
boolean success = false;
while (attempts < 3 && !success) {
System.out.print("请输入密码:");
String input = scanner.nextLine();
if (input.equals("123456")) {
success = true;
System.out.println("登录成功!");
} else {
attempts++;
System.out.println("密码错误,还剩 " + (3 - attempts) + " 次机会");
}
}如果 attempts 达到3次,或者 success 变为 true,循环自动结束。这个小功能涵盖了条件控制、状态标记和用户交互,很适合用来考察综合能力。
掌握循环控制,不只是记住语法,更重要的是理解执行流程和边界处理。多动手写代码,跑一跑测试用例,比背一百道题都管用。