Java Java Objects Creating the MVP Remaining Tries

David Sciuto
David Sciuto
753 Points

I am stuck in an infinite loop and can't seem to figure out why.

I am working on trying to follow along with the video and something seems to have broke along the way. I have went through countless times and cant find the problem and was hoping someone could help.

Here is the code I am using.

public class Hangman {

  public static void main(String[] args) {
    // Your incredible code goes here...
    Game game = new Game ("treehouse");
    Prompter prompter = new Prompter(game);
    while (game.getRemainingTries() > 0) {
      prompter.displayProgress();
      prompter.displayProgress();
    } 
  }
}

class Game {
  public static final int MAX_MISSES = 7;
  private String answer;
  private String hits;
  private String misses;

  public Game(String answer) {
    this.answer = answer;
    hits = "";
    misses = "";
  }

  public boolean applyGuess(char letter) {
    boolean isHit = answer.indexOf(letter) != -1;
    if (isHit) {
      hits += letter;
    } else {
      misses += letter;
    }
    return isHit;
  }

  public int getRemainingTries() {
    return MAX_MISSES - misses.length();
  }

  public String getCurrentProgress() {
    String progress = "";
    for (char letter : answer.toCharArray ()) {
      char display = '-';
      if (hits.indexOf(letter) != -1) {
        display = letter;
    }
    progress += display;
  }
  return progress;
}
}

import java.util.Scanner;

class Prompter {
  private Game game;

  public Prompter(Game game) {
    this.game = game;
  }

  public boolean promptForGuess(){
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter a letter:  ");
    String guessInput = scanner.nextLine();
    char guess = guessInput.charAt(0);
    return game.applyGuess(guess);
  }

  public void displayProgress() {
    System.out.printf("You have %d tries left to solve:  %s%n",
                      game.getRemainingTries(),
                      game.getCurrentProgress());
  }
}
David Sciuto
David Sciuto
753 Points

The only thing the loop is doing is displaying progress, but in the video Craig seems to have the same code but with a different outcome.

1 Answer

Steven Parker
Steven Parker
200,698 Points

The main loop in Hangman.java only displays the progress (twice each time!):

    while (game.getRemainingTries() > 0) {
      prompter.displayProgress();
      prompter.displayProgress();
    } 

Since it doesn't do anything that would change the remaining tries, it continues forever.

But in the video code, the main loop displays the progress, and then gets another guess:

    while (game.getRemainingTries() > 0) {
      prompter.displayProgress();
      prompter.promptForGuess();  // <-- get a guess (and change remaining tries)
    } 
David Sciuto
David Sciuto
753 Points

Thanks Steven, honestly sometimes it helps having a second pair of eyes looking at something. I swear I was looking at this for 20 minutes and didn't see anything wrong haha.