java - 我正在创建一个刽子手程序,但我在单词更新方法方面遇到了一些问题

标签 java methods replace charat

当代码运行时,您要求输入 char 并输入一个字母,让我们说“e”,输出将使其变为“eeeee”,而不是在部分单词方法中填写 e。我不知道如何解决它。我认为问题出在 replaceChar 方法或 updatePartialWord 方法中。希望得到一些帮助。谢谢! P.S 即使有更简单的方法,我也需要保持方法输入相同!

// creates partialWord using string length then creating a new string with the same amount of dashes
public static String createPartialWord(String secretWord)
{
    String newsecretWord = "";
    int wordLength = secretWord.length();
    while (wordLength > 0)
    {
        newsecretWord = newsecretWord + "-";
        //System.out.print("-");
        wordLength--;
    }
    System.out.println();
    return newsecretWord;

}
//replaces character at certain ints
public static String replaceChar(String word, char c, int i)
{


     //return word.replace(word.charAt(i), c);
    String newText = word.replace(word.charAt(i), c);
    return newText;

}

public static String updatePartialWord(String partial, String secret, char c)
{


    if(c==secret.charAt(0))
    {
         return replaceChar(partial, c, 0);
    }   
    if(c==secret.charAt(1))
    {
         return replaceChar(partial, c, 1);  
    }       
    if(c==secret.charAt(2))
    {
         return replaceChar(partial, c, 2);
    }   
    if(c==secret.charAt(3))
    {
         return replaceChar(partial, c, 3);

    }   
    if(c==secret.charAt(4))
    {
         return replaceChar(partial, c, 4);
    }   



    return partial;
}
//Prints hangman 
public static void printHangman(int guessLeft)
{
    String HEAD = " ";
    String BODY = " ";
    String LEGS = " ";
    String LEFTARM = " ";
    String RIGHTARM = " ";
    System.out.println("_____");
    System.out.println("|   |");
    if (guessLeft < 6) {
        HEAD = "()";
    }
    System.out.println("|   " + HEAD);
    if (guessLeft < 5) {
        BODY = "||";
    }
    if (guessLeft < 4) {
        LEFTARM = "\\";
    }
    if (guessLeft < 3) {
        RIGHTARM = "/";
    }
    System.out.println("|  " + LEFTARM + BODY + RIGHTARM);
    if (guessLeft < 2) {
        LEGS = "/";
    }
    if (guessLeft < 1) {
        LEGS += "\\";
    }
    System.out.println("|   " + LEGS);
    System.out.println("|_____\n\n\n\n");
}
public static String generateSecretWord()
{
    String[] names = { "alone", "apple", "anode", "abuse", "angle", "amaze","adobe","amuse",
            "avoid","peter","sound","doubt","upper","lower","layer","enter","alter","boxer",
            "faced", "alive","adore","names","voice","water","plate","pepsi","pizza","paste",
            "hello","sugar","money","paper","while","times", "mouth","other","agile","again",
            "acute","arise","argue","ankle","badge","blaze","bride","chase","sense","craze",
            "dance","false","exile","drove"};

    String name = names[(int) (Math.random() * names.length)];

    return name;
}
public static void main(String[] args)
{



    Scanner stdin = new Scanner(System.in);
    String secretWord = generateSecretWord();

    String partialWord = createPartialWord(secretWord);

    System.out.println("  Welcome to HangMan");
    System.out.println("I picked a secret word");
    System.out.println();
    //start for statement for main game
    System.out.println("The current Partial Word is: " + partialWord);
    for(int i = 6;i>0;)
    {

        System.out.println("The current Hangman picture is");
        printHangman(i);
        System.out.println("Player 2, you have " + i + " remaining guesses");
        System.out.println("Would you like to guess the secret work or guess a character?");
        System.out.println("Type \"word\" for word, type \"char\" for character");
        String playerInput = stdin.nextLine();
        String charInput = "char";
        String wordInput = "word";

        if(playerInput.equals(charInput))
            {
                System.out.println("Please type a character");
                char input = stdin.nextLine().charAt(0);
             if(secretWord.charAt(0)== input || secretWord.charAt(1)== input || secretWord.charAt(2)== input || 
                     secretWord.charAt(3)== input || secretWord.charAt(4)== input)
             {
                 System.out.println("That character is in the secret word");
                System.out.println("The current partial word is: " + updatePartialWord(partialWord, secretWord, input));


             }
             else 
             {
                 System.out.println("Sorry that charcater is not in the secret word");
                System.out.println("The current partial word is: " + updatePartialWord(partialWord, secretWord, input));
                 if(i==1)
                {
                    System.out.println("You've killed the hangman. You've lost the game");
                    printHangman(0);
                    break;
                }
                 i--;
             }

            }
        else
        {
            System.out.println("Please guess the word");
            String userGuess = stdin.nextLine();
            if(userGuess.equals(secretWord))
            {
                System.out.print("Congrats that is the secret word! You've won the game!");
                System.out.println("Here is the hangman");
                printHangman(i);
                break;
            }
            else
            {
                System.out.println("Sorry thats not the secret word. You've lost.");
                break;
            }
        }

     }

}

}

最佳答案

public static String replaceChar(String word, char c, int i) {
    String newText = word.replace(word.charAt(i), c);
    :

本例中的单词-----,因此您要将位置i(即-)处出现的所有字符替换为该字母。

因此所有 - 字符都将成为您刚刚输入的字符。

当且仅当您的 secret 单词中的等效字符与刚刚输入的字符匹配时,您应该更改部分单词中的每个字符,例如:

public static String replaceChar(String word, String secret, char c) {
    for (int i = 0; i < word.length(); i++) {
        if (secret.charAt(i) == c) {
            word = word.substring(0, i) + c + word.substring(i+1); 
        }
    }
    return word;
}

当然,由于您现在使用的是 secret 单词并且字符的位置无关,因此您可以更改传入的内容。调用代码可以修改为:

if (c == secret.charAt(0))
    return replaceChar(partial, secret, c);
if (c == secret.charAt(1))
    return replaceChar(partial, secret, c);
// :
// and so on.

当然,即使修复了,您仍然遇到问题:

System.out.println("The current partial word is: " + updatePartialWord(partialWord, secretWord, input));

这会输出由函数计算出的新部分单词,但它实际上不会更改部分单词。您需要以下内容:

partialWord = updatePartialWord(partialWord, secretWord, input));
System.out.println("The current partial word is: " + partialWord);

关于java - 我正在创建一个刽子手程序,但我在单词更新方法方面遇到了一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29484109/

相关文章:

java - 重命名 JAX-WS 项目 - 现在找不到 WSDL

java - 如何将接口(interface)变量分配给子接口(interface)变量?

Python:替换字符串中的十进制数

php - 在 HTML 的某些点,我需要关闭每个打开的标签,插入一个 DIV,然后再次打开所有标签,以便

java - Java 有没有一种简单的哈希方法?

java - 单独方法中的数组

java - 为什么这个通用的 java 方法接受两个不同类型的对象?

java - 带参数的方法

java - 替换括号时出现异常

java - java中带有二维键的映射