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