Как хранить, сколько раз логическое значение вернуло false / true - PullRequest
0 голосов
/ 06 февраля 2019

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

Мой план - минус 1 жизнь.только если количество возвращенных ложных значений равно длине слова, но я не знаю, как сохранить количество возвращенных ложных значений, чтобы сравнить их с длиной слова

import java.util.Scanner;

public class res{

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        String word ="Hello";
        int guessedLetters = 0;

        //System.out.print(" Word has "+word.length()+" letters ");
        //System.out.print("    You have 9 lives left     ");

        while(guessedLetters<word.length()) {

            int lives = 9;
            char input = in.nextLine().charAt(0);
            lives =livesLeft(lives, word, input, guessedLetters);
            //res = resolved(res, word, input, lives);

            //Lives
            //method to guess
            //initial word
            //what to do if letter is not correct
            //what to do if letter is correct

        }

    }


    public static int livesLeft( int lives, String word, char input, int guessedLetters) {

        boolean res = false;

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

            if(input==word.charAt(i)) {

                //System.out.print(" Your guessed the " + i + "th letter right");
                res = true;
                guessedLetters++;

            }else {

                res =false;
                lives--;

            }

            System.out.print(res+"  " + lives + "  ");

        }

        //if res returns false on word.length() many times lives --;

        //System.out.print(res+"  " + lives + "  ");

        //System.out.println("You have "+lives+" lives left ");
        //System.out.println("You have guessed "+guessedLetters
                    //+" out of " + word.length() +" letters in the word ");

        return lives;


    }

    public static void printGameState() {

        //method to print out How many letters guessed

    }

}

Я ожидаю, что он выведет True и сохранит значения int в первоначальном значении, если пользовательский ввод верен, и выдаст false и минус 1 от int в случае неверного ввода пользователя.Фактический вклад - это просто количество жизней, застрявших в 9

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Ваш цикл while устанавливает lives=9, поэтому, даже если ваш метод изменяет значение lives, в следующий раз, когда цикл приходит в себя, значение жизни сбрасывается на 9. Переместите ваше объявление и присвойте lives ввне вашего цикла while

0 голосов
/ 06 февраля 2019

Не знаю, правильно ли я вас понимаю.Но у вас есть переменная «Life», которая равна 9. Проблема здесь в том, что ваши «жизни» инициализированы внутри цикла while.Это означает, что после каждого предположения жизни снова будут. 9. Чтобы исправить это, вам, вероятно, следует инициализировать переменную перед циклом (строка 9-15):

int guessedLetters = 0;
int lives = 9;

while(guessedLetters<lives) {
  ...
}  

Также будет проблема с обратным отсчетомжизни.В методе «LifeLeft» у вас есть цикл for, который перебирает каждую букву слова.И прямо сейчас вы вычитаете один после, если письмо не является правильным.

for(int i =0; i<word.length();i++) {
   ...
   if{
      ...
   }else {
      res =false;
      lives--; // <--- right here
   } 
}

Например, слово «Привет», и игрок угадал букву «А». Игра будет перебирать каждую букву по одной. В конце вы потеряете 5 жизней. Я думаю, что этоэто не то, что вы хотите. Чтобы решить эту проблему, вы должны вычесть после цикла for, как это:

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

Я надеюсь, что это немного полезно для вас.

...