• Nenhum resultado encontrado

S INTAXE 4.1 Coerção (Typecasting)

No documento Conceitos de Computação com Java_nodrm.pdf (páginas 145-148)

(nomeDoTipo) expressão

Exemplo:

(int) (balance * 100)

Objetivo:

Converter uma expressão em um tipo diferente

AUTOVERIFICAÇÃODAAPRENDIZAGEM

1. Quais são os tipos numéricos mais utilizados em Java?

2. Quando a coerção (long) x produz um resultado diferente a partir da chamada Math.round(x)?

3. Como você arredonda o valor doublex para o valor int mais próximo, supondo que você saiba que ele é menor que 2 · 109?

Utilize uma coerção (nomeDoTipo) para converter um valor em um tipo diferente.

Utilize o método Math. round para arredondar um número de ponto fl utuante para o inteiro mais próximo.

Números grandes

O Tópico Avançado 4.1 mostra como utilizar os tipos BigInteger e BigDecimal para li- dar com números realmente grandes ou para melhor controlar erros de arredondamento.

T

ÓPICOAVANÇADO

4.1

Números binários

O Tópico Avançado 4.2 discute como números são codifi cados no computador utili- zando o sistema binário.

T

ÓPICOAVANÇADO

4.2

O bug de ponto fl utuante do Pentium

O Fato Aleatório 4.1 relata a história do bug de ponto fl utuante do Intel Pentium, uma falha nesse processador amplamente vendido que causava multiplicações erradas em circunstâncias raras. Descoberto por um professor de matemática que utilizava um computador em uma pesquisa sobre números primos, esse bug resultou em um recall de todos os chips afetados.

F

ATOALEATÓRIO

4.1

4.2 Constantes

Em muitos programas, você precisa utilizar constantes numéricas – valores que não mu- dam e que são especialmente importantes para um determinado cálculo.

Um exemplo típico do uso de constantes é um cálculo que envolve valores de moe- das, como este:

payment = dollars + quarters * 0.25 + dimes * 0.1 + nickels * 0.05 + pennies * 0.01;

A maior parte do código está autodocumentada. Mas quatro quantidades numéricas, 0.25, 0.1, 0.05 e 0.01, são incluídas na expressão aritmética sem explicação alguma. Naturalmente, nesse caso, sabemos que o valor de um nickel é cinco centavos, o que explica os 0.05 e assim por diante. Mas se a próxima pessoa que precisar manter esse código residir em um outro país, talvez ela não saiba que um nickel é uma moeda de cinco centavos.

Portanto, uma boa idéia é utilizar nomes simbólicos para todos os valores, mesmo para aqueles que parecem óbvios. Eis uma versão mais clara do cálculo do total:

double quarterValue = 0.25; double dimeValue = 0.1; double nickelValue = 0.05; double pennyValue = 0.01;

payment = dollars + quarters * quarterValue + dimes * dimeValue + nickels * nickelValue + pennies * pennyValue;

Há um outro aprimoramento que podemos fazer. Há uma diferen- ça entre as variáveis nickels e nickelValue. A variável nickels pode verdadeiramente variar ao longo da vida do programa, à me- dida que calculamos diferentes pagamentos. Mas nickelValue sempre é 0.05.

Em Java, constantes são identifi cadas com a palavra-chave fi nal. Uma variável mar- cada como fi nal nunca pode mudar depois de ser confi gurada. Se tentar mudar o valor de uma variável fi nal, o compilador informará um erro e seu programa não compilará.

Muitos programadores utilizam nomes com todas as letras maiúsculas para constantes (variáveis fi nal), como NICKEL_VALUE. Dessa maneira, é fácil distinguir entre variáveis (com a maioria das letras em minúsculas) e constantes. Seguiremos essa convenção neste livro. Mas essa regra é uma questão de bom estilo, não um requisito da linguagem Java. O compilador não reclamará se você atribuir a uma variável fi nal um nome com todas as letras em minúsculas.

Eis uma versão aprimorada do código que calcula o valor de um pagamento. fi nal double QUARTER_VALUE = 0.25;

fi nal double DIME_VALUE = 0.1; fi nal double NICKEL_VALUE = 0.05; fi nal double PENNY_VALUE = 0.01;

payment = dollars + quarters * QUARTER_VALUE + dimes * DIME_VALUE + nickels * NICKEL_VALUE + pennies * PENNY_VALUE;

Freqüentemente, valores de constantes são necessários em vários métodos. Você deve então declará-los junto com os campos de instância de uma classe e marcá-los como sta- tic e fi nal. Como dito, fi nal indica que o valor é uma constante. A palavra-chave static signifi ca que a constante pertence à classe – isso será explicado com mais detalhes no Capítulo 8.

public class CashRegister {

// Métodos

. . . // Constantes

public static fi nal double QUARTER_VALUE = 0.25; public static fi nal double DIME_VALUE = 0.1; public static fi nal double NICKEL_VALUE = 0.05; public static fi nal double PENNY_VALUE = 0.01; // Campos de instância

private double purchase; private double payment; }

Uma variável fi nal é uma constante. Depois de o valor ser confi gurado, ele não pode ser alterado.

Utilize constantes identifi cadas para facilitar a leitura e manutenção dos seus programas.

Declaramos as constantes como public. Não há perigo nisso porque constantes não po- dem ser modifi cadas. Métodos de outras classes podem acessar uma constante pública especifi cando primeiro o nome da classe em que ela é defi nida, em seguida um ponto e então o nome da constante, como CashRegister.NICKEL_VALUE.

A classe Math da biblioteca padrão defi ne algumas constantes úteis: public class Math

{ . . .

public static fi nal double E = 2.7182818284590452354; public static fi nal double PI = 3.14159265358979323846; }

Você pode referenciar essas constantes como Math.PI e Math.E em qualquer um dos seus métodos. Por exemplo,

double circumference = Math.PI * diameter;

O programa de exemplo no fi nal desta seção demonstra o uso de constantes. Esse pro- grama mostra um refi namento da classe CashRegister do Quadro Como Fazer 3.1. A interface pública dessa classe foi modifi cada para solucionar um problema comum do negócio.

Caixas bancários sobrecarregados às vezes cometem erros na soma dos valores de moedas. Nossa classe CashRegister apresenta um método cujas entradas são contagens

de moedas. Por exemplo, a chamada:

register.enterPayment(1, 2, 1, 1, 4);

insere um pagamento que consiste em um dólar, duas moedas de vinte e cinco centavos (quarters), uma moeda de dez centavos (dime), uma moeda de cinco centavos (nickel) e quatro moedas de um centavo (pennies). O método enterPayment calcula o valor total do pagamento, US$ 1.69. Como você pode ver a partir da listagem de código, o método usa constantes identifi cadas para os valores de moedas.

No documento Conceitos de Computação com Java_nodrm.pdf (páginas 145-148)