所以我玩的命運之輪/ hang子手,我已經將解決方案的字母轉換爲「 - 」來隱藏解決方案。現在我試圖在用戶正確猜測它們之後將它們轉換回字母。但是,當輸入正確的字母時,僅打印「 - 」。這裏是我的代碼: 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方法下的循環會改變「 - 「回信。我的代碼錯了,還是有更好的方法?
我覺得'solution.equalsIgnoreCase(解決方案)'並不完全符合你的想法。它所做的一切就是將「解決方案」與自己進行比較,以不區分大小寫的方式進行,這顯然總是會返回真實的!該方法不會更改'solution'字符串,因爲字符串在Java中是不可變的。見http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String) – andersschuller 2013-02-18 22:00:18