Java闹钟程序输入'n'后无法循环重启的问题求助
解决闹钟程序的循环重启问题
嘿,我一眼就瞅到问题所在啦——你这循环跑不起来,核心是Java里字符串比较的经典小坑,再加上逻辑里的一些疏漏,咱们一步步把它捋顺:
1. 字符串比较的致命错误
你用了 endProgram == "y" 来判断是否继续循环,但在Java里,== 比较的是对象的内存引用,不是字符串的实际内容!哪怕两个字符串内容一模一样,只要是不同的对象,== 都会返回false。正确的做法是用 equals() 方法(区分大小写)或者 equalsIgnoreCase()(不区分大小写):
// 推荐写法:常量放前面避免空指针 while ("y".equals(endProgram)) { // 或者兼容大小写输入,比如用户输Y也能识别 // while ("y".equalsIgnoreCase(endProgram)) {
2. 补全循环逻辑的疏漏
你的代码片段只写了循环开头,还缺了读取用户是否关闭程序的关键逻辑,咱们把这部分补上,同时修正循环的初始值和更新逻辑:
完整修正后的示例代码
import java.util.Scanner; public class AlarmClock { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String endProgram = "y"; // 初始值设为y,确保第一次循环能执行 while ("y".equals(endProgram)) { // 读取星期几的输入 System.out.print("What day of the week (1-7, 1=Monday)? "); int weekday = scanner.nextInt(); scanner.nextLine(); // 吃掉输入后的换行符,避免后续读取字符串出问题 // 根据星期几输出闹钟时间(示例逻辑) switch (weekday) { case 1,2,3,4,5: System.out.println("Alarm rings at 7:00 AM!"); break; case 6,7: System.out.println("Alarm rings at 9:00 AM!"); break; default: System.out.println("Invalid day input! Please enter 1-7."); } // 询问是否关闭程序 System.out.print("Do you want to close the program? (y/n): "); endProgram = scanner.nextLine().trim(); // 去掉前后空格,避免用户输入空格导致判断错误 } scanner.close(); // 别忘了关闭资源 System.out.println("Program closed."); } }
额外小贴士
- 用
scanner.nextLine()之前,如果刚用了nextInt(),一定要加个额外的scanner.nextLine()吃掉换行符,不然会直接读取到空字符串,导致逻辑异常。 - 用
trim()处理用户输入的字符串,能避免用户不小心输入空格导致判断出错。 - 如果需要更健壮的逻辑,可以加个循环确保用户输入的是有效的数字,避免
InputMismatchException。
内容的提问来源于stack exchange,提问作者Ella
相关产品推荐
相关产品推荐

