Ficha teorica aula_input_reader

6

Click here to load reader

Transcript of Ficha teorica aula_input_reader

Page 1: Ficha teorica aula_input_reader

Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições

1

1. Introdução Até agora temos introduzido directamente os dados directamente no código. Para aprendizagem de manipulação de dados faz sentido, mais é a forma mais “matreca” de fazer leitura de dados. Tipicamente a leitura pode ser feita de um ficheiro, de uma base de dados ou ainda do teclado. Para que os programas tenham utilidade e versatilidade é necessário que o utilizador possa fornecer dados e que o programa possa manipular esses dados introduzidos. Já vimos que temos as seguintes opções para imprimir na tela: System.out.println() e System.out.print(). Sendo que a unica diferenca entre os statements esta no facto de no primeiro caso o curso desce uma linha e segundo mantém na mesma linha. E até agora já vimos os seguintes tipos de statements :

1. Output 2. Matemática

Agora, vamos ver mais dois:

1. Input; 2. Condição

2. Entrada de Dados Até agora somente escrevemos programas que fazem output (saída de dados), concretamente na forma de texto escrito na consola, através de chamar o método System.out.println. Mas qualquer programa sério precisa também de receber input (entrada de dados) de uma variedade de fontes: a consola, um ficheiro, base de dados ou uma conexão da rede etc. Infelizmente, receber input é algo que é meio complicado para um novato em Java, por isso aproveitaremos de uma classe “ajudante” para facilitar as novas vidas. Trata-se da classe InputReader, que, conforme o nome indica, “facilita a leitura” de dados. Para aprender o uso desta classe, naturalmente começamos com o Javadoc dele, que o professor vai disponibilizar. Vamos aprender a usar a classe durante as aulas práticas, mais por enquanto note os seguintes pontos:

1. O bytecode tem que estar na mesma pasta que contém as mesmas classes que o aluno estiver a programar de modo que esta classe esteja disponível para uso no código.

2. Não pode ser instanciada, ou seja não se cria um objecto desta classe simplesmente invocamos o método usando directamente a classe tal como na classe Math. //Lê do teclado um caracterer

char letra = InputReader.readChar();

3. Note bem que este método pode travar a execução do programa. Ou seja, ele esperará,

com a paciência infinita do computador, até que o utilizador digite algo e bata na tecla “ENTER”. Se o utilizador não fazer isto, o programa ficará parado nesta linha durante milhões de anos.

Page 2: Ficha teorica aula_input_reader

Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições

2

Veja então um exemplo concreto: Exemplo 1 Escreva um programa em Java que recebe o nome e idade lidos do teclado e imprime os na consola.

public class EntradaDeDados {

public static void main(String[] args){

//Coloco uma mensagem bonita para comunicação com o utilizador

System.out.print("Escreva o seu primeiro nome: ");

String nome = InputReader.readString();

System.out.print("Escreva a sua idade: ");

int idade = InputReader.readInt();

//Imprime na consola o que foi introduzido

System.out.println("O seu nome é "+nome+" e voce tem "+idade+"

anos");

}

}

3. Blocos e Escopo

Um bloco em Java é qualquer conjunto de linhas que são embrulhadas por chavetas { }. Já vimos um uso de blocos – o corpo do método main() é sempre formado por um único bloco – mas durante a cadeira encontraremos muitos outros usos. Todos os blocos compartilham uma característica extremamente importante – eles restringem o escopo de variáveis declarado por dentro deles. Escopo é o “universo visível” para uma variável. É um pouco parecido com a situação de identificar uma pessoa dentro de diferentes contextos sociais. Por exemplo, imagine que você tem um irmão chamado José, e também um colega com o mesmo nome. Agora dentro da tua família, se alguém falar de “José”, será óbvio a quem está a referir. Mas quando estas na faculdade, não será tão fácil! Provavelmente, você usará teu julgamento para perceber de qual José estão a falar. Mas finalmente, imagine que um “Madjonedjone” encontra te na estrada e fala “Heyta, ma brother, quero falar com Zé”. Pode ser qualquer um dos milhares dos Josés na cidade de Maputo com quem ele precisa de “bater o papo”. Então em Java, temos algo parecido. A regra que já aprendemos que proíbe declarar duas variáveis com o mesmo nome de facto não é a história inteira! Na realidade, quando uma variável é definido dentro de um bloco, e a outra não, é possível. Isto é por causa de uma outra regra: Uma variável definida dentro de um bloco não é visível fora deste bloco. Quando o bloco em questão é o corpo de um método, esta variável é chamado uma variável local.

Page 3: Ficha teorica aula_input_reader

Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições

3

Voltamos atacar este assunto de visibilidade de variáveis quando estivermos a ver os métodos. 4. Condição Um aspecto fundamental da programação é executar um ou mais statements mediante uma condição. Para fazer isto em Java existe várias soluções sendo a mais simples dela o if. Basicamente o if funciona de uma maneira muito simples:

if(condição)

{

bloco

}

Ou seja:

Se uma dada condição for verdadeira, executa o bloco delimitado pelas chavetas a seguir. Caso contrário, salta para o primeiro statement após o bloco.

Veja o exemplo abaixo: Escreva um programa em Java que pega o nome do filme, a idade do comprador, preço inicial do filme e imprime o preço baseado na idade do comprador. Se a idade estiver abaixo de 12 desconto 15%. public class Filmes {

/**

* @param args

*/

public static void main(String[] args) {

//1. Obter o nome do filme, preço normal e a idade de comprador

System.out.print("Introduza o titlo do filme:");

String nomeDoFilme = InputReader.readString();

System.out.print("Introduza a idade do comprador:");

int idadeDoComprador = InputReader.readInt();

System.out.print("Introduza o preço inicial do filme:");

double precoDoFilme = InputReader.readDouble();

if(idadeDoComprador < 12)

{

//2.calcula o preço do filme

System.out.println("Aplicando descconto de 15%");

precoDoFilme = precoDoFilme * 0.85;

}

//3. Imprima na consola o preço final do filme

System.out.println("O filme "+nomeDoFilme+" custa apenas

"+precoDoFilme+" MT");

}

}

Nas secções a seguir, veremos todos os detalhes de como preparar a parte mais importante desta estrutura, a condição.

Page 4: Ficha teorica aula_input_reader

Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições

4

5. Criando Condições Com Operadores E Expressões booleanos

Uma condição é nada mais de uma expressão que devolve um valor booleano. Ou seja, somente pode ser verdadeira ou falsa – ou em Java, true ou false. Para criar uma tal expressão, basta usar um dos seis operadores de comparação(VEJA NA FICHA TEORICA 4 os operadores lógicos e de comparação) Veja o exemplo abaixo: int a = 3, b = 5;

if(a != b) //correcto - ambos operandos são int

{

System.out.println("a é diferente de b");

}

if(a > 4.0) //correcto - ambos operandos são numéricos

{

System.out.println("a é maior de 4");

}

if(b < "8") //ERRADO - um operador é numérico mas o outro é String

{

System.out.println("b é menor de 8");

}

6. Guardando O Resultado De Expressões boolean Em Variáveis Tal como o resultado de qualquer outro cálculo, é possível guardar o valor de uma expressão booleana para reutiliza-lo mas tarde no programa. Tem que se definir uma variável do tipo boolean. Esta variável somente pode conter true ou false. Veja o exemplo abaixo: int idade = 11;

boolean podeVerFilme = idade > 17;

if(!podeVerFilme)

{

System.out.println("Es jóvem demais - vai lá tomar sorvete!");

}

Page 5: Ficha teorica aula_input_reader

Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições

5

7. O Escopo De Um Bloco if

Tal como aprendemos na aula passada, uma variável declarada dentro de um bloco não é visível fora do bloco. Esta regra aplica igualmente também ao bloco que segue a uma condição if. Veja o exemplo abaixo: int idade = 11;

boolean podeVerFilme = idade > 17;

if(!podeVerFilme)

{

//na linha abaixo, a variável idade é perfeitamente visível

String mensagem = "Tens " + idade + " anos. Es jovem - vai tomar sorvete!";

}

System.out.println(mensagem); //ERRO: aqui a variável mensagem é invisível

8 . Desafios Desafio 1 Escreva um programa em Java que lê um numero inteiro do teclado e imprime o a raiz cúbica deste numero se o mesmo for par. Desafio 2 Escreva um programa em Java que lê dois números reais do teclado e imprime na tela somente o Maior numero entre os dois.

Page 6: Ficha teorica aula_input_reader

Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições

6

Glossário

bloco: um secção de código, consistindo em um ou mais statements, isolado do resto por chavetas – { no inicio e } no fim. escopo: o “universo de visibilidade” ou “alcance” de uma certa variável. Tipicamente, o escopo de um statement é definido pelo bloco em que ela está definida. fluxo de controle: a sequência de execução dos statements num programa – tipicamente, esta não corresponde à simples ordem em que o statements aparecem no código do programa. variável local: uma variável definido dentro do corpo de um método, que não é visível fora do escopo daquele bloco, e “morre” uma vez que o método termina execução. boolean: um tipo para variáveis e expressões que somente pode conter o valor true ou o valor false condição: uma expressão que produz um valor do tipo boolean

if: uma palavra-chave de controle do fluxo, que testa uma certa condição, e se for verdade, executa o bloco imediatemente a seguir input/output: os termos em inglês (e programação) para entrada/saída de dados – as vezes abreviadas simplesmente: I/O.