controlo de fluxo em java
DESCRIPTION
Este capitulo mostra como podemos controlar a execução do fluxo das instruções recorrendo às instruções SELECTIVAS e CLICLICASTRANSCRIPT
-
LTP-I 16/03/15 - 17/04/15
1
dr. Amrico I. Langa
3. CONTROLO DE FLUXO
A execuo de um programa feita scannando instrues carcter a carcter de
esquerda para direita e de cima para baixa. Porm em muitas situaes depara-se com
situaes em que para se atingir os objectivos do problema em causa o programa deve
desobedecer este princpio.
Para que realmente se contorne princpio podemos obrigar que as instrues do programa
seja executados de forma condicional ou seja repetidas varias vezes, estes mecanismos so
conseguidos com recurso s instrues selectivas ou ciclos.
3.1. INSTRUES SELECTIVAS
O Java contm trs tipos de instrues de seleco, que so as seguintes:
Instruo de uma nica seleco (if) Realiza uma aco, ou mais, se uma
condio for verdadeira ou salta a aco se a condio for falsa;
Instruo de seleco dupla (if else ) Realiza uma aco se uma condio for
verdadeira e realiza uma aco diferente se a condio for falsa, mas nunca as duas
durante a mesma execuo;
Instruo de seleco mltipla (switch case ) Realiza uma de muitas aces
diferentes, dependendo do valor de uma expresso.
3.1.1. Instruo if ou seleco simples
A seleco simples permite decidir entre executar ou no um conjunto de instrues. A
deciso tomada em funo do resultado de uma condio, ou seja, uma expresso com
resultado lgico, que calculada no inicio da execuo da estrutura. As estrues so
executadas se o resultado da condio for verdadeiro e no executadas se for falsa.
?
Instrues
F
V
-
LTP-I 16/03/15 - 17/04/15
2
dr. Amrico I. Langa
A sua sintaxe no Java a seguinte:
if () {
;
}
NB: O uso dos parnteses obrigatrio se o cdigo consiste em mais de uma instruo;
Ex:
public class Par{ public static void main(String arsgs[]){ int b; String y; y=JOptionPane.showInputDialog("nter valor de y"); b=Integer.parseInt(y); if(b%2==0){ System.out.println(b+ nmero Par); } } }
.1.2. INSTRUO: if else ou seleco em alternativa
Muitas vezes interessa escolher de entre dois conjuntos de instrues qual deles deve ser
executado, esta escolha tambm ser feita em funo do resultado de uma condio.
?
Instrues - 1
FV
Instrues - 2
A sua sintaxe no Java a seguinte:
if () { //o uso do parnteses obrigatrio cdigo A e/ou
cdigo B consiste mais de una ;
} else {
;
}
Ex:
public class ParImpar{ public static void main(String arsgs[]){
-
LTP-I 16/03/15 - 17/04/15
3
dr. Amrico I. Langa
int b; String y; y=JOptionPane.showInputDialog("nter valor de y"); b=Integer.parseInt(y); if(b%2==0){ System.out.println(b+ nmero Par); }else{ System.out.println(b+ nmero Impar); } } }
3.1.3. INSTRUO: switch case ou seleco mltipla.
A instrues if-else permite seleccionar uma de varias hipteses como se viu nos
pargrafos anteriores, no entanto, se a escolha for feita em funo do valor de uma
expresso inteira ou carcter mais eficaz uma estrutura de seleco mltipla para o
mesmo efeito. A dinmica desta estrutura pode ser representada do fluxgrama.
e
Instrues - 1
V1
Instrues - 2
...
Instrues - n
V
Instrues - d
V2 Vn Vd
A estrutura switch verifica uma varivel e age de acordo com seus casem. Os cases so as
possibilidades de resultados que so obtidos por switch. Basicamente, o switch serve para
controlar vrias aces diferentes de acordo com o case definido dentro dele.
Sintaxe:
switch (|< expresso>)
{
case : [break];
case :< cdigo 2>[break];
...
case : [break];
default: cdigo default; //cdigo a ser executado caso nenhuma das opes seja atendida
}
-
LTP-I 16/03/15 - 17/04/15
4
dr. Amrico I. Langa
Ento, detalhadamente, switch recebe uma varivel e abre um bloco de dados ( { } ),
dentro desse bloco de dados h os cases. Cada case recebe um valor nico, ou seja, que
no pode ser repetido no mesmo bloco de dados. Ento, marcamos cada case com dois
pontos ( : ). Aps os dois pontos colocamos todo cdigo que dever ser executado que
pode conter quantas linhas de instrues que responde as necessidades.
um bom costume sempre terminar um cdigo aps o case com um comando break,
assim, evitamos que o resto do cdigo seja executado por acidente. case no gera
resultados booleanos, portanto, no h a possibilidade de fazer comparaes (Ex. Isso
est totalmente errado case var1 > var2:).
Default
Como switch pode receber vrias possibilidades, pode ocorrer situaes de algum caso
estar fora do alcance ou no estar definido, o default tem o papel de cobrir as situaes.
Default pega qualquer resultado que no esteja definido no case, ou seja, ele o bloco de
cdigo padro que deve ser executado quando nenhum case for satisfeito. Podemos
coloca-lo onde quisermos dentro de switch , mas, geralmente, o colocamos no final.
NB: A varivel fornecida instruo switch deve ser do tipo byte, short, char, ou int.
Ela no pode ser long, float, double, boolean ou referncia a objectos.
Exemplo:
Import javax.swing.*; public class ExemploSwitch { public static void main(String args[]) { int diaDaSemana = 1; String y=JOptionPane.showInputDialog("nter valor de y"); diaDaSemana =Integer.parseInt(y); switch (diaDaSemana) { case 1: System.out.println("Domingo"); break; case 2: System.out.println("Segunda-feira"); break; case 3: System.out.println("Tera-feira"); break; case 4: System.out.println("Quarta-feira"); break; case 5: System.out.println("Quinta-feira"); break; case 6: System.out.println("Sexta-feira"); break;
-
LTP-I 16/03/15 - 17/04/15
5
dr. Amrico I. Langa
case 7: System.out.println("Sbado"); break; default: System.out.println("Este no um dia vlido!"); } } } import javax.swing.JOptionPane; public class SwitchDemo2 { public static void main(String[] args) { int month = 2; int year = 2000; int numDays = 0; String x=JOptionPane.showInputDialog("Enter valor de ano "); String y=JOptionPane.showInputDialog("nter valor de mes"); year=Integer.parseInt(x); month=Integer.parseInt(y); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) ) numDays = 29; else numDays = 28; break; default: System.out.println("Invalid month."); break; } System.out.println(" O ms de " +month+" do ano "+year+" tem "+ numDays+ " dias");
-
LTP-I 16/03/15 - 17/04/15
6
dr. Amrico I. Langa
} }
Como escolher a instruo de seleco adequada?
Foi referida em 3.1.3., que em seleco com instruo switch-case verificado se o
resultado da expresso igual a um dos valores indicadas na prpria instruo, e que a
expresso deve ter um resultado inteiro ou carcter. Pelo contrrio a instruo if/if-else
pode ser utilizada com valores de outros tipos, permitindo ainda a utilizao de outras
formas de comparao, tal como maior, menor e utilizao de operadores lgicos.
Objectivos:
O aluno deve ser capaz de resolver diferentes problemas com recurso as instrues
selectivas;
LISTA DE EXERCICIOS A SEREM DISCUTIDOS E RESOLVIDOS ESTO NUMA FICHA
AUXELIAR
-
LTP-I 16/03/15 - 17/04/15
7
dr. Amrico I. Langa
3.2. CICLOS
O conceito ciclo ou repetio fundamental em programao, pois para a resoluo de
muitas tarefas comuns implica a utilizao de estruturas repetitivas, ora vejamos, se
pretendssemos registo de acadmico minimamente seria necessrio ler dados de
estudante, que podem consistir em nome, nmero de estudante, afiliao, endereo. Para o
efeito necessrio o nmero de instrues de leitura de dados correspondente ao nmero
de campos de estudante. Supondo que o numero de campo de estudante seja 5 e instituio
tivesse 50 estudantes seriam necessrios 250 instrues de leitura de dados. A maneira
mais eficaz de resolver esta situao passa por utilizar uma estrutura que se encarrega de
repetir as instrues que permitem a entrada de dados de um estudante, tantas vezes
quantas os estudantes envolvidos. Estas estruturas so designadas estruturas repetitivas ou
ciclos;
Neste capitulo abordaremos trs instrues repetitivas, que so while, do-while e for.
3.2.1. Ciclo while
Uma das formas mais comuns de repetio aquela que permite repetir um conjunto de
uma ou mais instrues enquanto uma condio mantiver o valor lgico verdadeiro. Este
comportamento pode ser representado da seguinte maneira.
?
Instrues
F
V
No ciclo while o primeiro passo o clculo da condio, se o resultado for verdadeiro, as
instrues so executadas, depois um novo clculo da condio feita, se o resultado for
verdadeiro, instrues so executadas, este processo iterativo continuar enquanto o
resultado da condio calculada for verdadeiro. Quando o resultado da condio for falso o
ciclo terminar, prosseguindo a execuo normal do programa.
-
LTP-I 16/03/15 - 17/04/15
8
dr. Amrico I. Langa
Sintaxe do while:
while(){ }
O problema com estruturas de repetio, principalmente com while, o que chamamos de
looping infinito. Damos esse nome ao fato de que o programa fica repetindo a mesma
sequncia de cdigos esperando por um resultado que nunca ir acontecer.
Portanto, imprescindvel que uma determinada varivel seja modificada de acordo com
cada loop, por forma a garantir o termino do ciclo. Veja o exemplo
public class ExemploWhile { public static void main(String args[]) { int contador = 0; while (contador < 50) { System.out.println("Repetio nr: " + contador); contador++; } } }
Como podemos ver, existe a varivel contador que iniciada com valor 0, a cada loop
executado (repetio) somado 1 (uma unidade) ao contador. Perceba que o while ir
manter a repetio enquanto a varivel contador for menor que 50.
Outro ponto importante que a varivel contador inicializada antes de chegar ao while,
porque o while ir comparar a sentena e s depois permitir a execuo do bloco.
Se quisermos fazer todo o bloco primeiro e s depois fazer a comparao, devemos utilizar
o comando DO WHILE
3.2.2. Ciclo do-while
Uma segunda forma de repetio permite repetir um conjunto de instrues enquanto uma
condio mantiver o valor verdadeiro. Trata-se de uma forma de repetio semelhante
while mas que se difere na forma de repetio, enquanto no while o valor da condio
calculado e verificado s depois que so executadas as instrues se a condio for
verdadeira, no do-while as instrues so executadas e s depois que a condio
-
LTP-I 16/03/15 - 17/04/15
9
dr. Amrico I. Langa
calculada. Assim em do-while as instrues so executadas pelo menos uma vez, pois o
teste da condio s feito depois da primeira execuo das instrues.
F
Instrues
?V
Como se pode ver na figura acima uma instruo executada, em seguida a condio
verificada, se a condio for verdadeira de novo instrues so executadas, depois
condio calculada, este processo iterativo continua at que a condio seja falsa.
Sintaxe do ciclo do-while:
do { } while()
Neste caso, devemos ter as mesmas precaues quanto while, no que diz respeito a looping
infinito. Mas no necessrio inicializar a varivel antes do bloco de cdigo como
acontece com while, pois a comparao s ser feita aps todo o cdigo ter sido executado.
Exemplo: Fazer um programa que recebe o nome do funcionario e calcule o aumento
salarial. Deve garantir que o valario do salario no seja menor ou igual a zero.
import javax.swing.JOptionPane; public class AumentoSalarial{ public static void main(String[] args) { String funcionario=JOptionPane.showInputDialog("Nome do Funcionario"); double salInicial,salActual; do{ String sal=JOptionPane.showInputDialog("Valor do Salario"); salInicial=Double.parseDouble(sal); }while(salInicial
-
LTP-I 16/03/15 - 17/04/15
10
dr. Amrico I. Langa
3.2.3. Ciclo for
Uma terceira forma de repetio normalmente utilizada quando o nmero de vezes que o
ciclo deve ser repetido conhecido antes do inicio da sua execuo.
O funcionamento desta instruo controlado pela inicializao, pela condio e pela
aco, e que as trs componentes so separadas pelo ponto e vrgula.
A sintaxe do ciclo for:
For( ;< condio>; ){
}
Inicializao executada apenas una vez logo no inicio do ciclo. Serve
normalmente para inicializar a varivel que vai controlar o nmero de vezes que as
instrues vo ser repetidas;
Condio calculada antes de cada das instrues. Se o seu resultado for
verdadeiro, as instrues so executadas, se for falso, o ciclo termina;
Aco executada automaticamente em cada iterao aps as instrues do
ciclo. Normalmente serve para calcular o novo valor da varivel de controlo, que
usualmente um incremento ou decremento da varivel do controlo.
Exemplo: Para exerccio anterior pretende introduzir e calcular o salrio actual de
funcionrios para nmero de funcionrios conhecido pelo usurio.
inicializao
instrues
condio aco
V F
-
LTP-I 16/03/15 - 17/04/15
11
dr. Amrico I. Langa
import javax.swing.JOptionPane;
public class ExemploFor {
public static void main(String []args) {
String nF=JOptionPane.showInputDialog("Introduz Nmero de Funcionarios");
int nrFunc=Integer.parseInt(nF);
for (int i = 0; i