Java 程序中计数器关闭

Java 程序中计数器关闭,java,count,counter,Java,Count,Counter,我必须为我的班级写一个程序 说明是 您的程序将选择一个随机的4位数字作为密码。 您的程序必须提示用户输入一个4位数字作为他们的猜测。 程序将以一条消息响应,指示用户猜测的数字中有多少与机密号码中相同位置的数字相同 例如,如果密码是3749,而用户的猜测是9753,则程序将以您匹配的消息1响应,因为用户猜测中只有一个数字(7)与密码中相同位置的数字相同 该程序将允许用户继续猜测,直到猜到正确的密码。 用户输入密码后,程序将输出用户查找密码的总猜测次数。 然后程序会询问用户是否愿意再次播放。如果用户

我必须为我的班级写一个程序

说明是 您的程序将选择一个随机的4位数字作为密码。
您的程序必须提示用户输入一个4位数字作为他们的猜测。
程序将以一条消息响应,指示用户猜测的数字中有多少与机密号码中相同位置的数字相同

例如,如果密码是
3749
,而用户的猜测是
9753
,则程序将以您匹配的消息1响应,因为用户猜测中只有一个数字(7)与密码中相同位置的数字相同

该程序将允许用户继续猜测,直到猜到正确的密码。
用户输入密码后,程序将输出用户查找密码的总猜测次数。
然后程序会询问用户是否愿意再次播放。如果用户回答“是”,则程序将选择另一个随机4位数字,并按上述方式继续播放

publicstaticvoidmain(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
随机=新随机();
System.out.println(“----策划人------”);
System.out.println(“猜4位数字!”);
布尔值keepGoing=true;
while(keepGoing=true)
{
String secretNumber=String.format(“%04d”,random.nextInt(10000));
int猜测计数=0;
int matchCount=0;
while(匹配计数!=4)
{
System.out.println(“输入您的猜测:”);
字符串userGuess=input.nextLine();
猜数++;
if(userGuess.substring(0,1).equals(secretNumber.substring(0,1));
{
matchCount++;
}
if(userGuess.substring(1,2).equals(secretNumber.substring(1,2));
{
matchCount++;
}
if(userGuess.substring(2,3).equals(secretNumber.substring(2,3));
{
matchCount++;
}
if(userGuess.substring(3,4).equals(secretNumber.substring(3,4));
{
matchCount++;
}
System.out.println(“您匹配了”+匹配计数+“数字/数字”);
if(userGuess.equals(secretNumber))
{
System.out.println(“祝贺你!你在“+guessCount+”guess/guesss.”中猜对了数字);
System.out.println(“您想再次播放吗?输入Y表示是,输入N表示否”);
字符串keepGoingYesOrNo=input.nextLine();
如果(keepGoingYesOrNo.equals(“N”));
{
keepGoing=false;
}
}
}
}
}
由于某些原因,一旦程序运行,即使数字不匹配,
matchCount
也始终为4。

我认为if语句下的代码只有在条件为true时才会执行,但出于某种原因,它无论如何都会运行它。

if语句后面有分号,这使得它们毫无用处。格式应如下所示:

if (userGuess.substring(0,1).equals(secretNumber.substring(0,1))) {
    matchCount++;
} 
但是,随着程序目前的编写,matchCount将不断增加,即使它们重复了数字。因此,如果数字是
1234
并且用户猜测
2222
,那么
2223
匹配计数将是2。我建议为
digit1
digit2
digit3
digit4
设置
boolean
值。猜测数字时,将该值设置为true。如果
数字[x]=false,则仅运行每个
if


编辑:经过一些尝试和错误,我使程序尽可能可靠。以前,
matchCount
会不断增加,即使重复相同的数字,因此为了防止出现这种情况,我实现了一些
boolean

此外,如果正确猜测了一个数字,但在接下来的尝试中没有猜到,
matchCount
将保持不变,因此我编写了另一组if语句,以减少这次事件中的
matchCount
。我还修复了代码中的其他一些小问题,包括在重播时重置
匹配计数
,以及在用户不想播放时成功结束程序。如果你有任何问题,请告诉我!这是最后的代码

public static void main (String[] args)
{
    Scanner input = new Scanner(System.in);
    Random random = new Random();
    
    System.out.println("----- MASTERMIND -----");
    System.out.println("Guess the 4 digit number!");
    

    boolean keepGoing = true;
    boolean digit1 = false;
    boolean digit2 = false;
    boolean digit3 = false;
    boolean digit4 = false;

    while (keepGoing = true)
    {
        String secretNumber = String.format("%04d", random.nextInt(10000));
        int guessCount = 0;
        int matchCount = 0;
        while (matchCount != 4 && keepGoing == true)
        {
            System.out.println("Enter your guess: ");
            System.out.println(secretNumber);
            String userGuess = input.nextLine();
            guessCount++;
            if (userGuess.substring(0,1).equals(secretNumber.substring(0,1)) && digit1 == false)
            { //if the first digit is correct and hasn't been guessed already, matchcount increases
                matchCount++;
                digit1 = true;
            } 
            if (!userGuess.substring(0,1).equals(secretNumber.substring(0,1)) && digit1 == true)
            { //if the first digit is incorrect but you previously guessed it, matchcount decreases and digit1 is set to false
                matchCount--;
                digit1 = false;
            }
            
            
            if (userGuess.substring(1,2).equals(secretNumber.substring(1,2)) && digit2 == false)
            {
                matchCount++;
                digit2 = true;
            }
            if (!userGuess.substring(1,2).equals(secretNumber.substring(1,2)) && digit2 == true)
            {
                matchCount--;
                digit2 = false;
            }
            
            
            if (userGuess.substring(2,3).equals(secretNumber.substring(2,3)) && digit3 == false)
            {
                matchCount++;
                digit3 = true;
            }
            if (!userGuess.substring(2,3).equals(secretNumber.substring(2,3)) && digit3 == true)
            {
                matchCount--;
                digit3 = false;
            }
            
            
            if (userGuess.substring(3,4).equals(secretNumber.substring(3,4)) && digit4 == false)
            {
                matchCount++;
                digit4 = true;
            } 
            if (!userGuess.substring(3,4).equals(secretNumber.substring(3,4)) && digit4 == true)
            {
                matchCount--;
                digit4 = false;
            }
            
            
            System.out.println("You matched " + matchCount + " digit/digits.");
            if (userGuess.equals(secretNumber))
            {
                System.out.println("Congratulations! You guessed the right number in " + guessCount + " guess/guesses.");
                System.out.println("Would you like to play again? Enter Y for yes or N for no.");
                String keepGoingYesOrNo = input.nextLine();
                if (keepGoingYesOrNo.equals("Y"))
                {
                    keepGoing = true;
                    matchCount=0;
                    guessCount=0;
                } else {
                    System.out.println("Thanks for playing!");
                    System.exit(0);
                }
            }
        }
    }
}

if
语句后面有分号,使它们变得无用。格式应如下所示:

if (userGuess.substring(0,1).equals(secretNumber.substring(0,1))) {
    matchCount++;
} 
但是,随着程序目前的编写,matchCount将不断增加,即使它们重复了数字。因此,如果数字是
1234
并且用户猜测
2222
,那么
2223
匹配计数将是2。我建议为
digit1
digit2
digit3
digit4
设置
boolean
值。猜测数字时,将该值设置为true。如果
数字[x]=false,则仅运行每个
if


编辑:经过一些尝试和错误,我使程序尽可能可靠。以前,
matchCount
会不断增加,即使重复相同的数字,因此为了防止出现这种情况,我实现了一些
boolean

此外,如果正确猜测了一个数字,但在接下来的尝试中没有猜到,
matchCount
将保持不变,因此我编写了另一组if语句,以减少这次事件中的
matchCount
。我还修复了代码中的其他一些小问题,包括在重放时重置
匹配计数
,并成功地将
            if (userGuess.substring(0,1).equals(secretNumber.substring(0,1)))
            {
                matchCount++;
            }
            if (userGuess.substring(1,2).equals(secretNumber.substring(1,2)))
            {
                matchCount++;
            }
            if (userGuess.substring(2,3).equals(secretNumber.substring(2,3)))
            {
                matchCount++;
            }
            if (userGuess.substring(3,4).equals(secretNumber.substring(3,4)))
            {
                matchCount++;
            }
            if (userGuess.equals(secretNumber))
            {
                System.out.println("Congratulations! You guessed the right number in " + guessCount + " guess/guesses.");
                System.out.println("Would you like to play again? Enter Y for yes or N for no.");
                String keepGoingYesOrNo = input.nextLine();
                if (keepGoingYesOrNo.equals("N"));
                {
                    keepGoing = false;
                }
            }
            else
            {
                matchCount = 0;
            }