Mostrar letras digitadas pelo usuário em um jogo

Estou com um problema. Meu prof pediu para criar um jogo da forca, até aí tudo bem. Só que o programa além de tudo também deveria imprimir as letras que já foram inseridas a cada rodada também, tanto as certas quanto as erradas. Aqui está meu código:

import java.util.Scanner;
import java.util.Random;
public class Main {

public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	String[] palavrasArmazenadas = {"floresta", "forca", "cachorro", "filme", "guaxinim", "mamute"};
    Random sorteio = new Random();
    int palavra = new Random().nextInt(6);
    System.out.println(palavra);
    String palavraSelecionada = palavrasArmazenadas[palavra];

    char[] traco = new char[palavraSelecionada.length()];
    for (int i = 0; i < palavraSelecionada.length(); i++) {
        traco[i] = '_';
    }
	int preDefine = palavrasArmazenadas[palavra].length();
    int tentativas = 6;
	while (preDefine > 0 && tentativas > 0) {
        System.out.println();
        for (int i = 0; i < palavraSelecionada.length(); i++) {
            System.out.print(" " + traco[i] + " ");
        }
        
		System.out.println();
		System.out.println("Você dispõe agora de " + tentativas + " chances de adivinhar.");
        System.out.println("A palavra tem agora " + preDefine + " letras a serem descobertas");
        System.out.println("Digite uma letra: ");
        char letras = input.next().charAt(0);
        boolean right = false;
        for (int i = 0; i < traco.length; i++) {
			if (palavrasArmazenadas[palavra].charAt(i) == letras) {
                traco[i] = letras;
                preDefine--;
                right = true;
            }
        }
		if (!right) {
            tentativas--;
        }
    }
	if (preDefine == 0) {
		System.out.println(palavraSelecionada.toUpperCase() +"\nParabéns. Você ganhou!");
    } else {
        System.out.println("Você foi enforcado. A palavra era " + palavraSelecionada.toUpperCase());
   }
}

}

Como eu faço para ele exibir as letras? Tentei colocar um letras ++ em um System.out dentro do for, mas não deu certo. Só exibia a ultima letra que eu digitava.

Você poderia:

  • Criar uma variável para armazenar as letras inválidas:

List<Character> letrasInvalidas = new ArrayList<>();

  • Quando mostrar os traços, também mostrar as inválidas:

while (preDefine > 0 && tentativas > 0) {
System.out.println("Letras inválidas: " + letrasInvalidas);
// restante do código

  • Quando errar uma letra, adiciona ela na lista de inválidas:

if (!right) {
tentativas–;
letrasInvalidas.add(letras);
// restante do código

1 curtida

Desculpe, mas em que lugar do código eu poderia inserir essa variável? Tentei colocar no começo:
public static void main(String[] args) {
String[] palavrasArmazenadas = {“floresta”, “forca”, “cachorro”, “filme”, “guaxinim”, “mamute”};
Random sorteio = new Random();
int palavra = new Random().nextInt(6);
List letrasInvalidas = new ArrayList<>();

Tá dando erro. Coloquei no lugar errado? Nos outros que tentei também não deu. As outras dicas que você deu já implementei mas como não consigo encaixar essa não posso rodar para ver.

Depois coloca o erro para vermos.

xit status 1
Main.java:9: error: cannot find symbol
List letrasInvalidas = new ArrayList<>();
^
symbol: class List
location: class Main
Main.java:9: error: cannot find symbol
List letrasInvalidas = new ArrayList<>();
^
symbol: class ArrayList
location: class Main
Main.java:30: error: cannot find symbol
char letras = input.next().charAt(0);
^
symbol: variable input
location: class Main
3 errors

Esse é o erro.

Realizou o import corretamente da classe List?

import java.util.List;

O programa tá assim:

import java.util.Scanner;
import java.util.Random;
import java.util.List;
public class Main {

public static void main(String[] args) {
	String[] palavrasArmazenadas = {"floresta", "forca", "cachorro", "filme", "guaxinim", "mamute"};
    Random sorteio = new Random();
    int palavra = new Random().nextInt(6);
    List<Character> letrasInvalidas = new ArrayList<>();
    System.out.println(palavra);
    String palavraSelecionada = palavrasArmazenadas[palavra];

    char[] traco = new char[palavraSelecionada.length()];
    for (int i = 0; i < palavraSelecionada.length(); i++) {
        traco[i] = '_';
    }
	int preDefine = palavrasArmazenadas[palavra].length();
    int tentativas = 6;
	while (preDefine > 0 && tentativas > 0) {
  System.out.println("Letras inválidas: " + letrasInvalidas);
  System.out.println();
        for (int i = 0; i < palavraSelecionada.length(); i++) {
            System.out.print(" " + traco[i] + " ");
        }
        
		System.out.println();
		System.out.println("Você dispõe agora de " + tentativas + " chances de adivinhar.");
        System.out.println("A palavra tem agora " + preDefine + " letras a serem descobertas");
        System.out.println("Digite uma letra: ");
        char letras = input.next().charAt(0);
        boolean right = false;
        for (int i = 0; i < traco.length; i++) {
			if (palavrasArmazenadas[palavra].charAt(i) == letras) {
                traco[i] = letras;
                preDefine--;
                right = true;
            }
        }
		if (!right) {
            tentativas--;
            letrasInvalidas.add(letras);
        }
    }
	if (preDefine == 0) {
		System.out.println(palavraSelecionada.toUpperCase() +"\nParabéns. Você ganhou!");
    } else {
        System.out.println("Você foi enforcado. A palavra era " + palavraSelecionada.toUpperCase());
   }
}

}

Eu importei agora, mas ainda não roda. Deu isso:
exit status 1
Main.java:10: error: cannot find symbol
List letrasInvalidas = new ArrayList<>();
^
symbol: class ArrayList
location: class Main
Main.java:31: error: cannot find symbol
char letras = input.next().charAt(0);
^
symbol: variable input
location: class Main
2 errors

Falta o import da classe ArrayList;

import java.util.ArrayList;

1 curtida

exit status 1
Main.java:32: error: cannot find symbol
char letras = input.next().charAt(0);
^
symbol: variable input
location: class Main
1 error

Importei e deu mais esse.

Entre o seu primeiro algoritmo e este novo, acabou apagando a declaração da variável input.

Scanner input = new Scanner(System.in);

1 curtida

Agora deu, obrigado. Me salvou. Tenha uma boa noite!