Java静态方法末尾如何返回变量?局部变量未声明报错如何解决
问题原因
- 变量作用域错误:你将
Planet a声明在for循环内部,它的生命周期仅限于for循环的{}范围内,出了这个范围编译器就认为该变量不存在,所以循环外部的return语句访问a就会报未声明错误。 - 还有多个逻辑错误需要同步修正:
- for循环中不管匹配是否成功,第一次遍历就直接
return a,逻辑完全错误,只会返回第一个枚举值 - 方法形参是
Scanner scan,代码中读取输入误用了scanner.next(),变量名不匹配 - 匹配成功后只修改了
exist标识,没有存储匹配到的枚举对象
- for循环中不管匹配是否成功,第一次遍历就直接
修复方案
调整变量声明位置,修正逻辑顺序即可,修复后代码如下:
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; // 提前在方法级别声明a,提升作用域 Planet a = null; do { System.out.println("Choisis une planet"); // 修正scanner变量名和形参一致 String choix = scan.next(); for (int i = 0; i < PlanetValues.size(); i++) { Planet current = PlanetValues.get(i); if (current.toString().matches("(?i).*" + choix + ".*")) { // 匹配成功后存储对象、修改标识,跳出for循环 a = current; exist = true; break; } } } while (!exist); return a; }
内容的提问来源于stack exchange,提问作者MOKRANI
相关产品推荐
相关产品推荐

