Lembrando mais uma vez, não adianta só responder com "é assim" ou "é
assado". A idéia é que você, além de estimular o seu conhecimento
sobre Java e programação em geral, também estimule a sua capacidade de
organizar e explicar as idéias (e isso é bem mais importante do que
você imagina). Não tenham medo de rodar o código nas suas máquinas,
isso não é uma certificação e as soluções dificilmente vão vir de mão
beijada =D
Boa sorte a todos!
Puzzle 3: Long Division
Esse quebra-cabeça é chamado de "long division" porque ele é um
programa que divide dois valores do tipo "long". O dividendo
representa o número de microsegundos em um dia; o divisor, o número de
milisegundos em um dia. O que esse programa imprime? Ele está correto?
Se não, o que fazer pra deixar ele correto?
public class LongDivision {
public static void main(String[] args) {
final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
}
}
Dica: Frações?
--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208
Moral da história?
Muito cuidado com overflow (que é ter um resultado grande demais sendo
colocado em uma variável onde ele não cabe), em Java não existe
nenhuma proteção pra isso, então você não vai ver uma exceção quando o
resultado de uma operação for "perdido" (a não ser em casos
explícitos, aonde você tenta atribuir um long a um int, por exemplo).
2008/2/22 Clovis Leoncio Junior <clovis...@gmail.com>:
> O erro no código é que as váriaveis inteiras são automaticamente do tipo int
> e não long. A operação inteira irá ser calculada com 32 bits para só no
> final ser atribuída para o long. Como o resultado da multiplicação do
> MICROS_PER_DAY é maior que um int acontecerá um overflow antes da
> atribuição.
> Uma maneira de resolver isso seria:
>
> final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000L;
>
> Como o último número é um long isso forçará a VM a tratar a operação neste
> nível.
>
> (Tá... Minha explicação não é das mais articuladas mas tá certa...)
Problema interessante.
Em 22/02/08, Maurício Linhares<mauricio...@gmail.com> escreveu:
--
Bonifacio Segundo