Directions: SHOW ALL YOUR WORK. REMEMBER THAT PROGRAM SEGMENTS ARE TO BE WRITTEN IN JAVA.

Notes:

Assume that the classes listed in the Java Quick Reference have been imported where appropriate.

Unless otherwise noted in the question, assume that parameters in method calls are not null and that methods are called only when their preconditions are satisfied.

In writing solutions for each question, you may use any of the accessible methods that are listed in classes defined in that question. Writing significant amounts of code that can be replaced by a call to one of these methods will not receive full credit.

Consider a guessing game in which a player tries to guess a hidden word. The hidden word contains only capital letters and has a length known to the player. A guess contains only capital letters and has the same length as the hidden word.

After a guess is made, the player is given a hint that is based on a comparison between the hidden word and the guess. Each position in the hint contains a character that corresponds to the letter in the same position in the guess. The following rules determine the characters that appear in the hint.

A table is shown with two columns titled If the letter in the guess is… on the left and the corresponding character in the hint is on the right. The first row reads also in the same position in the hidden word on the left, and the matching letter on the right. The second row reads also in the hidden word but in a different position on the left, and a plus sign on the right. The third row reads not in the hidden word on the left, and an asterisk on the right.

The HiddenWord class will be used to represent the hidden word in the game. The hidden word is passed to the constructor. The class contains a method, getHint, that takes a guess and produces a hint.

For example, suppose the variable puzzle is declared as follows.

HiddenWord puzzle = new HiddenWord(“HARPS”);

The following table shows several guesses and the hints that would be produced.

A table is shown with two columns titled Call to getHint on the left and String returned on the right. The first row reads puzzle dot getHint open parentheses “AAAAA” close parentheses on the left, and “plus A plus plus plus” on the right. The second row reads puzzle dot getHint open parentheses “HELLO” close parentheses on the left, and “H asterisk asterisk asterisk asterisk” on the right. The third row reads puzzle dot getHint open parentheses “HEART” close parentheses on the left, and “H asterisk plus plus asterisk” on the right. The fourth row reads puzzle dot getHint open parentheses “HARMS” close parentheses on the left, and “HAR asterisk S” on the right. The fifth row reads puzzle dot getHint open parentheses “HARPS” close parentheses on the left, and “HARPS” on the right.

Write the complete HiddenWord class, including any necessary instance variables, its constructor, and the method, getHint, described above. You may assume that the length of the guess is the same as the length of the hidden word.

FRQ Type: Classes

Key Algorithm:

The key algorithm in the HiddenWord class revolves around generating hints for a guessing game based on a given guess and the hidden word. Let’s analyze how this algorithm matches the FRQ type of Classes:

  1. Class Structure: The HiddenWord class is appropriately designed to encapsulate the functionality related to the hidden word and generating hints. It contains a constructor to initialize the hidden word and a method getHint to produce hints based on guesses.

  2. Instance Variables: The class maintains an instance variable hiddenWord to store the hidden word provided during object creation. This ensures that the hidden word is accessible within the class methods.

  3. Method Implementation: The getHint method implements the logic to compare a guess with the hidden word and generate hints accordingly. It traverses both strings character by character, determining if characters match or if they appear in different positions, and constructs the hint string accordingly.

  4. Instance Method: The getHint method is an instance method that operates on a specific instance of the HiddenWord class. It utilizes the instance variable hiddenWord to generate hints based on the provided guess.

public class HiddenWord {
    private String hiddenWord;

    public HiddenWord(String word) {
        hiddenWord = word;
    }

    public String getHint(String guess) {
        StringBuilder hint = new StringBuilder();

        for (int i = 0; i < guess.length(); i++) {
            char guessChar = guess.charAt(i);
            char hiddenChar = hiddenWord.charAt(i);

            if (guessChar == hiddenChar) {
                hint.append(guessChar);
            } else if (hiddenWord.indexOf(guessChar) != -1) {
                hint.append("+");
            } else {
                hint.append("*");
            }
        }

        return hint.toString();
    }

    public static void main(String[] args) {
        HiddenWord puzzle = new HiddenWord("LOLLL");
        System.out.println("Guess: OOOOO -> Hint: " + puzzle.getHint("OOOOO"));
        System.out.println("Guess: HELLO -> Hint: " + puzzle.getHint("HELLO"));
        System.out.println("Guess: WORLD -> Hint: " + puzzle.getHint("WORLD"));
        System.out.println("Guess: LMAOS -> Hint: " + puzzle.getHint("LMAOS"));
        System.out.println("Guess: LOLLL -> Hint: " + puzzle.getHint("LOLLL"));
    }
}
HiddenWord.main(null);
Guess: OOOOO -> Hint: +O+++
Guess: HELLO -> Hint: **LL+
Guess: WORLD -> Hint: *O*L*
Guess: LMAOS -> Hint: L**+*
Guess: LOLLL -> Hint: LOLLL
public class HiddenWord {
    private String hiddenWord;

    public HiddenWord(String word) {
        hiddenWord = word;
    }

    public String getHint(String guess) {
        StringBuilder hint = new StringBuilder();

        for (int i = 0; i < guess.length(); i++) { // Loop through each character
            char guessChar = guess.charAt(i); // Get the character at the current index
            char hiddenChar = hiddenWord.charAt(i); // Get the character at the same index in the hidden word

            if (guessChar == hiddenChar) { // If the guessed character matches the corresponding character in the hidden word
                hint.append(guessChar); // Append the guessed character to the hint
            } else if (hiddenWord.indexOf(guessChar) != -1) { // If the guessed character exists elsewhere in the hidden word
                hint.append("+"); 
            } else { // If the guessed character is not in the hidden word
                hint.append("*"); 
            }
        }

        return hint.toString();
    }

    public static void main(String[] args) {
        HiddenWord puzzle = new HiddenWord("LOLLL");
        System.out.println("Guess: OOOOO -> Hint: " + puzzle.getHint("OOOOO"));
        System.out.println("Guess: HELLO -> Hint: " + puzzle.getHint("HELLO"));
        System.out.println("Guess: WORLD -> Hint: " + puzzle.getHint("WORLD"));
        System.out.println("Guess: LMAOS -> Hint: " + puzzle.getHint("LMAOS"));
        System.out.println("Guess: LOLLL -> Hint: " + puzzle.getHint("LOLLL"));
    }
}
HiddenWord.main(null);
Guess: OOOOO -> Hint: +O+++
Guess: HELLO -> Hint: **LL+
Guess: WORLD -> Hint: *O*L*
Guess: LMAOS -> Hint: L**+*
Guess: LOLLL -> Hint: LOLLL