Java问答应用输入指定选项后需循环3次才输出结果的问题
问题根源与解决方案
核心问题:重复调用getAnswer()触发多次输入
你遇到的问题本质是每次调用getAnswer()都会触发一次用户输入,而你的代码在do-while循环里连续调用了多次getAnswer()(if判断里一次、循环内又一次、while条件里还有一次),这就导致用户需要额外输入多次才能走到预期的输出逻辑。
修复后的完整代码示例
import java.util.Scanner; public class Main { private static Scanner scanner = new Scanner(System.in); // 封装输入方法,保持原有逻辑 public static String getAnswer() { return scanner.nextLine().trim(); } public static void main(String[] args) { String userInput; do { // 只调用一次输入方法,把结果存到变量里复用 userInput = getAnswer(); if (userInput.equalsIgnoreCase("neither")) { System.out.println("Please enter 'astronomy' or 'politics'."); } else if (userInput.equalsIgnoreCase("politics") || userInput.equalsIgnoreCase("astronomy")) { System.out.println("test"); // 触发预期输出 } // 循环终止条件:输入正确内容时退出 } while (!userInput.equalsIgnoreCase("politics") && !userInput.equalsIgnoreCase("astronomy")); } }
关键改进说明
- 复用输入结果:把
getAnswer()的返回值存储到userInput变量中,整个循环周期内只调用一次输入方法,彻底避免重复触发用户输入。 - 明确逻辑分支:补充了对目标输入(
politics/astronomy)的判断,确保输入正确时直接输出test。 - 优化循环条件:调整while的终止逻辑,当用户输入符合要求时直接退出循环,无需多余判断。
原代码的问题拆解
假设用户输入politics:
- 第一次调用
getAnswer()获取输入,判断不是"neither",跳过提示逻辑; - 第二次调用
getAnswer(),再次要求用户输入,但这次的结果完全没被使用; - 第三次调用
getAnswer()作为while的判断条件,用户需要又一次输入,才会触发循环终止和预期输出。
通过复用变量,就能让用户每输入一次就完成一轮完整的判断,不会出现多余的输入要求。
内容的提问来源于stack exchange,提问作者Brian E.
相关产品推荐
相关产品推荐

