Java调用choosePlanet方法返回值始终相同,如何正确获取方法返回值
问题根源
- 核心问题:for循环匹配到符合条件的行星后没有终止循环,后续遍历会持续覆盖变量
a的取值,最终a一定会等于Planet枚举的最后一个元素,所以只要存在匹配结果,每次返回值都是同一个。 - 变量名问题:方法形参定义为
Scanner scan,但代码中读取输入调用的是scanner.next(),如果外部的scanner变量和形参不是同一个对象,还会出现输入读取异常。 - 逻辑漏洞:如果输入关键词匹配到多个行星,当前逻辑只会返回最后一个匹配的行星,不符合正常选择逻辑。
修复代码
private static Planet choosePlanet(Scanner scan) { System.out.println("Voici les planetes Disponible : " + Arrays.toString(Planet.values())); List<Planet> PlanetValues = Arrays.asList(Planet.values()); boolean exist = false; Planet a = null; do { System.out.println("Choisis une planet"); // 改用方法传入的scan参数读取输入,修复变量名错误 String choix = scan.next(); for (int i = 0; i < PlanetValues.size(); i++) { a = PlanetValues.get(i); if (a.toString().matches("(?i).*" + choix + ".*")) { exist = true; System.out.println(a.getCommonName()); // 匹配到后直接跳出for循环,避免a被后续遍历的元素覆盖 break; } } } while (!exist); return a; }
内容的提问来源于stack exchange,提问作者MOKRANI
相关产品推荐
相关产品推荐

