Java 我的猜谜游戏计数器一直在上升

Java 我的猜谜游戏计数器一直在上升,java,Java,所以在课堂上,我要做一个猜谜游戏,在你接近答案时给你线索。我的问题是,当我运行它时,我得到一个正确的数字,我显然会保留该数字,并继续使用其他4个数字,当我这样做时,问题是我的正确数字计数器不断上升,即使我没有得到其他数字正确。。我该如何补救?我是否能够在每个if语句中添加中断,或者这将完全退出do-while循环 public class GuessingGame { public static void main(String[] args) { int guess,numDigit

所以在课堂上,我要做一个猜谜游戏,在你接近答案时给你线索。我的问题是,当我运行它时,我得到一个正确的数字,我显然会保留该数字,并继续使用其他4个数字,当我这样做时,问题是我的正确数字计数器不断上升,即使我没有得到其他数字正确。。我该如何补救?我是否能够在每个if语句中添加中断,或者这将完全退出do-while循环

public class GuessingGame {

public static void main(String[] args) {
    int guess,numDigitsCorrect=0,sumDigitsCorrect=0,attempts=0,answer;
    Random rng = new Random();
    Scanner consoleScanner = new Scanner(System.in);
    answer = rng.nextInt(90000) + 10000;
    System.out.println("I have randomly chosen a 5-digit code for you to guess.Each time you guess,\n"
            +   "I will tell you how many digits are correct and the sum of the digits that are correct."
            +   "For example, if the number is \"68420\" and you guess 12468, I will respond:\n"
            +   "Number of Digits Correct: 1\n"
            +   "Sum of Digits Correct: 4\n"
            +   "From deduction, you will know the 4 was correct in the guess."
            +   "\nNow its your turn..................................................................");
    do{
        System.out.print("Please enter a 5-digit code (your guess): ");
        guess = consoleScanner.nextInt();
        int g1 = guess/10000;
        int g2 = guess%10000/1000;
        int g3 = guess % 10000 % 1000 / 100;
        int g4 = guess % 10000 % 100 /10;
        int g5 = guess % 10000 % 10 / 1;
        int a1 = answer/10000;
        int a2 = answer%10000/1000;
        int a3 = answer % 10000 % 1000 / 100;
        int a4 = answer % 10000 / 100 / 10;
        int a5 = answer % 10000 % 10 / 10;
        if(g1 == a1)
        {
            numDigitsCorrect ++;
            sumDigitsCorrect += a1;
            System.out.println("\nNumber of digits correct: " + numDigitsCorrect) ;
            System.out.println("Sum of digits correct: " + sumDigitsCorrect);
            System.out.println();
        }
        if(g2 == a2)
        {
            numDigitsCorrect ++;
            sumDigitsCorrect += a2;
            System.out.println("Number of digits correct: " + numDigitsCorrect) ;
            System.out.println("Sum of digits correct: " + sumDigitsCorrect);
            System.out.println();
        }
        if (g3 == a3)
        {
            numDigitsCorrect ++;
            sumDigitsCorrect += a3;
            System.out.println("Number of digits correct: " + numDigitsCorrect) ;
            System.out.println("Sum of digits correct: " + sumDigitsCorrect);
            System.out.println();
        }
        if (g4 == a4)
        {
            numDigitsCorrect ++;
            sumDigitsCorrect += a4;
            System.out.println("Number of digits correct: " + numDigitsCorrect) ;
            System.out.println("Sum of digits correct: " + sumDigitsCorrect);
            System.out.println();
        }
        if (g5 == a5)
        {
            numDigitsCorrect ++;
            sumDigitsCorrect += a5;
            System.out.println("Number of digits correct: " + numDigitsCorrect) ;
            System.out.println("Sum of digits correct: " + sumDigitsCorrect);
            System.out.println();
        }
        if(guess == answer)
        {
            System.out.println("****HOORAY!  You solved it.  You are so smart****");
            break;
        }
    }while (guess != answer);

}
}

需要解决的问题很少-

确保您的a4、a5是正确的

int a4 = answer % 10000 % 100 / 10; // note the modulus

int a5 = answer % 10000 % 10; // note divided by 1 or remove the redundant statement
将打印语句从if块移到do块内所有if的末尾,如下所示-

if (g1 == a1) {
        numDigitsCorrect++;
        sumDigitsCorrect += a1;
}
... //other if statements
if (guess == answer) {
    System.out.println("****HOORAY!  You solved it.  You are so smart****");
    break;
}
System.out.println("Number of digits correct: " + numDigitsCorrect);
System.out.println("Sum of digits correct: " + sumDigitsCorrect);
另外,既然你已经做了检查

if (guess == answer) {
    System.out.println("****HOORAY!  You solved it.  You are so smart****");
    break;
}
在do中,您可以将while条件更改为true,如下所示-

我能在每个if语句中添加中断吗

如果您这样做,即使是一个数字匹配,您的循环也将退出

重要的是,要修复计数器,请将do块内的计数器初始化为

do {
    numDigitsCorrect = 0;
    sumDigitsCorrect = 0;
.. // existing logic
}

哦,我觉得自己像个傻瓜哈哈,谢谢!我还是个新手,只是想把这些信息保存在..@NamDuong welcome中,如果这解决了你的问题,请标记一个答案。顺便问一下,你为什么要将条件更改为true?什么是真的?如果我把if guess==答案放在do while循环的外部,难道不更容易理解吗?例如,请输入一个5位数代码您的猜测:77890位数正确:3位数和正确:22请输入一个5位数代码您的猜测:77892位数正确:6位数和正确:44请输入一个5位数代码您的猜测:哦我明白了,非常感谢你如此耐心地解释一切!
do {
    numDigitsCorrect = 0;
    sumDigitsCorrect = 0;
.. // existing logic
}