[RESOLVIDO]Dúvida sobre If e Else

Poque que nessa condição booleana se dá “pode entrar” se no if eu coloquei condição falsa se ele tiver mais de 18 anos?

public class Fi {
public static void main(String[] args) {
 int idade = 19;
 boolean amigoDoDono = true;
 if (idade < 18 && amigoDoDono == false) {
     System.out.println("Nao pode entrar");
}
else {
     System.out.println("Pode entrar"); 
}
}
}

Só vai dizer que não pode entrar quando a idade for menor que 18 anos E não for amigo do dono.

No teu caso, ao ver a condição da idade, não vai coincidir porque 19 não é menor que 18 e vai logo para o else e dizer que pode entrar.

Oi,

só um comentário. Quando usares um boolean em uma condição, não há necessidade de compara-lo a true ou false.
Veja:

[code]boolean eMaior = true;
// se eMaior for verdadeira…
if(eMaior) {

}
// se eMaior for falso…
if(!eMaior) {

}[/code]

Obtém o mesmo resultado fazendo:

[code]boolean eMaior = true;
// se eMaior for verdadeira…
if(eMaior == true) {

}
// se eMaior for falso…
if(eMaior == false) {

}[/code]

Apenas acho mais elegante. É apenas uma dica ok?
Forte abraço.

Só complementando:

Quando se utiliza a condição de validação E todos os critérios têm que ser válidos.
Como a sua primeira validação é da idade e ela já devolve FALSE, nem é necessário mais verificar os próximos critétios porque no geral será FALSE, caindo na condição do ELSE

Para entrar no System.out.println(“Nao pode entrar”);
É necessário, segundo o seu código, idade ser menos que 18 e também o amigoDoDono ser igual a falso

o falso que você colocou, apenas ser para o amigoDoDono.

Segue uma breve explicação sobre sa dúvida. Espero que eu tenha entendito se era essa dúvida mesmo, mas em
todo caso está ai.

	public static void main(String[] args) {
		int idade = 19;
		boolean amigoDoDono = true;
		/*
		 *  Aqui voce está dizendo o seguinte
		 *  
		 *  Se a IDADE for < MENOR que 18 anos E AMIGO DO DONO for FALSE
		 *  Não pode entrar
		 *  Senão 
		 *  Pode entrar
		 *  
		 *  Quando você faz amigoDoDono == false você está comparando 
		 *  e não atribuindo false para Amigo do dono pois você definiu
		 *  amigoDoDono como true na variável. Logo ele 'pode entrar'.
                 * Agora se a idade for 17 e amigo do dono for false irá imprimir "Não pode entrar"
		 */
		if (idade < 18 && amigoDoDono == false) {
			System.out.println("Não Pode entrar");
		} else {
			System.out.println("Pode entrar");
		}
	}

public class Fi { public static void main(String[] args) { int idade = 19; boolean amigoDoDono = true; if (idade < 18 && !amigoDoDono) { System.out.println("Nao pode entrar"); } else { System.out.println("Pode entrar"); } } }

Você esta dizendo que o cara tem 19 anos, ou seja MAIOR que 18, e ele É amigo do dono…sendo assim a sua condição diz que ele PODE entrar, se vc quer que ele nao entre, vc deve mudar as variaveis para 17 anos e false, ou entao muda a própria condição

public class Fi { public static void main(String[] args) { int idade = 17; boolean amigoDoDono = false; if (idade < 18 && !amigoDoDono) { System.out.println("Nao pode entrar"); } else { System.out.println("Pode entrar"); } } }

(se idade < 18 ) = False

amigo do dono = False

Pela lógica proposicional:

False ^ False = false

[quote=MatheusFalcade]public class Fi { public static void main(String[] args) { int idade = 19; boolean amigoDoDono = true; if (idade < 18 && !amigoDoDono) { System.out.println("Nao pode entrar"); } else { System.out.println("Pode entrar"); } } }

Você esta dizendo que o cara tem 19 anos, ou seja MAIOR que 18, e ele É amigo do dono…sendo assim a sua condição diz que ele PODE entrar, se vc quer que ele nao entre, vc deve mudar as variaveis para 17 anos e false, ou entao muda a própria condição

public class Fi { public static void main(String[] args) { int idade = 17; boolean amigoDoDono = false; if (idade < 18 && !amigoDoDono) { System.out.println("Nao pode entrar"); } else { System.out.println("Pode entrar"); } } }
[/quote]

hehehe, até entendo… mas no caso do autor do tópico, ele não quer fazer o cara “entrar” ele quis entender porque com a inversão da condição foi alterado o fluxo.
Ele só ta tentando entender a lógica da condição, não o código…

Entendi errado, desculpa ae haha ;D

[quote=Super Fabio]Poque que nessa condição booleana se dá “pode entrar” se no if eu coloquei condição falsa se ele tiver mais de 18 anos?

public class Fi { public static void main(String[] args) { int idade = 19; boolean amigoDoDono = true; if (idade < 18 && amigoDoDono == false) { System.out.println("Nao pode entrar"); } else { System.out.println("Pode entrar"); } } } [/quote]

Veja, você só tem 4 condições possíveis nesse caso:

  1. Amigo = V, MaiorDe18 = V
  2. Amigo = F, MaiorDe18 = V
  3. Amigo = V, MaiorDe18 = F
  4. Amigo = F, MaiorDe18 = F

Sua única condição verificada é a 4, sendo assim todas as outras irão permitir a entrada.
No caso if (idade < 18 && amigoDoDono == false) é o mesmo que “Amigo = F e MaiorDe18 = F”.
Seu caso só iria negar a entrada se:
if (idade < 18 || !amigoDoDono)
Nesse caso, somente entrariam os maiores de 18 anos que são amigos.

Bem explicado doravan

Dejavu :shock:

http://www.guj.com.br/java/109501-ajuda
http://www.guj.com.br/java/117137-operador-
http://www.guj.com.br/java/249519-apresentacao-e-duvida

Parece que esse exercício causa dúvidas em muitos estudantes de java :wink: