如何在java刽子手游戏中处理重复的字母?

时间:2014-03-23 10:56:32

标签: java

我真的很困惑在我的java刽子手游戏中处理重复的字母,例如单词“香蕉”中有多个“a”,但我的程序只处理第一个' a'并将其他人排除在外。除此之外,该程序可以正常工作,没有重复的字母,例如'刷&#39 ;.这有什么解决方案可以处理重复的字母吗?我感谢任何帮助,谢谢!

到目前为止,这是我的代码:

import java.util.Scanner;
import java.util.Arrays;

public class Hangman{

public static void main(String []args){
Scanner Input = new Scanner(System.in);

    String[] CollectionOfWords = {"","gravity","banana","gate","processor","momentum","earth","star","light","television","pan","cupboard"};

    int radmNumber = (int) Math.ceil (Math.random() * CollectionOfWords.length);
    int counter = 10;
    String radmWord = CollectionOfWords[radmNumber];

    char[] genRadmLetter = radmWord.toCharArray();
    char[] genRadmLetter2 = radmWord.toCharArray();
    for (int x = 0; x<genRadmLetter.length; x++){
        genRadmLetter[x]='?';
    }

    System.out.println(String.valueOf(genRadmLetter));
    System.out.println("Hello. Guess a letter.");
    char guessedLetter = Input.next().charAt(0);
    int RW = radmWord.indexOf(guessedLetter);

    if (RW >= 0 ){

    genRadmLetter[RW] = guessedLetter;
    System.out.println(genRadmLetter);

    }

    if (RW == -1){
        System.out.println("Wrong letter, try again.");
        counter = counter - 1; 
        System.out.println("Lives left: " + counter);
    }

    while (counter != 0) {

        System.out.println("Guess a letter.");
        guessedLetter = Input.next().charAt(0);
        RW = radmWord.indexOf(guessedLetter);

        if (RW >= 0 ){

        genRadmLetter[RW] = guessedLetter;
        System.out.println(genRadmLetter);
    }

        if (RW == -1){
        System.out.println("Wrong letter, try again.");
        counter = counter - 1; 
        System.out.println("Lives left: " + counter);
    }

        boolean result = Arrays.equals(genRadmLetter, genRadmLetter2);
        if (result == true){
            break;
        }

        if (counter == 0){
            break;
        }

    }

    if (counter == 0){
        System.out.println("You lose. The word was: " + radmWord);
    }

    else {
        System.out.println("Well done, you have guessed the word.");
        System.out.println("Your final score is: " + counter);
    }

}

}

1 个答案:

答案 0 :(得分:0)

你可以使用while循环,所以当RW!= -1时,使用indexof,来自之前的RW。

这一行:

if (RW == -1){
        System.out.println("Wrong letter, try again.");
        counter = counter - 1; 
        System.out.println("Lives left: " + counter);
} else {
        System.out.println(genRadmLetter);
        while (RW >= 0 ){
            genRadmLetter[RW] = guessedLetter;
            RW = radmWord.indexOf(guessedLetter, RW+1); 
        }
}

这是为了让它以你尝试过的方式工作。您可以使用其他方式,将条目保持为字符串并使用replaceAll。

另一点是,你是在第一个while循环之外做一个检查,你可以把它放在里面写更少的代码并使它更清晰。