String (if else)

Ola so novato em java bem novato…e estava fazendo uns programinhas basicos…fui tenta joga um if e um else em um atributo String nao deu para compilar…ae troquei para boolean foi normal…gostaria de saber se o if e o else so da pra usar com o boolean. Se tiver como usar com String como faz.Bom vo posta o programinha aqui com o erro

public class lampada {
private String estado;
private int nVidaUtil;
private int ZerarnVidaUtil;
public lampada(){

}
//Desliga luz//

public void Apagado(){
estado = “Desligada”;
System.out.println(“A lampada esta Desligada”);
}
//Liga a Luz e soma nVidaUtil//
public void Ligada(){
if(estado){
estado = “Ligada”;
nVidaUtil++;
}
else{
System.out.println(“A lampada esta Ligada”);
System.out.println("Ja foi ligada " + nVidaUtil + " vezes ");;
}
//Zera a nVidaUtil//
public void ZerarnVidaUtil(){
System.out.println("Sua nVidaUtil era de "+ nVidaUtil + " ");
nVidaUtil = ZerarnVidaUtil;
nVidaUtil=0;
System.out.println(“Agora foi ZERADA”);
}

}

if(estado.equals("Desligada")) {
//Liga a lampada
} 

Eu particularmente preferiria que vc utilizasse um bollean então ficaria assim

private Bollean ligado = new Bollean("false");
...
if(!ligado) { //Se não estiver ligado
//Liga a lampada
}
2 curtidas

Bom dia ghostman!

Só para explicar o que o colega acima demonstrou.

Conparação de String se faz com o método “equals”. Se quiseres comparar negando, basta colocar o ! na frente da expressão. Ficaria ± assim:

if (estado.equals("Desligada")) //Se o estado da lâmpada for igual a "Desligada". 

Lembre-se de que o método equals é Case Sensitive, ou seja, o valor da String estado deve ser digitado igual ao da comparação (if).

Para solucionar isso, existe o método “equalsIgnoreCase” que ignora as maiúsculas e minúsculas.

if (estado.equalsIgnoreCase("Desligada")) //Se o estado da lâmpada for igual a "Desligada" ou "desligada" ou "DESLIGADA" OU "DeSlIgAdA", etc etc etc :P 

Para comparar negando, faça assim:

if (!estado.equals("Desligada")) //Se o estado da lâmpada for diferente de "Desligada". 

ou

if (!estado.equalsIgnoreCase("Desligada")) //Se o estado da lâmpada for diferente de "Desligada". 

Espero ter ajudado.

1 curtida

Ops, blz

O problema é que em um comando (if, while) é esperado um condição bolleana, e no caso seu codigo vc esta apenas dizendo if(estado), sendo que estado é uma variavel String.

Para o seu codigo dar certo é necessario que vc faça o seguinte:


if(estado.equals("ligado")){
//o que vc quer
}

ou troque a variavel estado de String para um Booleano.


Boolean estado = true;

//isso funciona apartir do java 5 - autoboxing 
if(estado){
//faça algo
}

Espero ter ajudado.

at.

[quote=m0ska] if(estado.equals("Desligada")) { //Liga a lampada }

Eu particularmente preferiria que vc utilizasse um bollean então ficaria assim

private Bollean ligado = new Bollean("false"); ... if(!ligado) { //Se não estiver ligado //Liga a lampada }[/quote]

Negar uma condição booleana não é um bom meio de se programar. é o mesmo que fazer assim:

[code]if (ligado == true)
{

}
else if (ligado == false)
{

}[/code]

como ela só poderá ser true of false, basta fazer:

[code]if (ligado)
{

}
else {

}[/code]

Lembrando que o tipo de booleano utilizado no seu exemplo é de Objeto, sendo assim, ele também poderá receber um valor NULL algum dia. Por tanto existe + 1 condição.

Obs: Não se escreve Bollean e sim: Boolean

Obs2: Caso você utilize a String, não use equals e sim equalsIgnoreCase. Só assim não tera problemas entre letras Maiusculas e minusculas. (A não ser que você crie uma constante (final) com o valor da comparação)

pootz galera valeu pelas respotas mas nem deu certo pq quando eu coloco

if (estado.equals(“Desligada”)) ele comeca da erro no else nao sei pq

mas valeu mesmo assim vo usar boolean q eu ja aprendi

muito obrigado pela dicas

Oi,

Provavelmente está dando erro pois vc não inicializou a sua variavel estado.

private String estado = null;

ou

private String estado = “”;

Tchauzin!

As vezes a negação de boolean se faz necessária.
Numa estrutura if com else não é msm necessário, mas não é só nesse caso que a negação de boolean pode ser usada.

Podemos usar só o if, por exemplo.
Ao invés de

if (expressao1 && ligado == false)

certamente ficaria melhor uma negação.

if (expressao1 && !ligado)

Enfim… É o que eu penso. Usar a negação de boolean não é, de maneira nenhuma, uma má programação. E só não usar desnecessariamente.

O código que o cara digitou (esse abaixo)

if(!ligado) { //Se não estiver ligado  
  //Liga a lampada  
}

É um exemplo.
Não tem else. Ele só quer sasber se está desligado.
Acho que é muito melhor fazer do jeito que ele fez do que:

if(ligado == false) { //Se não estiver ligado  
  //Liga a lampada  
} 

E só uma dica de convenção JAVA, ghostman.

Nome de classe começa com letra maiúscula e métodos comecam com letra minúscula (caso o metodo tenha 2 palavras do tipo: ligaLampada, a segunda palavra, como escrevi, tem a letra maiúscula). Os únicos métodos que comecam com letra maiúscula são os construtores, que tem o nome da classe.

Atributos também não comecam por letras maiúsculas. A não ser que seja final, mas aí é o nome todo em caixa alta.

Entendeu ou substituir algumas linhas do teu código e colocar aqui iria ajudar?

Espero ter ajudado.

[quote=Kura]As vezes a negação de boolean se faz necessária.
Numa estrutura if com else não é msm necessário, mas não é só nesse caso que a negação de boolean pode ser usada.

Podemos usar só o if, por exemplo.
Ao invés de

if (expressao1 && ligado == false)

certamente ficaria melhor uma negação.

if (expressao1 && !ligado)

Enfim… É o que eu penso. Usar a negação de boolean não é, de maneira nenhuma, uma má programação. E só não usar desnecessariamente.

O código que o cara digitou (esse abaixo)

if(!ligado) { //Se não estiver ligado  
  //Liga a lampada  
}

É um exemplo.
Não tem else. Ele só quer sasber se está desligado.
Acho que é muito melhor fazer do jeito que ele fez do que:

if(ligado == false) { //Se não estiver ligado //Liga a lampada } [/quote]

Correto. Quando falei: “Negar uma condição booleana não é um bom meio de se programar” eu quis dizer no sentido figurado, ou seja, neste caso:

if(!ligado) { //Se não estiver ligado //Liga a lampada }

Provavelmente iria ter um else para desligar a lampada ou para dizer que ela estava ligada. Conforme o exemplo do carinha que está com dúvida:

else{ System.out.println("A lampada esta Ligada"); System.out.println("Ja foi ligada " + nVidaUtil + " vezes ");; }

Sendo assim, não seria necessário negar a condição booleana! ficando:

if (ligado) { // Lampada ligada. } else { // Lampada desligada }

Entendi.
Apesar de achar que no exemplo que ele citou não haveria else mesmo. =P

Até pq, pra mim, a negação dele só faria sentido se realmete não houvesse else.
Pq se houvesse, o if (ligada) {}else {} seria a melhor opção.

Se vc quer vincular o estado de um objeto com uma ação o pattern Strategy esta ai para ajudar.

Entretanto se a coisa for muito simples, vc pode ainda trabalhar com ifs e switch/cases … nesse caso o estado de uma lampada de ligada ou não pode ser facilmente representado por um booleano (afinal não há meio termo aparentemente). Ou vc trabalha com um booleano do tipo ligado / não-ligado ou vc pode trabalhar com enumerações que representem os estados de forma mais complexa.