If que compara strings não está funcionando

4 respostas
B

Pessoal,

Li há um tempo atrás um cara aqui no fórum pedindo um código sobre um jogo da forca.
Aí achei uma idéia legal e estou tentando criar um jogo da forca… é meu primeiro projeto em java.

Bom, criei um aplet que monta uma tela com um botão para cada letra do alfabeto.

Ela cria tb um JLabel para cada letra da palavra do jogo, só que naum adiciona ao painel.

Quando eu clico em um botão de uma letra, o programa chega se a letra que eu digitei pertence a palavra, se pertencer ela adicona o botão com a letra ao painel.

O código ficou assim:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class JogoDaForca extends JApplet implements ActionListener {
	private String palavra = "BRUNO";
	private String dica = "Meu primeiro nome.";
	private int qtdeLetras = palavra.length();
	
	JButton[] botoes;
	JLabel label;
	JLabel[] letras;
	JTextArea output;

	public void init() {
		montaTela();
	}

	public void montaTela() {
		int posicaoX = 10, posicaoY = 90;
		int posicaoLetraX = 10, posicaoLetraY = 10;
		
		getContentPane().setLayout(null);
		
		letras = new JLabel[qtdeLetras];
		
		for(int i=0; i<qtdeLetras; i++){
			letras[i] = new JLabel(new Character(palavra.charAt(i)).toString());
			letras[i].setBounds(posicaoLetraX,posicaoLetraY, 30,20);
			posicaoLetraX += 60;
		}
		
		label = new JLabel(dica);
		label.setSize(280,20);
		label.setLocation(10,40);
		getContentPane().add(label, null);
		
		botoes = new JButton[26];
		
		for(int i=0; i<26; i++) {
			botoes[i] = new JButton(new Character((char) (i + 65)).toString());
			botoes[i].setBounds(posicaoX,posicaoY, 50,20);
			botoes[i].addActionListener(this);
			if ((i + 1) % 7 == 0){
				posicaoX = 10;
				posicaoY += 30;
			}
			else {
				posicaoX += 60;	
			}
			getContentPane().add(botoes[i], null);
		}
		
		output = new JTextArea (6,60);
		output.setEditable (false);
		output.setBounds(100,10,50,20);
		output.setFont(
				new Font("Courier", Font.PLAIN, 12));
		getContentPane().add (output);
	}
	public void actionPerformed(ActionEvent e) {
		JButton selectedButton = (JButton) e.getSource();
		String selectedLetter = selectedButton.getText();
		selectedButton.setEnabled(false);
		procuraLetra(selectedLetter);
	}
	public void procuraLetra(String selectedLetter) {
		String letraAtual;
		for(int i=0; i<qtdeLetras; i++){
			letraAtual = letras[i].getText();
			//output.setText(letraAtual + " - " + selectedLetter);
			//selectedLetter = "A";
			//letraAtual = "A";
			if(selectedLetter == letraAtual){
				getContentPane().add(letras[i], null);
				getContentPane().validate();
				//output.setText("PASSOU");
			}
		}
	}
}

Só que ele nunca cai dentro do if… sempre sai pelo else…
Ja tentei com == e equals.

E o que é pior, fiz um teste e, mesmo se entrar no if, as letras da palavra do jogo não aparecem na tela.

Alguém tem alguma dica?

4 Respostas

R

Nobre,

Strings se comparam com equals.

se não está funcionando, DEBUGA! não tem outra!

vê os valores que estão chegando, as vezes é um " " (espaço) que foi introduzido na String…

[]'s

K

faz assim oh

if(selectedLetter.equals(letraAtual)){ getContentPane().add(letras[i], null); getContentPane().validate(); //output.setText("PASSOU"); }

abraço

B

Valeu pessoal…

Com equals também não está funcionando. O jeito vai ser mais debugs.
Aparentemente, as variáveis chegam iguais mas vou conferir novamente.

Obrigado a todos!

B

Fiz de outro jeito e deu certo…

Adicionei os JLabels logo no início com setVisible(false).
Aí depois quando checava eu colocava true.

Agora está funcionando.

E, como minhas strings estão dentro de variáveis, eu pude usar == para comparar.

Criado 19 de abril de 2007
Ultima resposta 21 de abr. de 2007
Respostas 4
Participantes 3