Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização...

34
Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Prof. Gilberto Irajá Müller Última atualização 11/3/2009

Transcript of Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização...

Page 1: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Programação IAula 3

(Entrada de Dados)

Prof. Gilberto Irajá MüllerProf. Gilberto Irajá Müller

Última atualização 11/3/2009

Page 2: Programação I Aula 3 (Entrada de Dados) Prof. 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

Page 3: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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; }

Page 4: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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());}

}

Page 5: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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”.

Page 6: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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();

Page 7: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Entrada de dados• Exercício. Como ficaria nossa classe TestaPessoa solicitando os

dados: nome, altura, peso e idade?

Page 8: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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)

Page 9: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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);

Page 10: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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?

Page 11: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 12: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Expressões Aritméticas• De forma indireta já estamos utilizando expressões aritméticas,

em qual momento?

Page 13: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 14: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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.

Page 15: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Expressões Aritméticas• Exercício

• Complete as linhas seguintes:• -5 é tratado como _____________• -34567890987 é tratado como _____________________• -5L é do tipo _____________• "50" é do tipo ____________

Page 16: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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;

Page 17: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Expressões Aritméticas• Exercício.

• Complete as seguintes linhas:• -1837469382988983909.7 é do tipo _________• -456.678787997907575796795797F é __________• 5F é __________• “5F” é do tipo _________

Page 18: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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.

Page 19: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Expressões Aritméticas• Caracteres de escape

Page 20: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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); }}

Page 21: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 22: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 23: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 24: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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.

Page 25: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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;

Page 26: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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:

Page 27: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 28: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 29: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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?

Page 30: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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);

Page 31: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 32: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Expressões Aritméticas• Exercício. Escrever em Java a fórmula de

Bhaskara

Page 33: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

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

Page 34: Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.

Métodos• Referências bibliográficas

• http://inf.unisinos.br/~anibal• http://www.google.com.br