Teste comparação

9 respostas
R

Olá Pessoal, como faço esse teste
de comparação.

public class SSBool {

    public static void main(String[] args) {
        boolean b1 = true;
        boolean b2 = false;
        boolean b3 = true;
        
        if(b1 & b2| b2 & b3|b2) //como faço para saber a saida
            System.out.println("ok");
        
        if(b1 & b2| b2 & b3|b2|b1)
            System.out.println("dokey");////como faço para saber a saida
    }
}

[size=“11”]
[color=“red”]

  • Editado: Aumente as chances de alguém responder o seu tópico. Use BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários. - Matheus[/color][/size] :joia:

9 Respostas

M

Sua dúvida é com relação a tabela verdade do AND e OR? :roll:

_

o ideal ai… principalmente quando voce tem duvidas… separar em parenteses…

& faz um AND… retorna true apenas se os dois termos forem verdadeiros…

| faz um OR… retorna false apenas se os dois termos forem falsos…

no seu caso o ideal seria separar… algo como

((b1&b2)|b2)&(b3|b2)

foi so um exemplo, nao sei se seu codigo retorna isso…

mas se sua duvida for o seu codigo realmente retorna…
eu acho que ele le as operacoes da direita pra esquerda

entao no seu codigo

b1 & b2| b2 & b3|b2

ele faria primeiro b3|b2 ai faria o resultado & b2… o resultado | b2… e o resultado & b1

se estiver errado, alguem me corrija por favor…

S

Leia da esquerda para a direita. Toda vez que achar um AND, coloque as 2 partes do AND entre parêntereses.
No final, vai sobrar um monte de OR. Se algum for true, a expressão é verdadeira.

b1 & b2| b2 & b3|b2

é o mesmo que:

(b1 & b2) | (b2 & b3) | b2   // resulta em F or F or F
b1 & b2 | b2 & b3 | b2 | b1

é:

(b1 & b2) | (b2 & b3) | b2 | b1  // F or F or F or T

Um exemplo maior:

b1 & b2 & b3 | b1 | b1 & b2 & b3 & b1 & b2

Ficaria:

( (b1 & b2) & b3 ) | b1 | ( ( ( (b1 & b2) & b3 ) & b1 ) & b2 )

( (T and F) and T ) or T or ( ( ( (T and F) and T ) and T ) and F ).

Dá pra ver pelo “T” isolado que vai ser true. Os outros 2 lados só têm AND, e como tem pelo menos um F no meio, vai ser false.

:grin:

R

E isso aqui…

false && true| false& true|false
false&& true| false& true||false

Pelo que eu vi no primeiro ele retorna false e no segundo true, no primeiro acho que ele ja quebra na primeira operacao de && mas no segundo ele faz tudo, por que ?

S

Não, retorna false nos 2.

Os operadores && e || são “curto-circuito”.

Nos dois casos, ele é lido como “false and qualquer coisa”, e dá false.
Ele nem avalia o resto da expressão.

J

Aff, acho que todo mundo foi pela idéia mais complicada.

O que ele disse foi como saber a saída e não como chegar na saída...

Não precisa usar o if, pode jogar o resultado direto em um boolean, mas se quiser usar o if:
public class SSBool { 

    public static void main(String[] args) { 
        boolean b1 = true; 
        boolean b2 = false; 
        boolean b3 = true; 
        
        if(b1 & b2| b2 & b3|b2)
            System.out.println("True");
        else 
            System.out.println("False");
        
        if(b1 & b2| b2 & b3|b2|b1) 
            System.out.println("True");
       else
            System.out.println("False");
    } 
}

O que eu falei primeiro seria:
boolean b1 = true;
boolean b2 = false;
boolean b3 = true;
boolean b4 = b1 & b2| b2 & b3|b2;
System.out.println(b4);

R

mas tem alguma regra tipo primeiro os || depois && depois & e por ultimo | ou é sempre começa da esquerda pra direita ???

J

É como o Schuenemann colocou. Primeiro faz os &, depois os |, da esquerda para a direita.

J

Deitel, 4ª edição, pag 242:
()
&
^
|
&&
||

Ordenado do com maior precedência para o de menor precedência (todos com associatividade sempre da esquerda para a direita).

Criado 12 de agosto de 2005
Ultima resposta 12 de ago. de 2005
Respostas 9
Participantes 6