Oi, estou com um problema em meu codigo, estou fazendo um jogo da forca em java, mas quando o codigo pede a primeira letra para o usuario, a letra soma(somente a primeira), ja a segunda letra e o restante funcionam normalmente.
import java.util.Scanner;
import java.util.Random;
import java.util.InputMismatchException;
public class Main {
//FUNÇÃO VERDADEIRO OU FALSO, SE A "letraInserida" CONTEM DENTRO DA "palavraAleatoria", o metodo contains ele irá verificar se a sequencia de caracters está presente dentro da "palavraAleatoria", se estiver(true),caso não(false).
public static boolean verificarLetras(String palavraAleatoria, String letraInserida) {
return palavraAleatoria.contains(letraInserida);
}
public static String inserirLetras() {
String letra;
try {
Scanner scanner = new Scanner(System.in);
System.out.printf("Digite uma letra: ");
letra = scanner.next().toLowerCase();
if (!letra.matches("[a-z]")) { //matches - Se o usuário digitar um elemento que tenha na sequência (a até z) será verdadeiro, caso contrário ele retornará um erro.
throw new InputMismatchException("");
}
} catch (InputMismatchException err) {
System.out.println("Entrada de dados inválida. Por favor, insira apenas uma letra de cada vez.");
letra = inserirLetras(); // Chamada recursiva para pedir uma nova entrada
}
return letra;
}
// Método para gerar palavras aleatórias usando matriz
public static String[] gerarPalavrasAleatorias() {
Random random = new Random();
String[][] palavra = {
{"banana", "5"},
{"programador", "20"},
{"cachorro", "15"},
{"bolacha", "18"},
{"bicicleta", "10"},
};
String[] palavraAleatoria = palavra[random.nextInt(palavra.length)]; // Passando os dados da minha matriz para minha array palavraAleatoria
return palavraAleatoria;
}
// Método onde, caso minha "palavraAleatoria" for uma das que estão nos cases, elas irão gerar uma dica para o usuário.
public static void dicas(String palavraAleatoria) {
System.out.print("DICA: ");
switch (palavraAleatoria) {
case "banana":
System.out.println("FRUTA AMARELA.");
break;
case "programador":
System.out.println("COMPUTADOR E SEU MELHOR AMIGO.");
break;
case "cachorro":
System.out.println("ANIMAL DOMÉSTICO COM PELOS.");
break;
case "bolacha":
System.out.println("COMESTÍVEL COM RECHEIO.");
break;
case "bicicleta":
System.out.println("DUAS RODAS.");
break;
default:
System.out.println("Sem dicas.");
}
}
public static void main(String[] args) {
Scanner scr = new Scanner(System.in);
String continuar = "sim";
int vida = 5;//VIDA JOGADOR.
System.out.println("Seja Bem-Vindo ao Jogo Da Forca");
System.out.printf("Insira seu nome:");//PEDINDO DADOS PARA O USUARIO.
String nome = scr.next();
while (continuar.equals("sim")) { //BLOCO WHILE, CASO MEU USUARIO DIGITE "SIM" MEU WHILE IRÁ FAZER UM LOOP POR TODO O CODIGO NOVAMENTE , CASO CONTRARIO ELE ENCERRA O BLOCO DE COMANDO.
String[] pontuacao = gerarPalavrasAleatorias();
//MINHA VARIAVEIS ESTÃO RECEBENDO MINHHSA PONTUAÇÕES QUE ESTÃO FIXIDAS NAS MINHAS PALAVRAS.
String palavraAleatoria = pontuacao[0];
String pontuacaoPalavra = pontuacao[1];
dicas(palavraAleatoria);
String letra = inserirLetras();
String letrasInseridas = "";
boolean palavraAdivinhada = false;
while (vida > 0 && !palavraAdivinhada) { //BLOCO WHILE, NELE SE A VIDA DO JOGADOR FOR MAIOR QUE 0 OU DIFERENTE DA PALAVRADVINHADA O CODIGO CONTINUARÁ.
//PAINEL DO JOGADOR
System.out.println(""); //Pula de linha
System.out.println("PAINEL DO JOGADOR");
System.out.println(""); //Pula de linha
System.out.println("SUA VIDA: " + vida); //MOSTRAR VIDA DO JOGADOR A CADA LOOP
String letraInserida = inserirLetras();
letrasInseridas += letraInserida;
palavraAdivinhada = true;
//BLOCO DE COMANDO ONDE ESTÁ VERIFICANDO SE A LETRA DIGITA CONTEM DENTRO DA MINHA "palavraAleatoria" CASO TENHA, "palavraAleatoria" me retorna false
for (int i = 0; i < palavraAleatoria.length(); i++) {
char letraChar = palavraAleatoria.charAt(i);
if (letrasInseridas.indexOf(letraChar) == -1) {
palavraAdivinhada = false;
break;
}
}
//BLOCO DE COMANDO ONDE ESTÁA VERIFICANDO SE A LETRA ATUAL"letraChar" está dentro da "palavraAleatoria" imprimimos ela na tela.
for (int i = 0; i < palavraAleatoria.length(); i++) {
char letraChar = palavraAleatoria.charAt(i);
if (letrasInseridas.indexOf(letraChar) != -1) {
System.out.print(letraChar + " ");
} else {
System.out.print("_ "); //CASO A LETRA NÃO ESTAJA, IMPRIMOS UM TROÇO ATÉ O USUARIO ACERTAR A LETRA.
}
}
System.out.println();
//USUARIO ACERTOU A LETRA.
if (verificarLetras(palavraAleatoria, letraInserida)) {
System.out.println("Parabéns, você acertou!!");
}
//USUARIO ERROU A LETRA.
else if (letrasInseridas.contains(letraInserida)){
System.out.println("Letra já foi inserida.");
vida--;
}
else{
System.out.println("Letra " + letraInserida + " está incorreta.");
vida--; //SEMPRE QUE O USUARIO ERRA UMA LETRA VIDA DIMINUI.
}
}
//FINAL DO CODIGO, NELE IRÁ MOSTRAR SE O USUARIO ACERTOU A PALAVRA OU ERROU, PONTUAÇÃO DA PALAVRA, E SE DESEJA CONTINUAR OU NÃO.
if (palavraAdivinhada) {
System.out.println("Parabéns " + nome + " você descobriu a palavra!!");
} else {
System.out.println("Você perdeu, a palavra correta era: " + palavraAleatoria);
}
System.out.println("Sua pontuação:" + pontuacaoPalavra);
System.out.println("Deseja continuar (sim/nao).");
continuar = scr.next();
}
//ENCERRAMENTO, CASO O USUARIO ESCOLHA NÃO.
System.out.println("Obrigado por jogar.");
}
}