Я только начинающий в программировании и пытаюсь создать свой первый проект с несколькими классами, который является палачом. Я знаю, что по этой теме много тем, но не смог найти решение, которое бы работало с StringBuilder. Я застрял с ловлей нескольких букв в слове. Может ли кто-нибудь помочь?
рассматриваемый метод - checkAnswer и находится ниже:
public void checkAnswer (){
if (logic.line.indexOf(answer)!= -1){
System.out.println ("You are right! The letter " + answer + " exists");
StringBuilder guessedChar = new StringBuilder(logic.newLine);
guessedChar.setCharAt(logic.line.indexOf(answer), answer);
lettersGuessed = answer +lettersGuessed;
score = score + 1;
System.out.println("Letters guessed: " + lettersGuessed);
System.out.println("Letters missed: " + lettersMissed);
System.out.println("Your score is:" + score);
logic.newLine = guessedChar.toString();
System.out.println(logic.newLine);
}}
Ниже приведен полный код:
основной класс
Публичный класс Main {
public static void main(String[] args) throws Exception {
Logic act = new Logic();
Game game = new Game();
act.getListOfMovies();
act.CodedLine();
do { game.input();
game.checkCondition();
game.checkAnswer();
game.checkScore();
} while (game.lettersGuessed.length() != act.line.length() && game.score!= -10);
}}
Классовая логика
public class Logic {
static String line;
static String newLine;
public String[] listOfMovies;
public Scanner fileScanner;
public Logic() {
}
public String getListOfMovies() throws Exception {
File fileWithMovies = new File("MoviesList.txt");//file access
Scanner fileScanner = new Scanner(fileWithMovies);//file scan
while (fileScanner.hasNext()) { // while there is a next line
line = fileScanner.nextLine();
String[] listOfMovies = new String[24]; //introduce array
for (int i = 0; i < listOfMovies.length; i++) { //
listOfMovies[i] = fileScanner.nextLine();
}
int random = (int) (Math.random() * listOfMovies.length); //get random number
for (int i = 0; i < line.length(); i++) { //get random movie
if (Character.isLetter(line.charAt(i))) {
line = listOfMovies[random];
System.out.println(line);
}
return line;
}
return line;
}return line;
}
public String CodedLine() {
newLine = line.replaceAll("[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]", "_");
System.out.println(newLine);
return newLine;
}}
Класс игры
public class Game {
char answer;
Logic logic = new Logic();
String lettersGuessed = " ";
String lettersMissed = " ";
int score = 0;
public char input () {
Scanner inputScanner = new Scanner(System.in);
System.out.println("Type in your guess");
answer = inputScanner.next().charAt(0);
System.out.println("Your guess: " + answer);
return answer;
}
public void checkCondition (){
if (logic.line.indexOf(answer)==-1){
System.out.println("You are wrong. The letter " + answer + " does not exist");
lettersMissed = answer + lettersMissed;
score = score - 1;
System.out.println("Letters guessed: " + lettersGuessed);
System.out.println("Letters missed: " + lettersMissed);
System.out.println("Your score is:" + score);
}}
public void checkAnswer (){
if (logic.line.indexOf(answer)!= -1){
System.out.println ("You are right! The letter " + answer + " exists");
StringBuilder guessedChar = new StringBuilder(logic.newLine);
guessedChar.setCharAt(logic.line.indexOf(answer), answer);
lettersGuessed = answer +lettersGuessed;
score = score + 1;
System.out.println("Letters guessed: " + lettersGuessed);
System.out.println("Letters missed: " + lettersMissed);
System.out.println("Your score is:" + score);
logic.newLine = guessedChar.toString();
System.out.println(logic.newLine);
}}
public void checkScore (){
if (score == -10) {
System.out.println("The game is over! You lost..."); }}}