Duvida com IF

14 respostas
Oliveira_SP

Olá pessoal, sou iniciante em Java e este é meu primeiro Tópico aqui no Guj, e creio que será o primeiro de muitos.
Bom, estou com uma duvida meio boba, mas que esta dando um erro e não consegui ver aonde ele está:

// Encontrar o maior numero.
if (a > b & a > c)
maior = a;
if (b > a & b > c)
maior = c;
if (c > a & c > b)
maior = b;

// Encontrar o menor numero
if (a < b & a < c)
menor = a;
if (b < a & b < c)
menor = c;
if (c < a & c < b)
menor = b;

No código acima, era pra encontrar o maior e o menor numero, mas a estrutura não está considerando o ultimo If do maior e nem o Ultimo If do menor numero.
Por exemplo: Se o usuario digita 1, 5 e 8, o resultado é:

Maior: 5
Menor: 1

Ao contrario, o Usuario digita 8, 5 e 1 e o resultado é:

Maior:8
Menor: 5

Aonde estou errando??

Obrigado!

14 Respostas

peczenyj

use && ao inves de &

o operador & é curto-circuitado :wink:

rafaelglauber

é pegadinha???

if (b > a & b > c) maior = c;

if (b < a & b < c) menor = c;

você testa com o b e atribue c??

ddmizu

Por isso que dá erro? Se ele fosse curto circuitado ele devia funcionar assim msmo, não?

ddmizu

Bendito ctrl c, ctrl v!

peczenyj

Humm… viajei então… desculpe :oops:

ddmizu

Não! To perguntando! :oops:

Pq tipo, curto circuitado não é quando vc tem por exemplo uma saraivada de AND, se um for falso ele nao continua resolvendo as outras expressões lógicas, certo?

Se for isso, devia funcionar no IF do cara, não?

Oliveira_SP

[size=9]ddmizu wrote:[/size]
Bendito ctrl c, ctrl v!

Falou tudo amigo :oops:

É que estou resolvendo alguns exercicíos de um livro, e como um é base para o outro, eu copio, colo e modifico. :roll:

Mas acabei percebendo algumas coisas:
-Deu na mesma usar operador de curto circuito e o outro simples.
-Agora esta apresentando um erro:
Quando o usuario repete um mesmo numero duas vezes, o resultado é zero. Por exemplo:

Usuario digita 1, 1, 8
Resultado: Maior 8, Menor 0.

Usuario digita 1, 1 e 1
Resultado: Maior 0, Menor 0.

O mesmo ocorre para maior e menor numero.

Desculpe se estiver abusando.

ddmizu

Ta tranquilo, campeão!

Na verdade não é q dá 0, dá o número q vc colocou pra inicializar as variáveis.
Vc tem um problema na lógica, observa:

A = 1, B=1 e C = 8.

if (a < b & a < c) // 1 menor q 1 e 1 menor q 8 - FALSO menor = a; if (b < a & b < c) // 1 menor q 1 e 1 menor q 8 - FALSO TBM menor = b; if (c < a & c < b) // 8 menor q 1 e 1 menor q 8 - FALSO DENOVO menor = c;

Entendeu o problema? 1 não é menor que 1! ;D

Oliveira_SP

Certo, intendi. Ele não estava atendendo nenhuma condição de If.
Resolvi o caso assim, e está dando certo agora (ele mostra o menor ou maior numero, mas não de qual variavel ele vem):

// Encontra o maior numero.
		if (a >= b && a >= c)
			maior = a;
		if (b >= a && b >= c)
			maior = b;
		if (c >= a && c >= b)
			maior = c;

// Encontra o menor numero
		if (a <= b && a <= c)
			menor = a;
		if (b <= a && b <= c)
			menor = b;
		if (c <= a && c <= b)
			menor = c;

Outra pergunta: é certo um programador se preocupar em usar o minimo de variaveis possivel?

Obrigado a todos!

ddmizu

Showw! Blza!

É… Entendendo que vc quer economizar variáveis pra economizar memória dependendo da dimensão do seu programa é importante sim. Só que muitas vezes economizar uma variável, implica em aumentar a complexidade do código e diminuir a legibilidade.

Cada caso é um caso. Em programas pequenos eu não sei se vale a pena esquentar a cabeça com isso.

Oliveira_SP

Ok, intendi amigo!

Obrigado pelas respostas, e até a próxima (que concerteza terá).

Abraços!

ddmizu

Tranquilo, campeão!

É um prazer ajudar!
;D

Abcs!

R

o “&” sozinho é usado para bitwise, operação com bits.
por exemplo, o resultado da lógica E ("&") do número 13 e 21 é igual a 5.

0 0 0 0 1 1 0 1 - 13
0 0 0 1 0 1 0 1 - 21

0 0 0 0 0 1 0 1 - 5

Seria só os bits que conténham valos nos dois elementos…

flw

ddmizu

Também, né?

Serve pras duas coisas: Bitwise e Curto-circuito.

Criado 11 de dezembro de 2007
Ultima resposta 11 de dez. de 2007
Respostas 14
Participantes 5