• No results found

Aviser og periodika som forekommer

Qualquer linguagem de programação possui várias formas de se fazer conver- sões entre seus tipos suportados, e Java não é diferente. Porém, as conversões mais simples que podemos ter são as conversões entre números e strings, e vamos mos- trar algumas das formas. Não se esqueça de que as outras formas você precisa in- vestigar na API do Java para verificar outras mais apropriadas para o seu problema.

Os links a seguir mostram onde encontrar mais referências sobre a linguagem java: <http://www.Oracle.Com/technetwork/java/api-141528.html>: especificações de to- das as api java <http://docs.Oracle.Com/javase/7/docs/api/>: especificação da api do java 7

Convertendo strings para números

É muito comum armazenar dados numéricos em objetos string. O CPF, por exemplo, é um caso. Todo CPF é um número com 11 dígitos e, dependendo do programa que é desenvolvido, é necessário fazer operações aritméticas com este dado. Porém dependendo do programa, ao obter o valor do CPF do usuá- rio pelo teclado, o valor é guardado em uma string sendo necessária sua conver- são posteriormente.

Para tratar deste tipo de situação, a classe Number possui subclasses que en- volvem os tipos primitivos numéricos (Byte, Integer, Double, Float, Longe Short – perceba que todas essas são classes, veja as iniciais maiúsculas, e não os tipos pri- mitivos). Cada uma dessas classes possui um método de classe chamado valueOf() que converte uma string em um objeto daquele tipo. Veja o seguinte exemplo:

1 public class TesteValueOf {

2 public static void main(String[] args) { 3 if (args.length == 2) {

4 // converte strings emnumeros

5 float a = (Float.valueOf(args[0])).floatValue(); 6 float b = (Float.valueOf(args[1])).floatValue(); 7 8 // algumas contas 9 System.out.println("a + b = " + (a+b)); 10 System.out.println("a - b = " + (a-b)); 11 System.out.println("a * b = " + (a*b)); 12 System.out.println("a / b = " + (a/b)); 13 System.out.println("a % b = " + (a%b)); 14 } else {

15 System.out.println("Digite dois números:"); 17 }

18 } 19 }

Este programa possui várias lições e uso de conceitos que já aprendemos. A linha 2 possui a declaração de um vetor sem tamanho definido do tipo String chamado args. Como já estudamos na seção anterior, é possível saber o tamanho do vetor por meio da propriedade length e a linha 3 usa esta propriedade para verificar se o tamanho do vetor é igual a 2 elementos. Em caso positivo, o resto do programa é executado. Lembra-se do if?

O método main de um programa em Java aceita como parâmetros os valores digitados na linha de comando. Por exemplo: se um programa Java que converte valores de graus Celsius para Fahrenheit chama converte.java, é possível estruturar o programa para ele executar pela linha de comando da seguinte forma:

C:\>java converte 100

// Neste caso, o programa vai converter 100 graus Celsius para Fahrenheit. A saí- da seria:

212.0

C:\>

Como podemos ver, o 100 na linha de comando será o primeiro valor do ín- dice 0 do vetor args[] usado no programa main, ou seja, args[0]=100. Se houvesse outros valores separados por espaço, eles seriam atribuídos aos próximos índices do vetor args[].

As linhas 5 e 6 são semelhantes. Vamos analisar a linha 5 e você, posterior- mente, analise a linha 6.

5 float a = (Float.valueOf(args[0])).floatValue();

A variável a vai receber o resultado da execução de 2 métodos: o valueOf() em primeiro lugar, pois está dentro dos parênteses, e depois o resultado será pas- sado para o método floatValue(). Como exemplo, vamos supor que o usuário executou o programa com os seguintes valores: 4.5 e 87.2, portanto args[0]=4.5 e args[1]=87.2.

Na linha 5, o método valueOf() obtém a string “4.5” e a transforma para o ob- jeto Float. Em seguida o método floatValue() transforma o valor do objeto Float para o float 4.5. Isto ocorre também na linha 6 para o args[1].

Com as variáveis a e b contendo seus valores convertidos para float, seguem algumas operações aritméticas comuns nas linhas seguintes.

Uma observação a ser feita é que as subclasses da classe Number que im- plementam tipos numéricos primitivos também possuem um método chamado parse____(), por exemplo Integer.parseInt(), Double.parseDouble(), que podem ser usados para converter strings para os números primitivos. Desde que um tipo

primitivo é retornado ao invés de um objeto, o parseFloat() é mais direto que o valueOf(). A linha 5 (e 6) poderia ser escrita de uma maneira mais direta assim:

float a = Float.parseFloat(args[0]);

Convertendo números para strings

Também é frequente converter um número para uma string. Há várias formas de se fazer isso e vamos mostrar uma delas.

int i;

// Concatena "i" com uma string vazia; a conversão é feita “na mão”, usando o “+” String s1 = "" + i;

ou

// O método de classe valueOf(). String s2 = String.valueOf(i);

Cada uma das classes Number possui um método toString() para converter um número em uma string. Veja o exemplo a seguir:

public class TestaToString {

public static void main (String[] args) { double d = 858.48;

String s = Double.toString(d);

int ponto = s.indexOf('.');

System.out.println(ponto + " dígitos " + "antes do ponto decimal."); System.out.println((s.length()-ponto-1)+" dígitos depois do pon- to decimal.");

} }

A saída do programa é:

3 dígitos antes do ponto decimal. 2 dígitos depois do ponto decimal.

ATIVIDADES

01. Faça um programa em Java que verifique se os clientes de uma loja excederam o limite do cartão de crédito. Para cada cliente, temos os seguintes dados:

– número da conta corrente – saldo no início do mês

– total de todos os itens comprados no cartão – total de créditos aplicados ao cliente no mês – limite de crédito autorizado

Todos esses dados são inteiros. O programa deve mostrar o novo saldo de acordo com a seguinte fórmula (saldo inicial + despesas – créditos) e determinar se o novo saldo excede o limite de crédito. Para aqueles clientes cujo novo saldo excedeu, o programa deve mostrar a frase: “Limite de crédito excedido”.

02. Considere o seguinte fragmento de código:

if (umNumero >= 0) if (umNumero == 0) System.out.println("Primeira string"); else System.out.println("Segunda string"); System.out.println("Terceira string");

a) O que você acha que será impresso se umNumero = 3?

b) Escreva um programa de teste contendo o código acima; assuma que umNumero = 3. Qual a saída do programa? Foi o que você respondeu na questão a? Explique a saída; em outras palavras, qual é o fluxo de controle do fragmento do código?

c) Usando somente espaços e quebras de linha, reformate o fragmento para torná-lo mais legível.

d) Use parênteses, colchetes, chaves e o que for necessário para deixar o código mais claro.

REFLEXÃO

O desenvolvimento em Java requer um esforço além dos livros didáticos. Aliás, qualquer linguagem é assim. Cabe ao estudante se esforçar em conhecer outros recursos da lingua-

da documentação, saber pesquisar dentro dela é fundamental para o bom aprendizado de qualquer linguagem. Nunca deixe de explorar a API, pois é ali que você vai encontrar a docu- mentação mais completa do recurso que você está precisando.