O documento discute programação Java, introduzindo conceitos como entrada de dados do usuário, blocos e escopo de variáveis, e condições. Ele fornece exemplos de como ler dados do teclado, explica como blocos restringem o escopo de variáveis, e demonstra o uso de estruturas condicionais como "if" para executar código com base em expressões booleanas.
1. Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições
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.
1
2. Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições
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.
2
3. Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições
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.
3
4. Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições
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!");
}
4
5. Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições
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.
5
6. Programação I – Java: Inteiração com Utilizador, Blocos e Escopos e Condições
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.
6