如何修复Java中的不可达语句?新手开发者求助
解决你的Java猜数字游戏问题:不可达语句及其他优化点
嘿,作为Java新手遇到这种问题很正常,我来帮你拆解一下!你提到的“不可达语句”错误是有明确原因的,另外我也发现几个小问题可以帮你一起优化:
1. 核心错误:不可达语句的根源
看你内层循环里的这段代码:
if(GuessingGame[0][integer] == GuessingGame[1][j]){ System.out.println("Correct!"); break; counter++; }
当条件满足时,break;会直接跳出当前的for(j)循环,后面的counter++;永远没有机会被执行到——编译器就会判定这是“不可达语句”,抛出错误。
修复方法:把counter++;移到break;前面就行,这样计数完再跳出循环:
if(GuessingGame[0][integer] == GuessingGame[1][j]){ System.out.println("Correct!"); counter++; break; }
2. 其他需要调整的潜在问题
除了上面的错误,还有几个点会影响游戏的正常运行:
- 输入流的换行符问题:当你用
input.nextInt()读取总猜测次数y后,输入流里会残留一个换行符。接下来的cancellor = input.nextLine();会直接读取这个空行,而不是等待用户输入。可以在input.nextInt()后加一行input.nextLine();来清空这个换行符。 - integer变量的逻辑错误:你用
integer作为用户输入数组的索引,但这个变量是static的初始值0,全程没有修改过,导致每次判断都是拿第一个用户输入的数字去和AI的数字比较,这显然不符合游戏逻辑。应该改成用当前外层循环的变量i,也就是GuessingGame[0][i]。 - 二维数组初始化简化:你现在分开初始化二维数组的两行,其实可以直接写成
int[][] GuessingGame = new int[2][y];,代码更简洁。
修正后的完整代码示例
import java.util.Random; import java.util.Scanner; public class Harrylist{ static Random aiRandom = new Random(); // 变量名更清晰,避免和用户输入混淆 static Scanner input = new Scanner(System.in); static int counter = 0; public static void main(String[] args) { System.out.println("Guessing game! please enter a total number of guesses"); int y = input.nextInt(); input.nextLine(); // 清空换行符,避免后续nextLine读取空值 int[][] guessingGame = new int[2][y]; // 直接初始化二维数组 //AI生成数字 for(int i = 0; i < y; i++){ guessingGame[1][i] = aiRandom.nextInt(50); //System.out.println(guessingGame[1][i]); // 可以保留用来调试AI数字 //用户输入数字 System.out.println("Please enter a number within the range of 0-49"); int userGuess = input.nextInt(); input.nextLine(); // 再次清空换行符 guessingGame[0][i] = userGuess; // 判断是否猜对 for(int j = 0; j<y; j++){ if(guessingGame[0][i] == guessingGame[1][j]){ System.out.println("Correct!"); counter++; break; } } } // 游戏结束后可以显示猜对次数 System.out.println("Game over! You guessed correctly " + counter + " times."); } }
内容的提问来源于stack exchange,提问作者Renoissance
相关产品推荐
相关产品推荐

