如何避免Java猜国家游戏中else语句重复执行?
解决猜国家游戏重复输出错误提示的问题
你的问题出在循环内每次遇到不匹配的国家就输出错误信息,数组里有多少个不匹配的国家,就会重复输出多少次错误提示。下面是两种简单的修复方案:
方案一:使用匹配标记变量
先定义一个布尔变量记录是否找到匹配的国家,遍历完所有国家后统一输出结果,这样只会输出一次提示:
package guessinggame; import java.util.Scanner; public class GuessingGame { public static void main(String[] args) { String ans; String[] countries = {"Philippines", "Brunei", "Burma", "Cambodia", "Timor Leste", "Indonesia", "Laos", "Malaysia", "Singapore", "Thailand", "Vietnam"}; Scanner sc=new Scanner(System.in); System.out.println("Please enter a Southeast Asian country"); ans = sc.nextLine(); boolean isCorrect = false; // 遍历数组,仅标记是否匹配,不输出结果 for (int x=0; x<countries.length; x++) { if (ans.equals(countries[x])){ isCorrect = true; break; // 找到匹配后直接跳出循环,无需继续遍历 } } // 遍历结束后统一输出结果 if (isCorrect) { System.out.println("Your answer (" + ans + ") is correct."); } else { System.out.println("Your answer (" + ans + ") is incorrect."); } } }
方案二:找到匹配后立即终止循环
在找到正确国家时输出提示并跳出循环,若循环正常结束(说明未找到匹配项),再输出错误提示:
package guessinggame; import java.util.Scanner; public class GuessingGame { public static void main(String[] args) { String ans; String[] countries = {"Philippines", "Brunei", "Burma", "Cambodia", "Timor Leste", "Indonesia", "Laos", "Malaysia", "Singapore", "Thailand", "Vietnam"}; Scanner sc=new Scanner(System.in); System.out.println("Please enter a Southeast Asian country"); ans = sc.nextLine(); boolean found = false; for (int x=0; x<countries.length; x++) { if (ans.equals(countries[x])){ System.out.println("Your answer (" + ans + ") is correct."); found = true; break; // 找到匹配后终止循环,避免多余遍历 } } // 循环结束后若未找到匹配,输出错误提示 if (!found) { System.out.println("Your answer (" + ans + ") is incorrect."); } } }
额外优化建议
如果想忽略输入的大小写(比如用户输入philippines也能匹配成功),可以把ans.equals(countries[x])改成ans.equalsIgnoreCase(countries[x]),提升游戏的交互友好性。
内容的提问来源于stack exchange,提问作者Justin Rivera
相关产品推荐
相关产品推荐

