Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização...
Transcript of Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização...
Programação IAula 3
(Entrada de Dados)
Prof. Gilberto Irajá MüllerProf. Gilberto Irajá Müller
Última atualização 11/3/2009
Métodos que retornam valor • Quando um método termina sua execução, ele
devolve o controle da máquina para o método que o chamou. Além disso, um método pode, neste momento, devolver junto um valor
• Para que um método devolva um valor:• na sua declaração, a palavra void deve ser substituída
pelo tipo do valor a ser devolvido pelo método• no bloco de código do método deve haver pelo menos
um comando return expressão;• a chamada do método deve ser feita no lugar onde
caberia colocar um valor do tipo que ele retorna
Métodos que retornam valor• Sintaxe
• return expressão; (está relacionando com o tipo de retorno do método)
• return; (sair imediatamente do programa, retornando o valor nulo correspondente ao tipo de dado
• Normalmente, encontramos nos métodos “getters”
Pessoa p1 = new Pessoa(); p1.setNome(“João da Silva”); System.out.println(p1.getNome()); // uso do return
• Implementação do método getNome()Public String getNome() {
return nome; }
Métodos que retornam valor• Podemos alterar o método exibeDados() da nossa classe Pessoa,
utilizando os métodos de retorno (getters):
public void exibeDados() {System.out.println(“Nome: “ + getNome());System.out.println(“Peso: “ + getPeso());System.out.println(“Altura: “ + getAltura());System.out.println(“Idade: “ + getIdade());
}
• Podemos utilizar o método de retorno na classe TestaPessoa, conforme exemplo a seguir:public class TestaPessoa{
public static void main(String args[]) {Pessoa p1 = new Pessoa(“João da Silva”, 1.80, 80.0, 30);System.out.println(“Nome da pessoa é: “ +
p1.getNome());}
}
Métodos que retornam valor• Exercício. Desenvolva o diagrama de classes (UML) e implemente
os métodos “getters”. Após isso, crie a classe teste e instancie objetos, bem como a visualização dos seus dados utilizando o System.out.println + getter.
• A classe em questão é o usuário do MSN, ou seja, temos um usuário (que é o e-mail) e sua senha. Após isso, identifique alguns atributos desta classe de forma a gerar os métodos “getters”.
Entrada de dados• Até o momento, apenas visualizamos a saída de dados e alteramos
os atributos de nossos objetos diretamente no código fonte• Então, vamos criar uma classe chamada TestaPessoa que
permiterá entrar com os dados via teclado e, após isso, criar o objeto com os dados digitados pelo teclado
• Nossa classe de leitura do teclado (Teclado.java) possui três métodos:• public int leInt()• public double leDouble()• public String leString()• Os métodos acima são VOID? Porque?
• Precisaremos instanciar a classe Teclado.java (será fornecida pelo professor). • Teclado t = new Teclado();
Entrada de dados• Exercício. Como ficaria nossa classe TestaPessoa solicitando os
dados: nome, altura, peso e idade?
Entrada de dados• Exercício. Altere a classe Pessoa e inclua dois métodos:
• private double calculaIMC()• public double getIMC()
• Detalhe: Solicite o nome, peso e altura para o cálculo. O cálculo do IMC é feito através do peso / (altura2)
Entrada de dados (com mensagem)• Aprendemos que a classe teclado possui três métodos para
leitura de tipos de diferentes (int, double e String)
• Contudo, nos exemplos anteriores, foi necessário colocar uma mensagem antes da solicitação do valor do atributo
• Podemos utilizar os seguintes métodos que possuem a mensagem ao ser solicitada a entrada do valor do atributo:• public int leInt(String msg);• public double leDouble(String msg);• public String leString(String msg);
Entrada de dados (com mensagem)• Exercício. Como ficaria a nossa classe TestaPessoa ao ser
calculado o IMC utilizando os métodos de entrada de dados com mensagem?
Entrada de dados (com mensagem)• Exercício. Como não utilizar as variáveis locais? Até mesmo o
objeto “p1” para o método exibeDados?
Explique os problemas futuros na implementação
Expressões Aritméticas• De forma indireta já estamos utilizando expressões aritméticas,
em qual momento?
Expressões Aritméticas• Tipos de dados
• Inteiros correspondem aos números NATURAIS• Números com casas decimais ou ponto flutuante correspondem aos
números REAIS
Expressões Aritméticas• Números Inteiros:
• Java interpreta um número escrito sem ponto decimal como int. Se o valor extrapolar os limites do tipo int, será tratado como inteiro muito grande e dará erro de compilação. Para armazenar um inteiro como long, devemos adicionar o sufixo L ou l ao número.
• Ex:• 1147465 é tratado como int, pois está na faixa do tipo int;• 1147465L é tratado como long, devido ao sufixo;• 3000000000 dá o erro de compilação integer number too
large.
Expressões Aritméticas• Exercício
• Complete as linhas seguintes:• -5 é tratado como _____________• -34567890987 é tratado como _____________________• -5L é do tipo _____________• "50" é do tipo ____________
Expressões Aritméticas• Números de ponto flutuante
• Em Java, número com ponto decimal é tratado como double.
• Caso o valor estiver numa faixa viável ao tipo float, podemos usar o sufixo F ou f para que ele seja tratado
• O sufixo D ou d também pode ser usado para informar ao compilador que desejamos tratá-lo como double.
• Ex:• 3.1415 é tratado como double;• 3.1415F é float;• 3.141524357576575789 é tratado como double;• 3.141592837646473637F será um float;• 4D será um double, que valerá 4.0;
Expressões Aritméticas• Exercício.
• Complete as seguintes linhas:• -1837469382988983909.7 é do tipo _________• -456.678787997907575796795797F é __________• 5F é __________• “5F” é do tipo _________
Expressões Aritméticas• O tipo primitivo char
• O tipo primitivo char corresponde a um único caractere (Unicode) escrito entre apóstrofos, que ocupa espaço de dois bytes no seu armazenamento.Ex: 'a', 'M', '+', '?‘
• Uma variável pode ser do tipo char.• Ex: char c = 'C';
• Caracteres de escape• Representam caracteres especiais que podem ser
atribuídos às variáveis do tipo char e String, ou podem fazer parte de um string.
Expressões Aritméticas• Caracteres de escape
Expressões Aritméticas• Classe que demonstra o limite de cada tipo
de dado• public class testaTipoDado {
public static void main(String[] args) { System.out.println("Tipos de dados em Java: \n" + "\nMenor Byte: " + Byte.MIN_VALUE + "\nMaior Byte: " + Byte.MAX_VALUE + "\nMenor Short Int: " + Short.MIN_VALUE + "\nMaior Short Int: " + Short.MAX_VALUE + "\nMenor Int: " + Integer.MIN_VALUE + "\nMaior Int: " + Integer.MAX_VALUE + "\nMenor Long: " + Long.MIN_VALUE + "\nMaior Long:" + Long.MAX_VALUE + "\nMenor Float: " + Float.MIN_VALUE + "\nMaior Float: " + Float.MAX_VALUE + "\nMenor Double: " + Double.MIN_VALUE + "\nMaior Double: " + Double.MAX_VALUE); }}
Expressões Aritméticas• Conversão entre tipos de dados• Conversão implícita
• É permitido converter qualquer tipo abaixo para um que esteja à sua esquerda, sem qualquer artifício, e sem perda de precisão:
• double <- float <- long <- int <- short <- byte
• Exemplo:long x = 12678;double dd = x; // dd ficará com 12678.0byte y = -2;short s = y; // s assumirá valor -2int i = y; // i ficará com -2
Expressões Aritméticas• Conversão explícita (Coerção ou cast).
• Usa-se um conversor (ou cast), que é a colocação do tipo de destino entre parênteses antes do valor a ser convertido
• Ex:double dd = 6.789;int ii = (int) dd; // ii guardará o valor 6, pois a conversão descarta a parte decimalshort s = (short) ii; //s guardará 6 – não houve perda nenhumabyte b = (byte) 6.7; //perde-se a parte decimalshort s = (short) 50000; // CUIDADO – como o tipo short não comporta 50000, será atribuído um valor aleatório a s – erro que não é acusado pelo sistema
Expressões Aritméticas• Operadores aritméticos básicos
• Na ordem decrescente de prioridade dentro de uma expressão aritmética:
• 1º. ) * (multiplicação) / (divisão) % (módulo, ou resto da divisão inteira)
• 2º. ) + (adição) - (subtração)
• Ex: x * y• 7 / n• m % n // resto da divisão inteira de m por n
Expressões Aritméticas• Regras importantes
• Geralmente, a operação resulta um tipo que é grande o suficiente para conter o resultado. Por exemplo, multiplicando um float por um int obtém-se um float.
• Ex: 4F * 2 resulta 8.0F
• O resultado da divisão de dois inteiros é sempre inteiro.• Ex: 7 / 2 resulta 3.
• A presença de um float ou double na expressão, causa um resultado float ou double.
• Ex: 7F / 2 resulta 3.5.
• Quando há mais de um operador, as regras de prioridades serão respeitadas.
• Ex: 4 + 7 / 2 resultará 7, pois a divisão é feita antes da adição.
• Subexpressões entre parênteses terão maior prioridade.• Ex: (4 + 7) / 2.0 resultará 5.5.
Expressões Aritméticas• Exercícios
• Indique o valor e o tipo do resultado de cada expressão abaixo:
• 5000000000L + 500 • 5F * 3.0 • (3 + 4) / (2 * 2) • 2 * (3.5 + (7 + 2) * 3.0) / 2
• Indique que valor será gravado nas respectivas variáveis nas atribuições abaixo, ou informe se é operação inválida e porquê.
• double x = 3 * 5; • int i = 5 / 2f; • int i = i + 1;
Expressões Aritméticas• Operadores de atribuição
• Pode-se combinar uma operação com uma atribuição. Por exemplo, a atribuição n=n+2; pode ser escrita como n+=2;
• Os diversos operadores de atribuição de Java são mostrados na tabela seguinte:
Expressões Aritméticas• Operadores de atribuição
• Exemplo:int k = 6; int s = 2;s += k; // mesmo que s = s + k; s = 8, k = 6s %= 5; // mesmo que s = s % 5; (resto da divisão de s por 5). s = 3
Expressões Aritméticas• Operadores de incremento e de decremento
• É muito comum nos programas incrementar 1 a uma variável, o que se pode fazer, como já foi visto, de duas maneiras. Por exemplo,
int m = 10;m = m + 1; // incrementa 1 a 10, resultando 11 em mm += 1; // m irá para 12
• Os operadores ++ e -- realizam a tarefa de incrementar ou decrementar 1.
• Ex:m++; // mesmo que m = m + 1;m--; // mesmo que m = m – 1;double d = 6.51;d++; // podem ser aplicados a campos de ponto flutuante
Expressões Aritméticas• Operadores de incremento e de decremento
• Os operadores de incremento e de decremento podem ser pós-fixados, quando vêm colocados após a variável, ou pré-fixados, quando vêm antes. Se pós-fixado, a variável é utilizada e depois é incrementada (ou decrementada). Se pré-fixado, a variável é incrementada (ou decrementada) e depois utilizada.
• Ex: o trechoint i = 5;System.out.println(++i + “ “ + i++ + “ “ + i);
QUAL A SAÍDA DA INSTRUÇÃO ACIMA?
Expressões Aritméticas• Exercício. Que valores serão exibidos pelo
trecho abaixo?int a = 15;int b = 4;int c = a++ + --b;System.out.println(a + “ “ + b + “ “ + c);
Expressões Aritméticas• A classe Math
• A classe java.lang.Math possui diversos métodos que implementam operações matemáticas úteis. Seu uso dispensa o comando import (veremos adiante) pois ela é carregada automaticamente.
• static double random( )• Retorna um double randômico no intervalo [0, 1.0).• Ex: double r = Math.random(); // grava em r um randômico• Ex: int i = 1 + (int) (Math.random() * 10) // grava em i um randômico
obtido no intervalo de 1 a 10.
• static double sqrt (double a)• Retorna um double que é a raiz quadrada positiva de a.• Ex: double y = 25;• System.out.println (Math.sqrt(y)); //Exibe 5.0
• static double pow (double b, double e)• Eleva a base b ao expoente e, retornado double.• Ex: double p = Math.pow(2, 3); // atribui 8.0 a p
Expressões Aritméticas• Exercício. Escrever em Java a fórmula de
Bhaskara
Expressões Aritméticas• Exercício. Crie uma classe Circulo e os métodos
calculaArea e calculaPerimetro da classe Circulo. Eles devem devolver os valores calculados. Crie uma classe TestaCirculo para criar um objeto círculo e imprimir sua área e seu perímetro.
• Área do círculo: Pi x r2
• Perímetro: 2 * Pi x r• Para o valor do Pi, utilize Math.PI
Métodos• Referências bibliográficas
• http://inf.unisinos.br/~anibal• http://www.google.com.br