Java 刽子手计划(重复字母)
好的,我在编程课上做了一个练习,我们被要求做一个绞刑人游戏,你可以看到。所有的程序都运行良好,除了一件事:当一个单词的字母重复了不止一次时,程序只接受一次,然后忽略其他单词。我认为问题出在setLetter方法中。它的工作是用字母替换破折号。当我第二次运行程序并输入字母时,它确实告诉我这是一个正确的猜测,但它不会用字母替换破折号 任何帮助都将不胜感激! 多谢各位Java 刽子手计划(重复字母),java,arrays,methods,java.util.scanner,Java,Arrays,Methods,Java.util.scanner,好的,我在编程课上做了一个练习,我们被要求做一个绞刑人游戏,你可以看到。所有的程序都运行良好,除了一件事:当一个单词的字母重复了不止一次时,程序只接受一次,然后忽略其他单词。我认为问题出在setLetter方法中。它的工作是用字母替换破折号。当我第二次运行程序并输入字母时,它确实告诉我这是一个正确的猜测,但它不会用字母替换破折号 任何帮助都将不胜感激! 多谢各位 import java.util.Random; import java.util.Scanner; public class Ha
import java.util.Random;
import java.util.Scanner;
public class Hangman {
public static void main(String [] args) {
// word list
String [] hangmanList = {"accelerate", "achieve", "able", "microscope",
"thumb", "wonderful", "yard", "wood", "lemon", "favorite", "decide", "circular",
"broke", "elephant", "funny", "hamburger", "leg", "job", "lighthouse", "mother",
"notebook", "puzzle"};
int allowedGuesses = 7;
String secretWord=pickRandomWord(hangmanList);
System.out.println(secretWord);
char[] correctGuesses = new char [secretWord.length()];
for (int i=0; i<correctGuesses.length;i++){
correctGuesses[i]= '-';
}
char [] incorrectGuesses= new char [20];
int mistakeCount = 0;
Scanner input = new Scanner(System.in);
for (int i=0; mistakeCount<allowedGuesses;i++){
if (checkWinner(correctGuesses)!=true){
printGallows(mistakeCount);
System.out.println("\n ");
for (int j=0;j<correctGuesses.length;j++){
System.out.print(correctGuesses[j]);
}
System.out.print("\nWrong guesses: ");
for (int j=0;j<=i;j++){
System.out.print(incorrectGuesses[j]);
}
System.out.print("\nPlease guess a letter: ");
char a = input.next().charAt(0);;
boolean letterFound = false;
letterFound = matchFound(a,secretWord);
if (letterFound) {
setLetter(a ,secretWord, correctGuesses);
System.out.println("-== correct guess! ==-");
}
else {
incorrectGuesses[i]=a;
mistakeCount++;
System.out.println(":(:(:( Oops! that is incorrect...");
}
}
else break;
}
System.out.println("\n********************************************");
System.out.println("The secret word was: " + secretWord);
if (checkWinner(correctGuesses)) {
System.out.println("Congratulations, you won!");
}
else {
System.out.println("Better luck next time!!!");
printGallows(mistakeCount);
}
}
private static boolean checkWinner(char[] correctGuesses) {
boolean isWinner=false;
for (int i=0; i<correctGuesses.length;i++){
if (correctGuesses[i]!= '-') isWinner=true;
else isWinner=false;
}
return isWinner;
}
public static boolean matchFound(char guess,String secretWord) {
char [] letters = secretWord.toCharArray();
for (int i=0; i<letters.length;i++){
if (guess == letters[i]) {
return true ;
}
}
return false;
}
public static boolean setLetter(char guess,String secretWord, char[] correctGuesses) {
char [] letters = secretWord.toCharArray();
int guessed=0;
for (int i=0;i<letters.length;i++){
if (guess==letters[i]){
guessed++;
}
if (guessed>0){
correctGuesses[i]=letters[i];
return true;
}
else if (guess==0){
correctGuesses[i]=letters[i];
return true;
}
}
return false;
}
private static void printGallows(int mistakeCount) {
if (mistakeCount==0){
System.out.print(" ____\n | |\n |\n |\n |\n |\n |\n |\n__|__"); }
else if (mistakeCount==1){
System.out.print(" ____\n | |\n | O\n |\n |\n |\n |\n |\n__|__"); }
else if (mistakeCount==2){
System.out.print(" ____\n | |\n | O\n | |\n |\n |\n |\n |\n__|__");}
else if (mistakeCount==3){
System.out.print(" ____\n | |\n | O\n | |\n | \\|\n |\n |\n |\n__|__");}
else if (mistakeCount==4){
System.out.print(" ____\n | |\n | O\n | |\n | \\|/\n |\n |\n |\n__|__");}
else if (mistakeCount==5){
System.out.print(" ____\n | |\n | O\n | |\n | \\|/\n | |\n |\n |\n__|__");}
else if (mistakeCount==6){
System.out.print(" ____\n | |\n | O\n | |\n | \\|/\n | |\n | /\n |\n__|__");}
else if (mistakeCount==7){
System.out.print(" ____\n | |\n | O\n | |\n | \\|/\n | |\n | / \\ \n |\n__|__");}
}
private static String pickRandomWord(String[] dictionary){
String secretWord=null;
Random r = new Random ();
secretWord = dictionary [r.nextInt(dictionary.length)];
return secretWord;
}
} // end of Hangman class
import java.util.Random;
导入java.util.Scanner;
公共级刽子手{
公共静态void main(字符串[]args){
//词表
字符串[]hangmanList={“加速”、“实现”、“能够”、“显微镜”,
“拇指”、“美妙”、“院子”、“木头”、“柠檬”、“最爱”、“决定”、“圆形”,
“破产”、“大象”、“搞笑”、“汉堡”、“腿”、“工作”、“灯塔”、“母亲”,
“笔记本”,“拼图”};
int Allowequesses=7;
字符串secretWord=pickronomword(hangmanList);
System.out.println(secretWord);
char[]correctGuesses=新字符[secretWord.length()];
对于(int i=0;i是,问题在于setLetter方法。在第一个字母匹配时返回true。我的解决方案是
public static boolean setLetter(char guess, String secretWord, char[] correctGuesses) {
char[] letters = secretWord.toCharArray();
int guessed = 0;
for (int i = 0; i < letters.length; i++) {
if (guess == letters[i]) {
guessed++;
correctGuesses[i] = letters[i];
}
}
return guessed != 0;
}
public静态布尔setLetter(字符猜测、字符串secretWord、字符[]更正猜测){
char[]字母=secretWord.toCharArray();
int猜测=0;
for(int i=0;i