Potências de 2  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
KamillaaH
What is classpath?
[Avatar]

Membro desde: 08/09/2009 21:06:24
Mensagens: 6
Offline

Olá!
Tenho que fazer um algoritmo que identifique quais os números que são potências de 2.
Consegui implementar, só que só são identificadas as potências a partir de 4. Porém, 1 e 2 também são potências.
Alguém pode me dar uma dica sobre o que fazer para os números 1 e 2 serem identificados?
Obrigada!




O console mostra:

AlissonGuj
JavaBaby
[Avatar]

Membro desde: 09/10/2009 20:17:40
Mensagens: 91
Offline

talvez se vc fizesse um if e um esle if para o 1 e 2 não funcionaria?
KamillaaH
What is classpath?
[Avatar]

Membro desde: 08/09/2009 21:06:24
Mensagens: 6
Offline

Sim, pensei nisso... Só que no else e depois if teria que ser agor tipo...





E daí eu tenho erro...




=/

This message was edited 1 time. Last update was at 16/10/2009 21:04:20

AlissonGuj
JavaBaby
[Avatar]

Membro desde: 09/10/2009 20:17:40
Mensagens: 91
Offline

não sua sitaxe seria assim

if () {

}else if(){

}else{

}
KamillaaH
What is classpath?
[Avatar]

Membro desde: 08/09/2009 21:06:24
Mensagens: 6
Offline









Continua sem aparecer o 1 e o 2... T.T
Alan_XD
Entusiasta Java

Membro desde: 05/06/2009 16:28:33
Mensagens: 20
Offline

Oi Camila
Num sei se vai funcionar, mas eu faria assim

Porém, se você quiser manter do jeito que fez pode fazer o seguinte, talvez o retorno do else if esteja invertido

E tire o igual do for senão ele vai dividir o 2 por 2 e vai dar 1.

Tenta usar o debug com breakpoint para verificar, ajuda bastante.
Espero ajudar.
Abraços, Alan

This message was edited 1 time. Last update was at 16/10/2009 23:32:45

KamillaaaH
JavaChild
[Avatar]

Membro desde: 08/09/2009 19:59:03
Mensagens: 113
Offline

Obrigada, Alan! Deu certo!
Só que... eu estava perdendo a precisao dos números, daí alguns que tinha 2.895 era passados como true. Resolvi colocando float em todos, acontece que alguns números ainda continuam com o mesmo problema e eu não consigo idenficar o motivo...
Alguém pode me ajudar?
Obrigada!




No console:

Sami Koivu
Virtual Machine Man
[Avatar]

Membro desde: 16/09/2004 09:49:27
Mensagens: 574
Localização: Curitiba-PR
Offline

Olá,

Talvez você queira/precisa resolver do seu jeito, provavelmente isso é um exercisio de lógica, e se for o caso, favor ignorar minha sugestão:

No mundo binário, as potências de 2 têm uma caracteristica que é que eles tem exatamente um bit setado, o resto são zeros.

dec 1 = bin 1
dec 2 = bin 10
dec 4 = bin 100
dec 8 = bin 1000
...
e assim pra frente. A classe Integer tem um método que diz quantos bits setados tem num número. Portanto seu método poderia ser definido assim (ele funciona para valores positivos. Só dá resultado errado para -214748364 :

[]s,
Sami

(Slightly) Random Broken Thoughts on Java Security
[Email] [WWW] [Yahoo!] [MSN]
KamillaaaH
JavaChild
[Avatar]

Membro desde: 08/09/2009 19:59:03
Mensagens: 113
Offline

Ótimo! Deu certinho... Obrigada!
Mas... eu ainda queria saber o motivo de eu estar perdendo a precisão naquela outra implementação... Achei bastante estranho pois a precisão só é perdida para determinados números... =S
Sami Koivu
Virtual Machine Man
[Avatar]

Membro desde: 16/09/2004 09:49:27
Mensagens: 574
Localização: Curitiba-PR
Offline

Olá,

Acho que está o problema está na lógica.

Para mim, isso parece dar o resultado correto:


Eu tirei o cont-- do for, e invertei a regra do if final. (linha 15 nesse exemplo)

[]s,
Sami


(Slightly) Random Broken Thoughts on Java Security
[Email] [WWW] [Yahoo!] [MSN]
KamillaaaH
JavaChild
[Avatar]

Membro desde: 08/09/2009 19:59:03
Mensagens: 113
Offline

Sim, deu certo! =D
Só que o 1 e o 2 continuam de fora... T.T

This message was edited 2 times. Last update was at 18/10/2009 11:31:05

KamillaaaH
JavaChild
[Avatar]

Membro desde: 08/09/2009 19:59:03
Mensagens: 113
Offline

HAHA! Consegui! xD

Obrigada, gente!

This message was edited 1 time. Last update was at 18/10/2009 12:49:11

 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team