View
136
Download
0
Category
Preview:
Citation preview
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.
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.
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.
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!");
}
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.
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.
Recommended