#java #oop
#java #ооп
Вопрос:
** Здравствуйте, мне нужно создать игру hangman на Java. Я не могу использовать массивы. Большая часть моего кода выполнена, но у меня возникли некоторые проблемы, и некоторые советы были бы желательны.
Я только что нашел кое-что еще, по чему я мог бы воспользоваться помощью. После запроса у пользователя нового секретного слова и использования newHangMan.setSecretWord(newWord); мое замаскированное слово не сбрасывается на «????» (с тем же количеством «?», что и слова в секретном слове).
Я очень сожалею о таком длинном сообщении и плохом форматировании (1-й раз публикую здесь). Кто-нибудь может помочь?**
Это мой файл класса:
public class HangMan
{
private String secretWord = "bigbang", disguisedWord = "";
private int guessCount = 0, missCount = 0;
public void setSecretWord(String newWord)
{
secretWord = newWord;
guessCount = 0;
missCount = 0;
int wordLength = newWord.length();
while(wordLength > 0)
{
disguisedWord = disguisedWord "?";
wordLength--;
}
}
public String getSecretWord()
{
return secretWord;
}
public boolean isFound()
{
return secretWord.equalsIgnoreCase(disguisedWord);
}
public String getDisguisedWord()
{
return disguisedWord;
}
public int getGuessCount()
{
return guessCount;
}
public int getMissesCount()
{
return missCount;
}
public void guessCharacter(char c)
{
// int position = secretWord.indexOf(c);
boolean got_it = false;
String updateDisguised="";
for(int i=0; i < secretWord.length();i )
{
if(c == secretWord.charAt(i))
{
updateDisguised = updateDisguised secretWord.charAt(i);
String checkDuplicate = updateDisguised.substring(0,i);
int duplicatePos = checkDuplicate.indexOf(c);
if(duplicatePos <0)
guessCount ;
got_it = true;
}
else
{
updateDisguised = updateDisguised disguisedWord.charAt(i);
}
}
if(got_it == false)
{
missCount ;
guessCount ;
}
disguisedWord = updateDisguised;
}
}
Это мой основной метод:
import java.util.Scanner;
public class HangManGame {
public static void main(String[] args)
{
boolean retry= true;
String retry_ans;
Scanner kb = new Scanner(System.in);
HangMan newHangMan = new HangMan();
String word = newHangMan.getSecretWord();
String input;
char guess;
newHangMan.setSecretWord(word);
System.out.println("Hangman game starts:");
do{
System.out.println("Guess this: " newHangMan.getDisguisedWord());
System.out.println("Enter your guess character: [guess]");
input = kb.next();
guess = input.charAt(0);
newHangMan.guessCharacter(guess);
System.out.println(newHangMan.getDisguisedWord());
System.out.println("Number of guesses so far : " newHangMan.getGuessCount());
System.out.println("NUmber of misses so far: " newHangMan.getMissesCount());
if((newHangMan.getMissesCount()==7) || (newHangMan.isFound()))
{
System.out.println("The game is over");
System.out.println("Would you like to try again?");
retry_ans = kb.next();
if(retry_ans.equalsIgnoreCase("yes"))
{
retry = true;
System.out.println("Please enter a new secret word:");
String newWord = kb.next();
newHangMan.setSecretWord(newWord);
}
else
{
retry =false;
}
}
} while(retry == true);
}
}
Комментарии:
1. Это не сработает — очень плохое описание вашей проблемы. Расскажите нам, чего вы ожидаете, и что у вас есть вместо этого. Компилируется ли он? Выполняется ли он, но с исключением? Если да, то какова трассировка стека? Дает ли это неверный результат для данного ввода? Если да, то каковы входные данные, каков ожидаемый результат и каков эффективный результат?
2. Проблема, с которой я столкнулся, заключалась в том, что игровой цикл в основном методе не прерывался, когда метод isFound() был удовлетворен. Извините за путаницу.
Ответ №1:
(newHangMan.isFound()=true)
должно быть
newHangMan.isFound()
Не сравнивайте bool с другим bool.
= — это оценка boolean
.
Комментарии:
1. Вау, это было так просто. Теперь цикл останавливается, когда слова совпадают. Большое спасибо.
2. Я сделаю это, когда смогу (репутация все еще слишком низкая).
Ответ №2:
Заменить
while(retry = true);
с
while(retry);
Первое — это присваивание, поэтому оно никогда не вычисляется false
, хотя и должно.
Ответ №3:
Ваше условие while является присваиванием, а не сравнением, что, вероятно, является причиной вашей проблемы — вы устанавливаете значение retry
to true
( retry = true
) вместо того, чтобы проверять, что значение retry
currently равно true ( retry == true
) .
Ответ №4:
Классическая ошибка запуска java. в то время как проверка должна быть
While(retry == true)