首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 控制台交互:輸入 n 後無法繼續的邏輯錯誤修正

     編輯:程式設計疑難解答

錯誤代碼邏輯


while (response.equals("n")) {
    System.out.println("Please enter y or n");
    return; // 直接返回 main 方法結束,程序退出!
}
while ((!response.equals("n")) && (!response.equals("y"))) {
    System.out.println("Invalid input");
    return; // 同樣退出
}

核心錯誤:在循環體內使用 return 導致方法直接結束,無法重新讀取輸入。

修正版:do-while 循環持續讀取直到合法


import java.util.Scanner;

public class Loop {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String response;
        do {
            System.out.print("Please enter y or n: ");
            response = in.nextLine().trim().toLowerCase();
            if (!response.equals("y") && !response.equals("n")) {
                System.out.println("Invalid input. Please enter y or n.");
            }
        } while (!response.equals("y") && !response.equals("n"));

        if (response.equals("y")) {
            System.out.println("Great! Let's get started!");
            // 繼續業務邏輯...
        } else {
            System.out.println("Bye!");
        }
    }
}

關鍵點

  1. do-while 保證至少執行一次,符合「先提示後讀取」直覺。
  2. 循環條件只判斷合法性,不在循環體內 return/break(除非要退出程序)。
  3. trim().toLowerCase() 兼容大小寫與前後空格。
  4. 用完 Scanner 建議 in.close()(簡單程序可省略)。

進階:封裝通用輸入驗證方法


public static String readUntilValid(Scanner in, String prompt, Predicate validator, String errorMsg) {
    String input;
    do {
        System.out.print(prompt);
        input = in.nextLine();
        if (!validator.test(input)) System.out.println(errorMsg);
    } while (!validator.test(input));
    return input;
}

// 使用
String ans = readUntilValid(in, "y/n? ", s -> "y".equals(s) || "n".equals(s), "輸入無效");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved