Operadores lógicos

Olá pessoal! Estou tentando criar o seguinte programa:

Escreva um programa para autorização de entrada numa boate.
– Nessa boate, uma pessoa pode entrar se for maior de idade (18 anos ou mais), ou, se ela for amigo do dono da boate, mesmo que menor de idade.

O problema é que mesmo quando a pessoa é maior de 18 anos se não for, também amigo do dono não está permitindo a entrada.

Segue o programa:

public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    int idade[] = new int[20];
    int total = 0;
    int valor;
    int verdadeiro = 1;
    int falso = 0;
    String nome;

    for(int i = 0; i < idade.length; i++) {
        System.out.print("Informe um nome: ");
        nome = entrada.next();
        System.out.print("Informe a idade: " );
        idade[i] = entrada.nextInt(); 
        System.out.print("É amigo do dono da boate? [1] Sim | [0] Não :" );
        valor = entrada.nextInt();
        
	if (valor == verdadeiro) {
		System.out.print("Sim! ");
	} else {
		System.out.print("Não! ");
            }

            if (i > 18) {
               System.out.println("Entrada liberada!"); 
            
            } else if ((i < 18) && (valor == verdadeiro)){
               System.out.println("Entrada liberada!");
                       
            } else {
                System.out.println("Entrada proibida!");
        }
      }
}    

}

1 curtida

A proposta é para resolução usando operadores lógicos |, &, ||, && ou ! (pesquise e veja a diferença entre eles e quando usar os mesmos)

Sou novo aqui também. Eu acho que nesse trecho:

} else if ((i < 18) && (valor == verdadeiro)){
System.out.println(“Entrada liberada!”);

        }

Ao invés de vc usar o && vc deveria usar o ||.

Você esta usando o valor de i no if, o correto não seria idade[i]?

Você quer dizer else if ((i < 18) || (valor == verdadeiro)) ?

Se for isso, a condição diz: se I for menor que 18 ou valor equivaler a verdadeiro.

Pense bem.

@FearX, mas pelo o que entendi do enunciado acima, ele precisa ser maior de 18 OU ser amigo do dono da boate.
Mas se eu estiver equivocado vc pode nos explicar melhor?
Obrigado :smiley:

Sim, você entendeu certo, meu caro. O problema está na condição (i < 18). Entendeu agora?

Ainda escrevi por extenso para ver se você visualizava! rs.

1 curtida

Ah, agora eu saquei. Vlw amigo! =D

Pessoal, obrigada a todos!

O programa final ficou assim:

public static void main(String[] args) {

    Scanner entrada = new Scanner(System.in);
    int idade[] = new int[3];

    int valor = 0;
    int verdadeiro = 1;
    int falso = 0;
    String nome;
    for (int i = 0; i < idade.length; i++) {

        System.out.print("Informe um nome: ");
        nome = entrada.next();
        System.out.print("Informe a idade: ");
        idade[i] = entrada.nextInt();

        if (idade[i] > 18) {
            System.out.println("Entrada liberada!");

        }
        if (idade[i] < 18) {
            System.out.print("É amigo do dono da boate? [1] Sim | [0] Não :");
            valor = entrada.nextInt();
        }
        if (valor == 1) {
            System.out.println("Entrada liberada!");

        } else if ((idade[i] < 18) && (valor == 0)) {
            System.out.println("Entrada proibida!");

        }
    }
}

}

Outra coisa, alterei o programa para que quando a pessoa for maior de 18 anos, não perguntar se é amigo do dono da boate, já que não há necessidade.

E os operadores lógicos?
A ideia do enunciado é que você reduza o uso de ifs/elses.
Assim sendo, penso que a melhor solução seria:

public static void main(String[] args) {

    Scanner entrada = new Scanner(System.in);
    int idade[] = new int[3];

    int valor = 0;
    int verdadeiro = 1;
    int falso = 0;
    String nome;
	
	for (int i = 0; i < idade.length; i++) {
        System.out.print("Informe um nome: ");
        nome = entrada.next();
        System.out.print("Informe a idade: ");
        idade[i] = entrada.nextInt();
		System.out.print("É amigo do dono da boate? [1] Sim | [0] Não :");
		valor = entrada.nextInt();
	
		if(idade > 18 || valor != 0) {
			System.out.println("Entrada liberada!");
		} else {
			System.out.println("Entrada proibida!");
		}
		
	}
}

Pois é, eu entendi o que você quis dizer, quando falou que a proposta seria utilizar os operadores lógicos e concordo, mas quando mostrei ao professor ele me pediu para que quando a pessoa for maior de 18 anos não perguntar se é amiga do dono. :frowning:

Sem dificuldade nisso, ué. Depois que ele fazer o input da idade, você compara se é menor que 18. Se for menor que 18. pergunta se é amigo do dono. Se não entrar na condição, já pode liberar a entrada e boa.

 System.out.print("Informe a idade: ");
        idade[i] = entrada.nextInt();

if(idade[i]<18){
System.out.print("É amigo do dono da boate? [1] Sim | [0] Não :");
		valor = entrada.nextInt();
} else{
//resto da condição
}