Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 4 da Aula 2 - Manipulando Arrays

Não sei se aqui é o lugar correto para esta dúvida, mas poderiam me ajudar a criar o mesmo exemplo em java? Estou estudando Java em paralelo e tive essa dúvida. Está ai o código que fiz, mas ele não imprime corretamente.

package teste;

import java.util.Scanner;

/**
 *
 * @author labcst1
 */
public class Teste {

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {

    String[] palavrasecreta = {"M","E","L","A","N","C","I","A","","","","","","","","","","","",""};

    boolean acertou = false;
    boolean enforcou = false;
    String chutes[] = new String[26];
    int tentativas = 0;
    Scanner input = new Scanner(System.in);


do {

  for(int i = 0; i < palavrasecreta.length; i++) {


       boolean achou = false;
            for(int j = 0; j < tentativas; j++) {
                if(chutes[j] == palavrasecreta[i]) {
                    achou = true;
                    break;
                }
            }
            if(achou) {
               System.out.print(palavrasecreta[i]);    
            } else {
                System.out.print("_");    
            }
        }




       String chute;
       System.out.print("Qual a letra?");    
       chute = input.next();
       chutes[tentativas] = chute;
       tentativas++;

    } while (!acertou && !enforcou);
}

}
2 respostas
solução!

Oi Emerson,

Java funciona diferente em alguns aspectos bem importantes e são eles que estão te atrapalhando. Você precisa de duas coisas para resolver seu problema:

1. String é uma classe

Isso quer dizer que você está lidando com objetos do tipo String na sua implementação e a comparação de objetos com == compara a referência (para essa explicação, considere que seria o equivalente ao ponteiro do C, mas por baixo dos panos não é bem assim) e não o conteúdo da String.

Para resolver isso, você poderia usar o método equals, que está devidamente implementado na classe String, para fazer a comparação:

if (chutes[j].equals(palavrasecreta[i])) {...

Como você está, na realidade, comparando caracteres, o tipo String não é o mais adequado para o caso. Você poderia usar o tipo primitivo char e fazer exatamente como fazia em C, com a diferença de que os chars usam aspas simples em Java:

char[] palavrasecreta = {'M', 'E', 'L', 'A', 'N', 'C', 'I', 'A'};
boolean acertou = false;
boolean enforcou = false;
char[] chutes = new char[26];
(...)
                    if (chutes[j] == palavrasecreta[i]) {
(...)

2. Criação do array

Diferente do C, onde é preciso dizer com antecedência quantos caracteres estamos reservando, o array criado de forma literal do Java define, no momento da criação, quantas posições ele vai ter, então não é necessário colocar os espaços depois da palavra:

char[] palavrasecreta = {'M', 'E', 'L', 'A', 'N', 'C', 'I', 'A'};

De toda forma, vale dizer que dificilmente um desenvolvedor Java faria a implementação dessa forma, já ela é completamente procedural. ;-)

Dá pra fazer o jogo da forca bem orientado a objetos, mas esse é um desafio para você no futuro.

Muito obrigado! Ajudou bastante!