• Nenhum resultado encontrado

java.lang.Math

No documento caelum-java-objetos-fj11 (páginas 172-177)

Na classe Math, existe uma série de métodos estáticos que fazem operações com números como, por exemplo, arredondar(round), tirar o valor absoluto (abs), tirar a raiz(sqrt), calcular o seno(sin) e outros.

double d = 4.6;

long i = Math.round(d);

int x = -4;

int y = Math.abs(x);

Consulte a documentação para ver a grande quantidade de métodos diferentes. No Java 5.0, podemos tirar proveito doimport staticaqui:

import static java.lang.Math.*;

Isso elimina a necessidade de usar o nome da classe, sob o custo de legibilidade:

double d = 4.6;

long i = round(d);

int x = -4;

int y = abs(x);

14.10 - Exercícios: java.lang

Aqui faremos diversos testes, além de modificar a classe Conta. Você pode fazer todos esses exercícios dentro do próprio projetobanco.

1) Teste os exemplos desse capítulo, para ver que umaStringé imutável. Por exemplo:

public class TestaString {

public static void main(String[] args) { String s = "fj11";

s.replaceAll("1", "2"); System.out.println(s); }

}

Como fazer para ele imprimir fj22?

2) Como fazer para saber se umaStringse encontra dentro de outra? E para tirar os espaços em branco de umaString? E para saber se umaStringestá vazia? E para saber quantos caracteres tem umaString? Tome como hábito sempre pesquisar o javadoc! Conhecer a API, aos poucos, é fundamental para que você não precise reescrever a roda!

3) Crie uma classeTestaIntegere vamos fazer comparações com Integers:

Integer x1 = new Integer(10); Integer x2 = new Integer(10);

if (x1 == x2) {

System.out.println("igual"); } else {

System.out.println("diferente"); }

E se testarmos com oequals?

O que podemos concluir? Como verificar se a classeIntegertambém reescreve o métodotoString? A maioria das classes do java que são muito utilizadas terão seus métodos equals e toStringreescritos convenientemente.

Aproveite e faça um teste com o método estáticoparseInt, recebendo uma String válida e uma inválida (com caracteres alfabéticos), e veja o que acontece!

4) Utilize-se da documentação do Java e descubra de que classe é o objeto referenciado pelo atributooutda

System.

Repare que, com o devidoimport, poderíamos escrever:

// falta a declaração da saída

saida = System.out; saida.println("ola");

A variávelsaidaprecisa ser declarada de que tipo? É isso que você precisa descobrir. Se você digitar esse código no Eclipse, ele vai te sugerir um quickfix e declarará a variável para você.

Estudaremos essa misteriosa classe no capítulo a seguir.

5) Crie e imprima uma referência para Conta (ContaCorrente ou ContaPoupanca, no caso de sua Conta ser abstrata):

Conta conta = new ContaCorrente(): System.out.println(conta);

O que acontece?

6) Reescreva o método toStringda sua classe Conta fazendo com que uma mensagem mais propícia seja devolvida. Lembre-se de aproveitar dos recursos do Eclipse para isto: digitando apenas o começo do nome do método a ser reescrito e pressionandoCtrl+espaço, ele vai sugerir reescrever o método, poupando você do trabalho de escrever a assinatura do mesmo, e de cometer algum engano.

public abstract class Conta {

private double saldo;

public String toString() {

return "esse objeto é uma conta com saldo R$" + this.saldo; }

// restante da classe

}

Agora imprima novamente uma referência aConta. O que aconteceu?

7) Reescreva o métodoequalsda classeContapara que duas contas com o mesmonúmero de conta sejam consideradas iguais. Para isso, você vai precisar de um atributonumero. Esboço:

abstract class Conta {

private int numero;

public boolean equals(Object obj) { Conta outraConta = (Conta) obj;

return this.numero == outraConta.numero; }

// restante , colocar getter e setter para numero, usando Eclipse!

}

Você pode usar oCtrl+espaço do eclipse para escrever o esqueleto do métodoequals, basta digitar dentro da classeeque pressionarCtrl+espaço.

Crie uma classe TestaComparacaoConta, e dentro domain compare duas instâncias deContaCorrentecom

==, depois comequals, sendo que as instâncias são diferentes mas possuem o mesmonumerode conta (use osetNumero).

8) Um doublenão está sendo suficiente para guardar a quantidade de casas necessárias em uma aplicação. Preciso guardar um número decimal muito grande! O que poderia usar? (consulte a documentação, tente adivinhar onde você pode encontrar algo desse tipo pelos nomes dos pacotes, veja como é intuitivo). Odoubletambém tem problemas de precisão ao fazer contas, por causa de arredondamentos da aritmética de ponto flutuante definido pela IEEE 754:

http://en.wikipedia.org/wiki/IEEE_754

Ele não deve ser usado se você precisa realmente de muita precisão (casos que envolvam dinheiro, por exemplo).

Lembre-se: no Java há muita coisa já pronta. Seja na biblioteca padrão, seja em bibliotecas open source que você pode encontrar pela internet.

9) (opcional) Agora faça com que o equals da sua classe Conta também leve em consideração a String do nome do cliente a qual ela pertence. Se sua Contanão possuir o atributo nome, crie-o. Teste se o método criado está funcionando corretamente.

10) (opcional) Crie a classeGuardadorDeObjetos como visto nesse capítulo. Crie uma classe TestaGuardador

e dentro do main crie uma ContaCorrente e adicine-a numGuardadorDeObjetos. Depois teste pegar essa referência comoContaPoupanca, usando casting. Repare na exception que é lançada:

GuardadorDeObjetos guardador = new GuardadorDeObjetos(); ContaCorrente cc = new ContaCorrente();

guardador.adicionaObjeto(cc);

// vai precisar do casting para compilar! // use Ctrl+1 para o Eclipse gerar para você

ContaPoupanca cp = guardador.pega(0);

Teste também o autoboxing do java 5.0, passando um inteiro para nosso guardador.

11) (opcional) Escreva um método que usa os métodoscharAtelengthde umaStringpara imprimir a mesma caractere a caractere, com cada caractere em uma linha diferente.

12) (opcional) Reescreva o método do exercício anterior, mas agora imprima a String de trás para a frente. Teste-a para “Socorram-me, subi no ônibus em Marrocos” e “Anotaram a data da maratona”.

13) (opcional) Dada uma frase, reescreva essa frase com as palavras na ordem invertida. “Socorram-me, subi no ônibus em Marrocos” deve retornar “Marrocos em ônibus no subi Soccoram-me,”. Utilize o métodosplit

daStringpara te auxiliar.

14) (opcional) Pesquise a classeStringBuilder(ou StringBuffer no java 1.4). Ela é mutável. Por que usá-la em vez daString? Quando usá-la? Repare que ela tem um étodoreversee outros bem úteis!

14.11 - Desafio

1) Converta umaStringpara um número sem usar as bibliotecas do java que já fazem isso. Isso é, umaString x = “762"

deve gerar umint i = 762.

Para ajudar, saiba que um char pode ser “transformado” em int com o mesmo valor numérico fazendo:

char c = ’3’;

int i = c - ’0’; // i vale 3!

Aqui estamos nos aproveitando do conhecimento da tabela unicode: os números de 0 a 9 estão em sequen- cia! Você poderia usar o método estáticoCharacter.getNumericValue(char)em vez disso.

14.12 - Discussão em aula: O que você precisa fazer em Java?

Qual é a sua necessidade com o Java? Precisa fazer algoritmos de redes neurais? Gerar gráficos 3D? Relatórios em PDF? Gerar código de barra? Gerar boletos? Validar CPF? Mexer com um arquivo do excel?

O instrutor vai mostrar que para a maioria absoluta das suas necessidade, alguém já fez uma biblioteca e a disponibilizou.

Pacote java.io

“A benevolência é sobretudo um vício do orgulho e não uma virtude da alma.” –Doantien Alphonse François (Marquês de Sade)

Ao término desse capítulo, você será capaz de:

• ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão; • ler e escrever bytes, caracteres e Strings de/para arquivos;

• utilizar buffers para agilizar a leitura e escrita através de fluxos; • usar Scanner e PrintStream.

No documento caelum-java-objetos-fj11 (páginas 172-177)

Documentos relacionados