enumerate输入转数字方法失效及switch逻辑异常问题求助
问题排查与解决
1. Switch语句始终执行case5的问题
你的switch代码里所有case都没有加break语句,这会触发switch的“贯穿”特性:匹配到任意case后,会持续执行后续所有case的代码,直到遇到break或switch代码块结束。比如输入"l"匹配case1后,会依次执行case2、case3、case4的逻辑,最终必然走到case5的running = false,所以无论输入什么,都会执行case5的代码。
修复方案:给每个独立的case末尾添加break,修改后代码如下:
switch(enumerate(user_input)){ //moving left case 1: sharedData.setOffset(sharedData.getOffset() - 1); break; //moving right case 2: sharedData.setOffset(sharedData.getOffset() + 1); break; //moving all the way right case 3: sharedData.setOffset(74); break; //moving all the way left case 4: sharedData.setOffset(-73); break; //quitting case 5: running = false; break; }
2. 调试时enumerate方法编译错误的问题
错误提示The method enumerate(Thread[]) in the type Thread is not applicable for the arguments (String),说明编译器解析enumerate("l")时,默认调用了java.lang.Thread类的内置enumerate方法(该方法接收Thread数组参数),而非你自定义的接收String的enumerate方法。
解决办法:
- 调试调用时,使用完整类名+方法名的方式,比如
YourClassName.enumerate("l"),明确指定调用你自己定义的方法,避免和Thread类的同名方法混淆。 - 可以给自定义方法重命名(比如改为
inputToCode),从根源上避免和JDK内置方法重名,消除歧义。
另外,你的enumerate方法可以优化为更简洁的switch表达式写法:
public static int enumerate(String user_input){ return switch(user_input) { case "l" -> 1; case "r" -> 2; case "d" -> 3; case "a" -> 4; case "q" -> 5; default -> 0; }; }
内容的提问来源于stack exchange,提问作者Sybe
相关产品推荐
相关产品推荐

