Mostrar letras digitadas pelo usuário em um jogo

10 respostas Resolvido
programaçãojava
V

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.

10 Respostas

B

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
V
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.

B

Depois coloca o erro para vermos.

V
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.

B

Realizou o import corretamente da classe List?

import java.util.List;

V

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
B

Falta o import da classe ArrayList;

import java.util.ArrayList;

V

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.

B
Solucao aceita

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

Scanner input = new Scanner(System.in);

V

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

Criado 18 de setembro de 2018
Ultima resposta 18 de set. de 2018
Respostas 10
Participantes 2