Java 我无法解决的猜谜游戏调试问题

Java Guessing Game debugging issue I cant solve

好的,我的猜谜游戏快结束了,我只是想不通为什么中间部分不起作用。基本上,用户输入一个五位数,它应该取他们猜测的位数并将他们的总数加起来,并告诉他们他们猜对了多少位数,这样他们就可以再次猜测,但它甚至不是 运行 通过我的 for 循环任何帮助将不胜感激。

//Jonathan
import javax.swing.JOptionPane;

import java.util.Scanner;
public class Guessing 
{

public static void main(String[] args) 
{
  //JOptionPane.showMessageDialog(null, "Welcome to Jonathan's number guessing game.");
  int correctPosition = 0, sum = 0, numOfGuesses = 5, i;
  String usersGuess, secretCode;
  double number = Math.random() * 100000;
  number = Math.round(number);
  secretCode = Double.toString(number);
  do 
  {
    numOfGuesses--;
    System.out.println(number);
    Scanner keyboard = new Scanner(System.in);
    usersGuess = keyboard.nextLine();
    if (usersGuess.equalsIgnoreCase(secretCode))
    {
        JOptionPane.showMessageDialog(null, "You got the number correct!");
        System.exit(0);
    }
    else if (!(usersGuess.equalsIgnoreCase(secretCode)))
    {
     for (i=0; i > 5; i++)
         {
            int digit = Character.getNumericValue(usersGuess.charAt(i));
            if (digit == secretCode.charAt(i))
            System.out.println(digit);
            {
                correctPosition++;
            }

         }
         JOptionPane.showMessageDialog(null, "You have " + correctPosition + " numbers in the correct position." + " The sum of which are\n" + sum + " keep guessing!");
     }  
    }  while (numOfGuesses > 0);

  }  
}

有几件事很突出...

首先...

for (i = 0; i > 5; i++) {

i0时,i将小于5,这意味着i > 5将是false并且循环将终止...

我想你是说

for (i = 0; i < secretCode.length(); i++) {

事实上,因为你需要比较secretCodeuserGuess中的每个字符,你实际上需要一个复合循环

for (i = 0; i < secretCode.length(); i++) {
    for (int x = 0; x < usersGuess.length(); x++) {
         //...
    }
}

接下来,您将 usersGuess 值转换为 int,但将其与 secretCodechar 值进行比较...

int digit = Character.getNumericValue(usersGuess.charAt(i));
if (digit == secretCode.charAt(i))

这永远不会相等,相反,只需将 userGuesschar 值与 secretCode

char 值进行比较
for (i = 0; i < secretCode.length(); i++) {
    for (int x = 0; x < usersGuess.length(); x++) {
        char digit = usersGuess.charAt(x);
        if (digit == secretCode.charAt(i)) {
            System.out.println(digit);
            correctPosition++;
        }
    }
}

现在,这可能会产生误报,更像是...

for (i = 0; i < secretCode.length(); i++) {
    if (i < usersGuess.length()) {
        char digit = usersGuess.charAt(i);
        if (digit == secretCode.charAt(i)) {
            System.out.println(digit);
            correctPosition++;
        }
    }
}

可能更合适,但我还会添加一个 if 语句来检查 usersGuesslength 以确保它等于 length secretCode 并在用户输入无效值时显示错误消息...我一直在这样做... 还有...

if (digit == secretCode.charAt(i))
System.out.println(digit);
{
    correctPosition++;
}

实际执行为...

if (digit == secretCode.charAt(i)) {
    System.out.println(digit);
}
correctPosition++;

我认为这不是您想要的,我认为您想要的更像

if (digit == secretCode.charAt(i)) {
    System.out.println(digit);
    correctPosition++;
}