与新手有一些严重的问题”;“刽子手”;Java程序
这是我的程序,但当我运行它时,结果是不正确的。例如,如果计算机选择“this”作为游戏的单词,并且输入了“t”,则它被标记为错误,而其他字母被标记为正确。很明显,这里有点不对劲,但就我的一生而言,我无法理解。感谢您的帮助与新手有一些严重的问题”;“刽子手”;Java程序,java,Java,这是我的程序,但当我运行它时,结果是不正确的。例如,如果计算机选择“this”作为游戏的单词,并且输入了“t”,则它被标记为错误,而其他字母被标记为正确。很明显,这里有点不对劲,但就我的一生而言,我无法理解。感谢您的帮助 import java.util.Scanner; import java.util.Random; public class Hangman { public static void main(String[] args) { //set words
import java.util.Scanner;
import java.util.Random;
public class Hangman {
public static void main(String[] args) {
//set words to array
String[] words = {"write", "this", "that", "blue", "school", "table"};
//initialize vars
int tryLeft = 6; //user gets 6 wrong guesses
int guessTot = 0; //initializes user guess counter
boolean fin = false; //fin controls do-while loop; stands for "finished?"
String guessChar; //use if user enters only 1 letter
String guessed = ""; //contains all previous guesses
StringBuffer asterisk; //StringBuffer allows strings to be mutable; ast = asterisks in the word to display
//initialize scanner
Scanner userInput = new Scanner(System.in);
String word = randomWord(words);
//while user has not correctly guessed word, and has not lost the game, do this:
do {
//call randomWord method
//**System.out.println(word);;
//call asterisk method, wordAsAst
asterisk = wordAsAst(word);
//**System.out.println(asterisk);
System.out.println("Your word is: " + word);
System.out.println("Enter a letter in the word: ");
guessChar = userInput.next();
if(guessChar.length() == 1) { //checking that user entered only 1 character
guessed = guessed + guessChar;
if (word.indexOf(guessChar) == 0) { //if guessChar is not present in the word...
tryLeft = tryLeft - 1; //remove one try
System.out.println("Incorrect guess");
}
else { //if guessChar is present in teh word...
checkWord(asterisk, word, guessChar);
System.out.println("Good guess!");
}
if(tryLeft == 0) {
System.out.println("You have run out of tries. Sorry!");
fin = true;
}
if(word.equals(asterisk.toString())) {
System.out.println("Congratulations, you've won!");
fin = true;
}
}
}while(!fin);
}
public static String randomWord(String[] words) {
int indWords = new Random().nextInt(words.length);
String randWord = (words[indWords]);
return randWord;
}
public static StringBuffer wordAsAst(String word) {
StringBuffer asterisks = new StringBuffer(word.length());
for (int i = 0; i<=word.length(); i++) {
asterisks.append("*");}
return asterisks;
}
public static StringBuffer checkWord(StringBuffer asterisk, String word, String guessChar) {
for(int j = 0; j<word.length(); j++) {
if(word.charAt(j) == guessChar.charAt(0)){
asterisk.setCharAt(j, guessChar.charAt(0));
}
}
return asterisk;
}
}
import java.util.Scanner;
导入java.util.Random;
公共级刽子手{
公共静态void main(字符串[]args){
//将单词设置为数组
String[]words={“write”、“this”、“that”、“blue”、“school”、“table”};
//初始化变量
int-tryLeft=6;//用户得到6个错误猜测
int guessTot=0;//初始化用户猜测计数器
布尔fin=false;//fin控件执行while循环;表示“完成?”
String guessChar;//如果用户只输入1个字母,则使用
String guessed=“;//包含以前的所有猜测
StringBuffer asterisk;//StringBuffer允许字符串可变;ast=要显示的单词中的星号
//初始化扫描仪
扫描仪用户输入=新扫描仪(System.in);
字符串字=随机字(字);
//当用户未正确猜出单词且未输掉游戏时,请执行以下操作:
做{
//调用随机词方法
//**System.out.println(word);;
//调用星号方法WordAst
星号=单词ast(单词);
//**系统输出打印项次(星号);
System.out.println(“您的单词是:“+word”);
System.out.println(“在单词中输入一个字母:”);
guessChar=userInput.next();
如果(guessChar.length()==1){//检查用户只输入了1个字符
猜测=猜测+猜测字符;
如果(word.indexOf(guessChar)==0){//如果单词中不存在guessChar。。。
tryLeft=tryLeft-1;//删除一次尝试
System.out.println(“错误猜测”);
}
否则{//如果单词中存在guessChar。。。
校验字(星号、字、猜字符);
System.out.println(“猜得好!”);
}
如果(tryLeft==0){
System.out.println(“您尝试的次数已用完。对不起!”);
fin=真;
}
if(word.equals(asterisk.toString())){
System.out.println(“恭喜你,你赢了!”);
fin=真;
}
}
}而(!fin);
}
公共静态字符串随机字(字符串[]字){
int indWords=new Random().nextInt(words.length);
字符串randWord=(words[indWords]);
返回随机词;
}
公共静态StringBuffer WordAsat(字符串字){
StringBuffer星号=新的StringBuffer(word.length());
对于(int i=0;i更改此行:
word.indexOf(guessChar) == 0
为此:
word.indexOf(guessChar) == -1
在我看来,if(word.indexOf(guessChar)==0){
这一行非常可疑。在Java中,字符串中元素(以及数组和列表)的位置从0到n
。您的if语句询问单词中guessChar的位置是否在0,即第一位
t h i s
0 1 2 3
t h i s
0 1 2 3
t确实位于单词“this”中的位置0。使用-1检查guessChar是否不在单词中,而不是检查第一个位置
您还可以使用String.contains(String)方法,该方法如下所示:
如果(word.contains(guessChar)){
在下一行(n.36)检查字符串的第一个字符:
if (word.indexOf(guessChar) == 0)
改为
if (word.indexOf(guessChar) == -1)
你的问题在第36行
if (word.indexOf(guessChar) == 0) { //if guessChar is not present in the word...
Java的indexOf
如返回中所述:
此对象表示的字符序列中第一次出现的字符的索引,如果字符未出现,则为-1
如果您开始猜测t
(单词为this
),您的程序将输出0
,因为t
在单词this
中有索引0
由于indexOf
在字符未出现时返回-1,因此应将此行更改为:
if (word.indexOf(guessChar) == -1) { //if guessChar is not present in the word...
现在是学习如何使用IDE调试器的最佳时机。word.indexOf(guessChar)=0
表示该字母是在索引0
中找到的。实际上,您需要检查-1
,这意味着找不到它……或者只需使用if(word.contains(guessChar))
谢谢大家,现在工作的方向肯定是正确的!虽然它能识别单词中是否有字母,但我的StringBuffer WordAst方法有问题,我不确定它是什么,但我会继续努力!如果您能提供帮助,我们将不胜感激。