A minha cópia do Java Puzzles chegou (meio tarde eu diria, mas chegou
- http://www.amazon.com/Java-TM-Puzzlers-Pitfalls-Corner/dp/032133678X/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1203640400&sr=8-1
) e eu, que já tinha achado a idéia do livro interessante (é uma
sequência de puzzles sobre a linguagem Java e programação em geral)
acho que seria uma boa se nós começassemos a responder eles aqui na
lista. A minha idéia é pegar um por semana, jogar aqui e o pessoal ir
respondendo com as suas soluções/explicações pra o que estiver
acontecendo, terminando a semana, quando for o dia de jogar o novo
puzzle, fecha-se a explicação do que estava acontecendo (usando a
explicação do livro ou até alguma das explicações dadas na lista) e o
jogo começa denovo com um novo quebra-cabeça.
Pra começar, o primeiro do livro, Oddity:
O código seguinte tem por objetivo determinar se o número passado como
seu argumento é ímpar. O método funciona?
public static boolean isOdd(int i) {
return i % 2 == 1;
}
Que venham as respostas (junto de suas respectivas explicações).
PS: Tá, eu sei que esse é peba, mas é pra ir esquentando :)
--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208
Não é só dizer que não funciona, tem que explicar =P
--
Mais opiniões?
--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208
Mas eu não deveria estar dizendo isso, quando acabar eu aviso que
acabou, continuem conjecturando =D
2008/2/21 Alberto Ivo <alber...@gmail.com>:
> é isso mesmo que já foi respondido.. tem mais alguma coisa a acrescentar?
>
Já vi que esse puzzle saiu melhor do que a encomenda \o/
--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208
2008/2/21 Arthur Gouveia <arthur....@gmail.com>:
passar numeros negativos?
Mas ainda dá pra deixar esse código ainda mais rápido (operações de
resto são custosas pra máquina virtual).
Se eu quisesse tirar o máximo de performance desse código, qual seria
o jeito mais rápido de saber se um número é par ou impar sem usar o
operador de resto?
--
Mas se esse negócio der certo mesmo agente pode pegar o Head First e
tirar uns presentes de lá também :)
Servlets tem magia negra o suficiente pra gerar diversos puzzles.
2008/2/21 Frederico Guedes Pereira <fredgued...@gmail.com>:
--
Só falta você explicar o que acontece aí Fred.
--
sabemos que o valor 1 em binário é um 1 seguido por 35 zeros (inteiros em Java possuem 4 bytes). Quando você faz um AND
Ótima explicação Fred, mais um motivo pra se prestar atenção nos
operadores bit-a-bit do Java.
Mas agora é hora de puxar o ronco, amanhã sai o Puzzle 2 =D
2008/2/21 Frederico Guedes Pereira <fredgued...@gmail.com>:
>
>
--
--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208
2008/2/21 Alberto Ivo <alber...@gmail.com>:
|| "Sofisticado - 1. Falsificado, contrafeito, adulterado. (...)"
|| Aurélio Ed. Eletrônica v3.0
||
Exemplo:
O número 1 em binário: 00001 -> ímpar
O número 2 em binário: 00010
O número 3 em binário: 00011 -> ímpar
O número 4 em binário: 00100
O número 5 em binário: 00101 -> ímpar....
Então fazendo um AND bit a bit com 1 teríamos:
1 & 1 = ?
00001
00001 AND
-----
00001
2 & 1 = ?
00010 AND
00001
-----
00000
Desta maneira todo o resultado da operação lógica AND entre um número
ímpar com o número 1 resultará sempre em 1.
Sem contar que não existem divisões e restos... Essa é considerada a
melhor solução (falando de performance) para identificar se um número é
par o ímpar.
Espero ter esclarecido. =]
Maurício Linhares escreveu:
O operador bit-a-bit faz um AND entre os bits da variável i com o valor inteiro literal 1. Da pré-infância binária de nós todos, sabemos que o valor 1 em binário é um 1 seguido por 35 zeros (inteiros em Java possuem 4 bytes). Quando você faz um AND destes com o valor de i, só resultará em 1 se o valor de i for ímpar (números pares têm o bit mais à direita igual a zero, sempre). Exemplo:
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
2008/2/22 Rodrigo C. L. <tapeted...@gmail.com>: