HiddenWord Solution

Creating a full class has been a popular free response question for the past few years on the AP Computer Science exam. In 2015 they asked you to create a class called HiddenWord that mimicked a word guessing game.

The idea was that the computer knew a word and you tried to guess it. The computer would then take your guess and compare it to the answer. If you guess had the same letter in the same position, that letter was returned in the clue. If your guess had a matching letter, but in the wrong spot the clue would contain a + in that position. And if the letter doesn’t exist, a * would be in that position.

For example, let’s say that the answer word was HELLO. Here are a few guesses and what they would return.

  • ABCDF would return *****. There are no matching letters.
  • HOWDY would return H****. There’s an H, and it’s in the right position.
  • THOSE would return *++**. There are an H and an O, but they’re in the wrong positions.
  • HELPS would return HEL**.
  • HELLO would return HELLO

The full class

Here’s the working solution that I came up with.

public class HiddenWord {
    private String word;
    
    public HiddenWord(String w) {
        word = w; 
    }
    
    public String getHint(String guess) {
        String out = "";
        
        for (int i=0; i<guess.length(); i++) {
            String guessCharacter = guess.substring(i, i+1);
            String wordCharacter = word.substring(i, i+1);
            if (guessCharacter.equals(wordCharacter)) {
                out += guessCharacter;
            }
            else if (word.indexOf(guessCharacter) >= 0) {
                out += "+";
            }
            else {
                out += "*";
            }
        }
        
        return out; 
    }
}

You have to know to use public class HiddenWord to define a class named HiddenWord. For the AP exam, classes are public.

There needs to be an instance variable to hold the answer, and it needs to be a String. I named mine word. And it should be private.

The problem gave an example constructor call where the answer string was passed in. It looked something like this – HiddenWord game = new HiddenWord("HELLO");. That tells us that our constructor must take exactly one String parameter.

And you have to implement a method called getHint that also takes a String parameter. guess would then be compared to word looking at each character. If the characters are an exact match, that character it put into out. If they don’t match, but the character from guess is somewhere in word then a + symbol is put into out. And if neither is true then a * is put into out.

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *