Escolar Documentos
Profissional Documentos
Cultura Documentos
condicional
Controlo de fluxo
LEB/LEF/MIEBIOM/MIEF
• Funções estão disponíveis como métodos de objetos.
Sistemas Informáticos
que é fornecido com a plataforma Java
• Exemplo: A classe Math que contém funções matemáticas
LEB/LEF/MIEBIOM/MIEF
• Para ler dados do teclado podemos usar um objeto de tipo Scanner.
Sistemas Informáticos
• Scanner sc = new Scanner(System.in);
LEB/LEF/MIEBIOM/MIEF
import java.util.Scanner; 1
Sistemas Informáticos
{
2 Scanner scan = new Scanner(System.in);
System.out.print("Enter your name: ");
LEB/LEF/MIEBIOM/MIEF
...
System.out.print("Enter your name: ");
String name = scan.nextLine();
System.out.println("Hello " + name);
Sistemas Informáticos
• Lê uma linha de texto do teclado
LEB/LEF/MIEBIOM/MIEF
• Para ler um número inteiro, podemos usar o método
nextInt(), disponibilizado pela classe Scanner:
Sistemas Informáticos
int num = scan.nextInt();
6
Ganhos com taxa de juro: V2
LEB/LEF/MIEBIOM/MIEF
import java.util.Scanner;
Sistemas Informáticos
Scanner scan = new Scanner(System.in);
System.out.print("Qual o saldo: ");
double saldo = scan.nextDouble();
System.out.print("Qual a taxa: ");
double taxa = scan.nextDouble();
saldo = saldo + (taxa * saldo);
System.out.println("Novo saldo = " + saldo);
}
7
}
Funções matemáticas
LEB/LEF/MIEBIOM/MIEF
• A classe Math permite realizar operações matemáticas comuns
• Não precisa ser importada, nem instanciada!
Sistemas Informáticos
• Para calcular potência: Math.pow(..,..)
• Exemplo: 5^3 ßà Math.pow(5,3)
LEB/LEF/MIEBIOM/MIEF
• A condição é uma expressão lógica.
if (condição)
• Se a avaliação da condição resulta em
{
instrução1; true as instruções são executadas.
instrução2; • Se resulta em false as instruções não
Sistemas Informáticos
... são executadas.
}
• Indentação não obrigatória.
LEB/LEF/MIEBIOM/MIEF
import java.util.Scanner;
Sistemas Informáticos
int idade;
System.out.print("Que idade tem? ");
idade = sc.nextInt();
sc.close();
}
} 10
Controlo de fluxo: if/else
LEB/LEF/MIEBIOM/MIEF
• Seleção em alternativa
• Sintaxe da instrução:
if (condição)
{
instrução1;
Sistemas Informáticos
if (condição)
...
instrução1;
}
else
else
instrução2;
{
instrução2;
...
}
LEB/LEF/MIEBIOM/MIEF
if (idade < 30)
{
System.out.println("Ainda é jovem!");
}
else
Sistemas Informáticos
{
System.out.println("Está velho!");
}
LEB/LEF/MIEBIOM/MIEF
• Escrever um programa para identificar um número como
par ou ímpar
Sistemas Informáticos
13
Exemplo: if/else
import java.util.Scanner;
LEB/LEF/MIEBIOM/MIEF
public class Test
{
public static void main (String args[])
{
Scanner sc = new Scanner(System.in);
int num;
Sistemas Informáticos
System.out.print("Qual o número ?");
num = sc.nextInt();
num = num % 2;
if (num == 0)
System.out.println ("Número é par");
else
System.out.println ("Número é ímpar");
sc.close();
}
}
14
Seleção de múltiplas alternativas:
àelse if
• Seleccionar uma das alternativas em função do valor de num
LEB/LEF/MIEBIOM/MIEF
• Se nenhuma se verificar deve executar a instrução4.
Sistemas Informáticos
if (num > 0 && num <= 10)
{
instrução1;
}
else if (num > 10 && num <= 20)
{
instrução2;
}
else if (num > 20 && num <= 30)
{
instrução3;
}
else
{ 15
instrução4;
}
Outras instruções condicionais para
controlo de fluxo
LEB/LEF/MIEBIOM/MIEF
• Java oferece mais instruções para seleção de alternativas:
• A instrução switch
• O if ternário
Sistemas Informáticos
• O código rapidamente se torna de difícil legibilidade
LEB/LEF/MIEBIOM/MIEF
• As aplicações tipicamente precisam de validar os dados que
vêm do utilizador
Sistemas Informáticos
• As Strings não são tipos primitivos (são objetos), por isso não
podemos utilizar os operadores tradicionais (>, <, ==, etc.)
LEB/LEF/MIEBIOM/MIEF
String str1 = "hello!";
String str2 = "hello!";
//Não usar!
if (str1 == str2)
Sistemas Informáticos
{
System.out.println(“As strings são iguais”);
}
LEB/LEF/MIEBIOM/MIEF
• Considere que quer escrever uma aplicação que
aceita uma String e um número inseridos pelo
utilizador
Sistemas Informáticos
• Para que a aplicação funcione correctamente, a
String inserida apenas pode ser “Benfica” ou
“Sporting” e o número inserido apenas pode ser ‘1’
ou ‘2’.
LEB/LEF/MIEBIOM/MIEF
import java.util.Scanner;
Sistemas Informáticos
{
Scanner sc = new Scanner(System.in);
String equipa;
int posicao;
boolean val1 = false;
boolean val2 = false;
continua
Validação de dados: Exemplo (2/2)
equipa = sc.nextLine();
if (equipa.equals("benfica") || equipa.equals(”sporting"))
{
LEB/LEF/MIEBIOM/MIEF
val1 = true; O que acontece se o utilizador
}
introduzir uma String (ex: abc)?
posicao = sc.nextInt();
if (posicao == 1 || posicao == 2)
{
val2 = true;
Sistemas Informáticos
}
LEB/LEF/MIEBIOM/MIEF
val1 = true; O que acontece se o utilizador
}
introduzir uma String (ex: abc)?
posicao = sc.nextInt();
if (posicao == 1 || posicao == 2)
Exception in thread "main" java.util.InputMismatchException
{
at java.util.Scanner.throwFor(Scanner.java:840)
val2 = true;
Sistemas Informáticos
at java.util.Scanner.next(Scanner.java:1461)
}
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
if (val1 == true && val2 == true) // igual a fazer if
at aula2.ValidacaoDeDados.main(ValidacaoDeDados.java:25)
// (val1 && val2)
{
System.out.println("Dados válidos!");
}
else
{
System.out.println("Dados inválidos"); 22
}
O que falta validar neste exemplo?
Exceções (Erros)
LEB/LEF/MIEBIOM/MIEF
• De um modo simples, são erros que impedem o programa de
continuar (se não forem tratados)
Tipo de erro
Sistemas Informáticos
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at aula2.ValidacaoDeDados.main(ValidacaoDeDados.java:25)
23
Nome do ficheiro e linha de
código onde ocorreu o erro
Validação de tipos de dados
• Podemos usar métodos da classe Scanner para verificar se os dados
são do tipo esperado pela aplicação:
1) Criar um objecto: Scanner sc = new Scanner(System.in);
LEB/LEF/MIEBIOM/MIEF
2) Usar um dos métodos hasNextType() da classe Scanner para
aguardar que um determinado tipo (inteiro, Booleano, etc.) seja
inserido pelo utilizador. Exemplos:
• sc.hasNextInt() ß Validação de inteiros
Sistemas Informáticos
• sc.hasNextBoolean(); ß Validação de booleanos
• ...
• Inicialmente, estes métodos bloqueiam até que o utilizador insira algum
valor. Devolvem true se o tipo de dados for o esperado e false nos
restantes casos.
• Atenção, não servem para ler os dados, apenas para aguardar pela sua
introdução e verificar o seu tipo
24
3) Fazer a leitura como habitualmente
Classe Scanner: hasNextInt() Vs nextInt()
• hasNextInt()
• Se o scanner estiver vazio aguarda que o utilizador insira algo e verifica se
LEB/LEF/MIEBIOM/MIEF
consegue interpretar os dados como um inteiro. Os dados ficam
guardados na memória do Scanner
• Se o Scanner tiver dados na sua ‘memória’ este método não espera por
dados do utilizador! Apenas verifica se os dados que já existem
representam um inteiro ou não devolvendo o resultado dessa verificação
• Devolve true (quando os dados representam um inteiro) ou false (nos
Sistemas Informáticos
restantes casos)
• nextInt()
• Se o scanner estiver vazio aguarda que o utilizador insira algo e tenta
converter essa informação num inteiro que é devolvida pelo método
• Se o Scanner tiver dados na sua ‘memória’ este método não pede
informação ao utilizador! Apenas tenta converter esses dados num inteiro
e devolve o resultado
• Devolve o inteiro (quando os dados representam um inteiro) ou lança uma 25
excepção (nos restantes casos)
Exemplo: validação de tipo
import java.util.Scanner;
LEB/LEF/MIEBIOM/MIEF
public static void main(String[] args)
{
Scanner sc= new Scanner(System.in);
int num;
Sistemas Informáticos
if(sc.hasNextInt())
{
num = sc.nextInt();
System.out.println("Inteiro: " + num);
}
else
{
System.out.println("Não introduziu um inteiro");
}
sc.nextLine(); //Limpa o que houver no Scanner 26
}
}
Exemplo: validação de tipo
import java.util.Scanner;
LEB/LEF/MIEBIOM/MIEF
public class ValidacaoInteiro {
public static void main(String[] args)
{
Scanner sc= new Scanner(System.in);
int num;
Bloqueia
System.out.println("Insira um até que o inteiro!");
número utilizador insira
Sistemas Informáticos
dados. Os dados ficam guardados
if(sc.hasNextInt()) na ‘memória’ do scanner
{
num = sc.nextInt(); Move o inteiro da ‘memória’ do
scanner "para
System.out.println("Inteiro: uma variável
+ num);
}
else
{
System.out.println("Não introduziu um inteiro");
} 27
sc.nextLine(); Descarta a informação (\n) da
} ‘memória’ do scanner
}
Leitura de tipos básicos
• O métodos de leitura de tipos primitivos (ex: nextInt,
LEB/LEF/MIEBIOM/MIEF
nextBoolean) não consomem os caracteres de terminação de
linha (ex: \n) introduzidos com o pressionar da tecla Enter
Sistemas Informáticos
sc.hasNextInt()
123\n
LEB/LEF/MIEBIOM/MIEF
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
String equipa;
int posicao;
boolean val1 = false;
boolean val2 = false;
Sistemas Informáticos
System.out.println("Introduza um número:");
posicao = sc.nextInt();
if (posicao == 1 || posicao == 2)
{
val2 = true;
} O que acontece se a linha permanecer comentada?
//sc.nextLine();
System.out.println("Introduza uma equipa (benfica " + "ou sporting)");
equipa = sc.nextLine();
System.out.println("A equipa selecionada é: "+equipa);
sc.close();
}
} 29
Verificação de tipos: Strings
LEB/LEF/MIEBIOM/MIEF
• Quando estamos a ler do teclado, não precisamos de verificar
se o tipo introduzido é uma String (com o método
hasNextLine())
Sistemas Informáticos
String
LEB/LEF/MIEBIOM/MIEF
• Utilização básica da classe Scanner
• www.java-made-easy.com/java-scanner.html
• Utilização da classe Scanner e instruções if
• www.java-made-easy.com/if-statement.html
Sistemas Informáticos
31