我有一个初学Java课程的作业,要求我创建一个名为Hangman
的课程。该程序应该提示用户(玩家1)输入String
,然后在屏幕上为屏幕中的每个角色打印破折号。程序然后要求第二个用户(玩家2)一次猜出一个字符,直到该字被猜到,或者他们有六次失败的尝试。在验证每个正确的猜测后,字符串中相应的短划线将替换为正确的字母。
此时我创建了将在用户String
中扫描的代码,并用短划线替换String
。该代码还会提示第二个用户输入比较字母。该代码还将替换破折号字符串中的第一个正确猜测。
此时我遇到的问题是,在第一次猜测后,我似乎无法找到提示用户输入其他内容的方法。程序将接受第一个正确的猜测,替换它,然后终止。我删除了一部分代码,用于检查输入了多少不正确/正确的猜测,因为此时代码将不断递增计数并终止程序。任何有关此问题的帮助将不胜感激。
更新
我重写了我的代码以删除不需要的/不必要的分支。这是我更新的代码。此时,我收到了太多不正确的猜测。代码计算通过不匹配的数组的每次迭代都是不正确的。我感谢您提供的任何帮助。
public class Hangman
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
String word;
String letter = "";
boolean gameOver = false;
int correct = 0;
int incorrect = 0;
int index = 0;
Scanner userIn = new Scanner(System.in);
System.out.print("Player 1 enter a word: ");
word = userIn.nextLine();
String[] wordArray = word.split("");
int wordLength = word.length();
String[] wrong = {};
String[] right = {};
String[] dashes = new String[wordLength];
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
for(int i = 0; i < wordLength; i++)
{
dashes[i] = "-";
}
for(int i= 0; i < wordLength; i++)
{
System.out.print(dashes[i] +" ");
}
System.out.println();
while(incorrect < 6)
{
System.out.print("Player 2 enter a letter: ");
letter = userIn.nextLine();
letter = letter.toLowerCase();
if(letter.length() > 1)
{
System.out.println("ERROR: You have entered more than one letter.");
System.out.print("Player 2 enter a letter: ");
letter = userIn.nextLine();
}
for(int i = 0; i < wordLength; i++)
{
if( wordArray[i].equals(letter))
{
dashes[i] = letter;
System.out.println("Correct!");
for( i= 0; i < wordLength; i++)
{
System.out.print(dashes[i] +" ");
}
correct++;
}
else
{
incorrect++;
}
}
}
if(correct == wordLength)
{
System.out.println();
System.out.println("You Win!!");
System.out.println();
}
if(incorrect == 6)
{
System.out.println("You Lose.");
System.out.println("The word was " +word);
System.out.println();
}
}
}
答案 0 :(得分:0)
所以,这是一大笔代码。而且我看到了一些有趣的决定。所以,既然你正在学习,我会帮助你自己帮助。
在接受这样的应用程序之前,你应该在实际编码之前首先考虑你的逻辑(伪代码)。所以对于一个刽子手游戏,你可能想要这样的东西:
player 1 enters phrase
while wrong_guesses < max_incorrect:
prompt player 2 for a letter
check the phrase for that letter
if found
replace dashes with the letter
else
wrong_guesses++
print status message
只要看一下你的代码,我就可以看到你要求新输入的多个地方。这意味着您没有有效地使用循环。您的应用程序有很多不必要的分支,清理它将帮助您调试。作为练习,您可以浏览代码并编写其“伪代码”,然后将其与我的代码进行比较。
祝你好运!<强>更新强>:
对于新的和大大改进的代码,您的检查循环是错误的。看起来应该更像这样:
boolean found = false;
for(int i = 0; i < wordLength; i++)
{
if( wordArray[i].equals(letter))
{
found = true;
// replace dashes, and you don't need to loop here,
// do it after the check for better efficiency
}
}
//Outside of the loop
if (!found)
{
incorrect++;
}
//Print the current status here then
此外,您的支票只能被破坏(输入aa,然后再输入aa)。该块应该是:
if(letter.length() > 1)
{
System.out.println("ERROR: You have entered more than one letter.");
System.out.print("Player 2 enter a letter: ");
//letter = userIn.nextLine();
continue; //This tells java to restart the loop
}