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++) {
当i
是0
时,i
将小于5
,这意味着i > 5
将是false
并且循环将终止...
我想你是说
for (i = 0; i < secretCode.length(); i++) {
事实上,因为你需要比较secretCode
和userGuess
中的每个字符,你实际上需要一个复合循环
for (i = 0; i < secretCode.length(); i++) {
for (int x = 0; x < usersGuess.length(); x++) {
//...
}
}
接下来,您将 usersGuess
值转换为 int
,但将其与 secretCode
的 char
值进行比较...
int digit = Character.getNumericValue(usersGuess.charAt(i));
if (digit == secretCode.charAt(i))
这永远不会相等,相反,只需将 userGuess
的 char
值与 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
语句来检查 usersGuess
的 length
以确保它等于 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++;
}
好的,我的猜谜游戏快结束了,我只是想不通为什么中间部分不起作用。基本上,用户输入一个五位数,它应该取他们猜测的位数并将他们的总数加起来,并告诉他们他们猜对了多少位数,这样他们就可以再次猜测,但它甚至不是 运行 通过我的 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++) {
当i
是0
时,i
将小于5
,这意味着i > 5
将是false
并且循环将终止...
我想你是说
for (i = 0; i < secretCode.length(); i++) {
事实上,因为你需要比较secretCode
和userGuess
中的每个字符,你实际上需要一个复合循环
for (i = 0; i < secretCode.length(); i++) {
for (int x = 0; x < usersGuess.length(); x++) {
//...
}
}
接下来,您将 usersGuess
值转换为 int
,但将其与 secretCode
的 char
值进行比较...
int digit = Character.getNumericValue(usersGuess.charAt(i));
if (digit == secretCode.charAt(i))
这永远不会相等,相反,只需将 userGuess
的 char
值与 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
语句来检查 usersGuess
的 length
以确保它等于 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++;
}