Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与新手有一些严重的问题”;“刽子手”;Java程序_Java - Fatal编程技术网

与新手有一些严重的问题”;“刽子手”;Java程序

与新手有一些严重的问题”;“刽子手”;Java程序,java,Java,这是我的程序,但当我运行它时,结果是不正确的。例如,如果计算机选择“this”作为游戏的单词,并且输入了“t”,则它被标记为错误,而其他字母被标记为正确。很明显,这里有点不对劲,但就我的一生而言,我无法理解。感谢您的帮助 import java.util.Scanner; import java.util.Random; public class Hangman { public static void main(String[] args) { //set words

这是我的程序,但当我运行它时,结果是不正确的。例如,如果计算机选择“this”作为游戏的单词,并且输入了“t”,则它被标记为错误,而其他字母被标记为正确。很明显,这里有点不对劲,但就我的一生而言,我无法理解。感谢您的帮助

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方法有问题,我不确定它是什么,但我会继续努力!如果您能提供帮助,我们将不胜感激。