A lógica de raciocínio do código

[b]Olá Pessoal,

Estou iniciando o estudo com java, e logicamente mais um, que tenta entender como funciona “a lógica de raciocínio do código”.

Estou com um exemplo que já tenho a resposta mas não estou entendido o contexto que chegou ao resultado.[/b]

boolean b, b1 = true, b2 = false, b3 = true; int i = 10; b = !(b1 | b2 && (i++= 10)) & (i++ == 10);

[b]Resultado : b = false e i = 11:

Qualquer ajuda será bem vinda.

Abs

[/b]

Esse código é um exemplo claro do que não deve ser feito.

Para ver como estranhezas desse tipo rodam, use o Jeliot:
http://cs.joensuu.fi/jeliot/

E ai beleza, bem, vamos ver no que eu consigo te ajudar…

essa primeira parte:

boolean b, b1 = true, b2 = false, b3 = true;

você está atribuindo os valores para as variáveis (no java é possível atribuir o mesmo valor de uma vez para uma ou mais variáveis:boolean b, b1 = true...
essa parte creio que vc pegou fácil, agora quanto a atribuição com condições na terceira linha:

b = !(b1 | b2 && (i++= 10)) & (i++ == 10);

seria algo parecido com:

b recebe inverte(se b1 for verdadeiro ou b2 for verdadeiro e (se i++recebe10 for 11)) e (se i++recebe10 for 11);

isso acima foi o meu “portugol” ou seja uma simples tradução do computacional para uma linguagem mais simples de entendermos.

Agora vamos as explicações dos valores:

a sua variável b acabou com o valor falso porque a condição não foi satisfeita:

b = !(true | false && (i=10) & (i=10));

o que essa parte representa:
no caso do true | false, prevaleceu o true, pois basta apenas uma das duas opções para satisfazer a condição, agora no if interno (i++=10), o que esta ali nada mais é do que 11 (i++) troca pra 10, e por último o if externo, segue a mesma regra para o primeiro, e por fim ao sair de todos os ifs, a um sinal de exclamação, isso significa que o valor booleano que sair da condição acaba sendo invertido (se era true passa a ser false e vice-versa).

No final sua variavel b acaba recebendo isso:

b = !(true && true) & (true) aqui acaba invertendo para: b = false;, já o seu i não muda o valor, apenas foi incrementado para satisfazer as condições.

Espero ter te ajudado, tentei simplificar o máximo que pude, mas se caso ainda surgirem dúvidas, por favor avisa ae beleza?

Abraço e boa sorte.

Bem, vamos la:

boolean b, b1 = true, b2 = false, b3 = true;   
int i = 10;   
b = !(b1 | b2 && (i++= 10)) & (i++ == 10);  

Temos b1 como “true” e b2 como “false”
temos tambem o int i com valor “10”

Na primeira verificação temos b1 OU b2, como b1 é true, passamos por ela;
Na segunda verificação temos que i++ == 10, a função ++ incrementa a variavel depois, portanto 10 == 10, a verificação é TRUE e após isso o valor de i passa ser 11
Ao final disso, temos que a verificação foi TRUE, porém temos ! negando o resultado, logo b = !true, então b = false;

Espero que tenha ajudado.