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 導致方法直接結束,無法重新讀取輸入。
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!");
}
}
}
return/break(除非要退出程序)。trim().toLowerCase() 兼容大小寫與前後空格。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), "輸入無效");