Não reconhece String e fica no loop infinito!

5 respostas
F_ix1
public void luz() {
	String luz;
	luz = JOptionPane.showInputDialog("Digite que fazer? digite 'S' para acender a luz, digite 'N' para não acender a luz");
	
	if(luz == "S") {

		JOptionPane.showInputDialog("Agora com o quarto iluminado e você pode ver ao redor");
		cama();

		}
	else {
		JOptionPane.showMessageDialog(null, "O quarto está escuro de mais para fazer algo. Acenda a luz!");
		luz();
	}

}
________________

Uma breve explicação.

No codigo acima, demonstrado resumidamente! o meu "IF" sempre esta dando 'negativo'! mesmo a variavel (que no caso é uma string) luz sendo "S" (que é oque o if pede) ele chama o else. se alguem puder me ajudar! rsrs

5 Respostas

Andre_Rosa

Faça a comparação da String com o método equals().

Dica: como a String armazena apenas um caractere, você poderia declarar a variável como char.

ViniGodoy

Por favor, não banalize as tags no título. Use-as para prover informação adicional importante, como a que seu tópico está [Resolvido] ou que você resolveu usar uma tecnologia diferente, como [PHP].
Mas escrever [Ajuda] não tem qualquer serventia, já que pedidos de ajuda representam 99% de nossos tópicos por aqui.

Strings são objetos. Com o ==, o java [color=red]sempre[/color] compara referências de objetos (ou seja, se dois objetos estão no mesmo lugar na memória), e não o seu conteúdo. O == só compara conteúdo de tipos primitivos (boolean, byte, char, short, int, long, float e double).

Como o André explicou, para comparar o conteúdo dos objetos usamos o método equals. No caso do String temos até um método adicional, chamado equalsIgnoreCase, que ignora se as letras são maiúsculas ou minúsculas. Exemplo:

String x = new String("M"); System.out.println(x == "M"); //false, x e "M" são objetos diferentes System.out.println(x.equals("M")); //True, x e "M" tem o mesmo valor System.out.println(x.equalsIgnoreCase("m")); //True, para esse método m minúsculo é igual a M maiúsculo.

U

continua em loop porque vc está chamando o metodo luz dentro dele.olhe na linha 13.

F_ix1

Obrigado Andre Rosa e ViniGodoy! problema resolvido!

e ViniGodoy, me desculpe pelo erro no titulo. não vai acontecer novamente!
__

unixbsdxnu, mas analise novamente, caso o if seja verdadeiro ele vai chamar o “cama()”, se não (else na linha 11)! ele vai refazer o if. ate que ele seja verdadeiro! o meu problema é que o if nunca era verdadeiro por eu estar utilizando o modo de comparação errado!

U

é verdade amigo obrigado.

Criado 30 de setembro de 2011
Ultima resposta 5 de out. de 2011
Respostas 5
Participantes 4