それで、Wheel of fortune/hangman をプレイしていて、解決策を非表示にするために解決策の文字を「-」に変換しました。ユーザーが正しく推測した後、文字に変換しようとしています。ただし、正しい文字を入力すると「-」のみが印字されます。ここに私のコードがあります: Puzzle.java:
public class Puzzle
{
/** The solution is the complete word or phrase that is to be guessed */
private String solution="BIG JAVA";
/**
* The puzzle is the word or phrase that is to be guessed with hyphens for
* all unguessed letters. Initially the puzzle should include all hyphens
* for all letters in the solution. As the user guesses a letter the hyphens
* for that letter are replaced with the letter.
*/
private StringBuilder puzzle;
/**
* Constructs a new Puzzle object with the given puzzle solution. Puzzles
* can contain any character and should be case insensitive. This
* constructor should set the current state of the puzzle so the all letters
* in the puzzle are set to a hyphen. All non letter values should be left
* unchanged in the puzzle. The puzzle should be set to the solution passed
* in.
*
* @param solution the solution to the puzzle
*/
public Puzzle(String Solution)
{
puzzle=new StringBuilder(this.solution);
int length= this.solution.length();
for(int count=0; count<length; count++)
{
if (Character.isLetter(puzzle.charAt(count)))
{
puzzle.setCharAt(count, '-');
}
}
}
/**
* The guessLetter method is used to determine how many times the letter
* that is passed in occurs in the puzzle. If the letter has already been
* guessed previously, this method should return zero. This method should be
* case insensitive. In other words 'H' is the same as 'h'. After a call to
* to this method the puzzle should be updated to remove the hyphen from
* the location in the puzzle for each occurrence of the letter.
*
* @param letter
* the letter that the user is guessing
* @return the number of times the letter occurs in the solution only if the
* letter has not already been guessed. If the letter has been
* previously guessed this method should return 0.
*/
public int guessLetter(char letter)
{
int count = 0;
int k=this.solution.length();
solution.equalsIgnoreCase(solution);
for(int seq=0; seq<k; seq++)
{
if(solution.charAt(seq)==letter)
{
count++;
puzzle.setCharAt(seq, letter);
}
}
return count;
}
/**
*
* The getPuzzle method should return the current state of the puzzle. The
* puzzle should include a hyphen for any letters that have not been guessed.
*
* @return the current state of the puzzle
*/
public String getPuzzle()
{
String str=new String(puzzle);
return str;
}
/**
* The solvePuzzle method is used to verify that a solution passed in
* matches the solution to this puzzle. The check for matching solutions
* should be case insensitive.
*
* @param solution
* @return true if the solution passed in matches the solution for the
* puzzle
*/
public boolean solvePuzzle(String solution)
{
if(this.solution==solution)
{
return true;
}
else
{
return false;
}
}
}
PuzzleTester.java:
import java.util.Scanner;
public class PuzzleTester
{
/**
* (Insert a brief description that describes the purpose of this method)
*
* @param args
*/
public static void main(String[] args)
{
String str="";
Scanner input= new Scanner(System.in);
System.out.println("Enter your choice: ");
System.out.println("(1) to guess a letter");
System.out.println("(2) to solve the puzzle");
System.out.println("(3) to quit");
int choice=input.nextInt();
while(choice!=3)
{
if(choice==1)
{
System.out.println("Please enter your letter");
str=input.next();
char letter=str.charAt(0);
Puzzle game=new Puzzle(str);
game.guessLetter(letter);
System.out.print(game.getPuzzle());
}
if(choice==2)
{
System.out.println("Please solve the puzzle");
input.nextLine();
String solution=input.next();
Puzzle game=new Puzzle(solution);
game.solvePuzzle(solution);
}
}
if(choice==3)
{
System.out.println("Good Bye");
}
}
}
puzzle.setCharAt(seq, letter);
私は、guessLetter メソッドの下の for ループにネストされた if ステートメントを追加すると、「-」が文字に戻ると本当に思っていました。私のコードは間違っていますか、それとももっと良い方法がありますか?