2015-12-10 2 views
0

У меня небольшая проблема при попытке сделать игру в палач. Раньше я писал о другой ошибке, но теперь я сталкиваюсь с новой, которую я не могу понять. Я пытаюсь проверить, что письмо не было введено. Но он пропускает весь раздел инструкции if/else. Когда я запускаю этот код:Java - Создание игры для палача

общественного класса TestingStuff {

static StringBuffer randomWord; 
static Scanner console = new Scanner(System.in); 
static int totalTries = 1; 
static String guess; 
static char finalGuess; 

public static void main(String[] args) throws Exception { 
    randomWord = TestingStuff.sendGet(); 
    char[] guesses = new char[26]; 
    int length = randomWord.length(); 

    System.out.print("* * * * * * * * * * * * * * *" 
      + "\n* Welcome to Hangman! *" 
      + "\n* * * * * * * * * * * * * * *"); 
    System.out.println("\nYou get 10 tries to guess the word by entering in letters!\n"); 
    System.out.println(randomWord); 
    /* 
    Cycles through the array based on tries to find letter 
    */ 
    while (totalTries <= 10) { 
     System.out.print("Try #" + totalTries + "\nWord: " + makeDashes(randomWord)); 

     //Right here: Search through the array of guesses, make it 26 characters to represent the alphabet 
     //if the user guess equals an already guessed letter, add to try counter. If it's correct, then reveal the letter that is 
     //correct and do it again without adding to the try counter. 
     System.out.print("\nWhat is your guess? "); 
     guess = console.nextLine(); 
     finalGuess = guess.charAt(0); 
     guesses[totalTries - 1] = finalGuess; //Puts finalGuess into the array 

      for (int i = 0; i < totalTries; i++) { //checks to see if the letter is already guessed 
       if (guesses[i] != finalGuess) { 
        System.out.println(guesses[i]); 
        for (int j = 0; i < length; j++) { //scans each letter of random word 
         if (finalGuess == randomWord.charAt(j)) { 
          //put a method that swaps out dashes with the guessed letter 
          totalTries++; 
         } 
        } 
       } else { 
        System.out.println("Letter already guessed, try again! "); 
       } 
      } 
     } 
    } 

Я получаю выход этого:

* * * * * * * * * * * * * * * 
* Welcome to Hangman! * 
* * * * * * * * * * * * * * * 
You get 10 tries to guess the word by entering in letters! 

ostracization 
Try #1 
Word: ------------- 
What is your guess? a 
Letter already guessed, try again! 
Try #1 
Word: ------------- 
What is your guess? 

Это просто сказать, что письмо уже догадались, когда есть пустой элемент в массиве. Я что-то упустил?

+0

'if (guesses [i]! = FinalGuess) {} else {« Письмо уже догадалось, попробуйте еще раз! »}' Довольно ясно. Если вы хотите управлять элементом «пустой» (что является пустым?), Тогда вам нужно добавить условие для него. – m0skit0

+0

@ m0skit0, когда я предлагаю пользователю ввести в предположение, у меня есть он, поэтому он поместит его в массив значений char. Разве это не то, что я здесь делаю? – Shayd3

ответ

0

Да. Переменная totalTries изначально 1. Вы читаете свою догадку, а затем вы задали guesses[totalTries - 1] персонажу, что означает guesses[0] равно finalGuess. Затем вы переходите через i от 0 до totalTries - 1, который также равен 0. Цикл выполняется один раз и проверяется, что первая запись не является finalGuess. Но это мы просто установили.

Если вы используете цикл for только для обнаружения дублирующих догадок, вы можете изменить условие в первом для цикла на i < totalTries - 1, и оно должно работать, но вам нужно переместить маркировку слова палача ниже. Для минимального воздействия на ваш код используйте решение m0skit0.

+0

Я не думаю, что ваше исправление работает, потому что проблема возникает на первой итерации, а не в последней. – m0skit0

+0

@ m0skit0 Ах, ты прав, я не заметил, что он не только проверяет дублирующее предположение, но и заменяет его на цикл. В этом случае ваше решение будет лучше. Я отредактирую свое решение, чтобы лучше отразить мою линию мышления. –

2

Пройдет через код с вашим примером (я настоятельно рекомендую вам сделать это самостоятельно с помощью отладчика):

guesses[totalTries - 1] = finalGuess; // guesses[0] = 'a' 
if (guesses[i] != finalGuess) // i = 0, guesses[0] = 'a', finalGuess = 'a' 
else System.out.println("Letter already guessed, try again! "); 

Вы можете просто переместить

guesses[totalTries - 1] = finalGuess; //Puts finalGuess into the array 

в конце крайнего for петля. Нет необходимости хранить догадки, прежде чем обрабатывать ее.