Как я могу определить количество догадок в соответствии с длиной слова во время цикла в Java? - PullRequest
0 голосов
/ 12 января 2020

Я хотел бы получить некоторую помощь в кодировании этой части, когда программа запрашивает ввод столько раз, сколько длина слова.

Итак, когда мы запускаем программу, она выбирает слово случайным образом из массив и, например, если мы ищем слово «команда», это означает, что у нас есть четыре догадки.

Я пытался решить это с помощью фрагмента ниже. Это кажется таким простым, но я что-то упускаю:

while(!guess.equals(choosenWord) && letters <= choosenWord.length()) {
                System.out.print("Your guess is: ");
                guess = sc.nextLine();

Следующая часть, в которой мне нужен некоторый намек, - если у нас есть совпадения в символах, то должен отображаться найденный символ и знак "-" должен показываться где-либо еще: например, слово «команда» по-прежнему ищется, и мы предполагаем, что «ребенок», чем «--a-».

Спасибо за советы.

import java.util.Scanner;


public class FindTheWord {


    public static void main(String[] args) {

        findTheWord();
    }

    public static void findTheWord() {
        Scanner sc = new Scanner(System.in);
        String[] words = {
            "dog", "cat", "house", "love", "friend", "paper", "summer", "chips",
            "number", "file", "program", "lotto", "work", "funny", "database",
            "team", "profile", "facebook", "bean", "winter", "spring", "java", 
            "examination", "hospital", "birth", "baby", "newborn", "airplane",
            "kindergarten", "autumn"};

        int randomWord = (int) (Math.random() * 31);
        String choosenWord = " ";
        int letters = 0;
        String guess = " ";
        char ch = ' ';

        for (int i = 0; i < words[randomWord].length(); i++) {
            choosenWord = words[randomWord];

        }
        for (int j = 0; j < choosenWord.length(); j++) {
            letters = choosenWord.length();


        while(!guess.equals(choosenWord) && letters <= choosenWord.length()) {
            System.out.print("Your guess is: ");
            guess = sc.nextLine();

        }
        }
        System.out.println(words[randomWord]);
        System.out.println(letters);
    }


    }

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Полное решение (проверено и проверено), просто вам нужно его запустить.

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

public static void findTheWord() {

    //Init
    Scanner sc = new Scanner(System.in);
    String[] words = {
            "dog", "cat", "house", "love", "friend", "paper", "summer", "chips",
            "number", "file", "program", "lotto", "work", "funny", "database",
            "team", "profile", "facebook", "bean", "winter", "spring", "java",
            "examination", "hospital", "birth", "baby", "newborn", "airplane",
            "kindergarten", "autumn"};

    String randomWord = words[(int) (Math.random() * 31)];
    String guess = "";

    //Start Guessing
    for (int i = 0; i <= randomWord.length(); i++) {

        if (!guess.equals(randomWord)) {
            System.out.print("Your guess is: ");
            guess = sc.nextLine();
            String result = checkGuessMatch(randomWord, guess);
            if (!result.isEmpty())
                System.out.println(result);
        } else {
            System.out.println("#################################");
            System.out.println("############SUCCESS#############");
            System.out.println("##########THE WORD WAS###" + guess);
            System.out.println("#################################");
            return;
        }
    }

    System.out.println("####GAME OVER###");
    System.out.println("THE WORD WAS = " + randomWord);
}

public static String checkGuessMatch(String word, String guess) {
    Boolean sameIndexIsExist = false;
    char[] wordChars = word.toCharArray();
    char[] guessChars = guess.toCharArray();
    String target = "";

    for (int i = 0; (i < word.length()); i++) {

        if (i < guess.length() && guessChars[i] == wordChars[i]) {
            target = target + guessChars[i];
            sameIndexIsExist = true;
        } else
            target = target + "-";
    }
    if (!sameIndexIsExist)
        return "";
    else return target;

}
0 голосов
/ 12 января 2020

Вот одно решение с троичным оператором (? :):

...
guess = sc.nextLine();
for (char c : chosenWord.toCharArray()) {
  System.out.print(guess.contains(String.valueOf(c)) ? c : '-');
}
...
...