计数器在程序中关闭
counter is off in program
我必须为我的class编写一个程序。
说明是
您的程序将随机选择一个 4 位数字作为密码。
您的程序必须提示用户输入一个 4 位数作为他们的猜测。
程序将回复一条消息,指出用户猜测的数字中有多少与密码中相同位置的数字相同。
例如,如果密码是3749
,而用户的猜测是9753
,那么程序会响应消息You matched 1,因为只有一个数字( 7) 在用户的猜测中与密码中相同位置的数字相同。
该程序将允许用户继续输入猜测,直到他们猜出正确的密码。
用户输入密码后,程序将输出用户为找到密码而进行的猜测总数。
然后程序会询问用户是否想再玩一次。如果用户回答“是”,程序将选择另一个随机的 4 位数字并继续播放上述内容。
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;
while (keepGoing = true)
{
String secretNumber = String.format("%04d", random.nextInt(10000));
int guessCount = 0;
int matchCount = 0;
while (matchCount != 4)
{
System.out.println("Enter your guess: ");
String userGuess = input.nextLine();
guessCount++;
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("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("N"));
{
keepGoing = false;
}
}
}
}
}
由于某些原因,即使数字不匹配,程序运行后 matchCount
始终为 4。
我认为 if 语句下的代码只会在条件为真时执行,但由于某种原因它仍然会运行它。
您的 if
语句后有分号,使它们无用。格式应该是这样的:
if (userGuess.substring(0,1).equals(secretNumber.substring(0,1))) {
matchCount++;
}
但也随着目前程序的编写,matchCount即使出现重复数字也会一直增加。因此,如果数字是 1234
并且用户猜测 2222
那么 2223
matchCount 将为二。我建议为 digit1
、digit2
、digit3
和 digit4
设置 boolean
值。当猜到数字时,将值设置为 true。如果 digit[x] = false
.
每个 if
块只有 运行
编辑:经过反复试验,我使程序尽可能可靠。以前,即使你重复相同的数字,matchCount
也会继续增加,所以为了防止这种情况,我实现了一些 boolean
值。
此外,如果一个数字被正确猜中,但在接下来的尝试中没有猜到,matchCount
将保持不变,所以我写了另一组 if 语句来减少这个事件中的 matchCount
。我还修复了代码中的其他一些小问题,包括重播时重置 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);
}
}
}
}
}
首先,我觉得你可以把代码改成这样,更容易维护,可读性更好
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;
while (keepGoing = true)
{
String secretNumber = String.format("%04d",
random.nextInt(10000));
int guessCount = 0;
int matchCount = 0;
while (matchCount != 4)
{
matchCount = 0
System.out.println("Enter your guess: ");
String userGuess = input.nextLine();
guessCount++;
for(int i = 0 ; i < secretNumber.length() ; i++){
if(secreetNumber.charAt[i] == userGuess.charAt[i])
matchCount++;
}
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("N"));
{
keepGoing = false;
}
}
}
}
}
并在每次猜测后重置 matchCount
如果块为空
if
末尾的分号关闭它们,无论如何都会执行它们旁边的块。修复:
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++;
}
每次迭代时 matchCount 应为 0
如果您碰巧没有猜出完整数字,但至少有一个数字是正确的,那么 matchCount
将是一个严格的正数。由于您没有将其设置为 0,因此 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;
}
我必须为我的class编写一个程序。
说明是
您的程序将随机选择一个 4 位数字作为密码。
您的程序必须提示用户输入一个 4 位数作为他们的猜测。
程序将回复一条消息,指出用户猜测的数字中有多少与密码中相同位置的数字相同。
例如,如果密码是3749
,而用户的猜测是9753
,那么程序会响应消息You matched 1,因为只有一个数字( 7) 在用户的猜测中与密码中相同位置的数字相同。
该程序将允许用户继续输入猜测,直到他们猜出正确的密码。
用户输入密码后,程序将输出用户为找到密码而进行的猜测总数。
然后程序会询问用户是否想再玩一次。如果用户回答“是”,程序将选择另一个随机的 4 位数字并继续播放上述内容。
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;
while (keepGoing = true)
{
String secretNumber = String.format("%04d", random.nextInt(10000));
int guessCount = 0;
int matchCount = 0;
while (matchCount != 4)
{
System.out.println("Enter your guess: ");
String userGuess = input.nextLine();
guessCount++;
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("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("N"));
{
keepGoing = false;
}
}
}
}
}
由于某些原因,即使数字不匹配,程序运行后 matchCount
始终为 4。
我认为 if 语句下的代码只会在条件为真时执行,但由于某种原因它仍然会运行它。
您的 if
语句后有分号,使它们无用。格式应该是这样的:
if (userGuess.substring(0,1).equals(secretNumber.substring(0,1))) {
matchCount++;
}
但也随着目前程序的编写,matchCount即使出现重复数字也会一直增加。因此,如果数字是 1234
并且用户猜测 2222
那么 2223
matchCount 将为二。我建议为 digit1
、digit2
、digit3
和 digit4
设置 boolean
值。当猜到数字时,将值设置为 true。如果 digit[x] = false
.
if
块只有 运行
编辑:经过反复试验,我使程序尽可能可靠。以前,即使你重复相同的数字,matchCount
也会继续增加,所以为了防止这种情况,我实现了一些 boolean
值。
此外,如果一个数字被正确猜中,但在接下来的尝试中没有猜到,matchCount
将保持不变,所以我写了另一组 if 语句来减少这个事件中的 matchCount
。我还修复了代码中的其他一些小问题,包括重播时重置 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);
}
}
}
}
}
首先,我觉得你可以把代码改成这样,更容易维护,可读性更好
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;
while (keepGoing = true)
{
String secretNumber = String.format("%04d",
random.nextInt(10000));
int guessCount = 0;
int matchCount = 0;
while (matchCount != 4)
{
matchCount = 0
System.out.println("Enter your guess: ");
String userGuess = input.nextLine();
guessCount++;
for(int i = 0 ; i < secretNumber.length() ; i++){
if(secreetNumber.charAt[i] == userGuess.charAt[i])
matchCount++;
}
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("N"));
{
keepGoing = false;
}
}
}
}
}
并在每次猜测后重置 matchCount
如果块为空
if
末尾的分号关闭它们,无论如何都会执行它们旁边的块。修复:
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++;
}
每次迭代时 matchCount 应为 0
如果您碰巧没有猜出完整数字,但至少有一个数字是正确的,那么 matchCount
将是一个严格的正数。由于您没有将其设置为 0,因此 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;
}