Baixe o app para aproveitar ainda mais
Prévia do material em texto
ESTRUTURAS DE CONTROLE E REPETIÇÃO Thaís Alves Burity Rocha Agenda Desvios Condicionais Laços de repetição Desvios incondicionais Escopo de Variáveis Introdução Os programas são executados de forma sequencial Estruturas de controle permitem que o programador mude o fluxo de execução do programa Antigamente se usava goto (mas não é indicado) Em Java, é apenas palavra reservada Estruturas de Controle em Java Desvios condicionais if-else switch Operador condicional ? Laços de repetição while do-while for Desvios incondicionais continue break Desvio Condicional: if-else if(expressão booleana){ comando1; } if (expressão booleana){ comando1; } else { comando2; comando3; } Não é possível utilizar o comando else sozinho O corpo dos comandos if e else é limitado por ‘{‘ e ‘}’ É possível omitir, desde que só contenha um comando A condição sempre é limitada por ‘(‘ e ‘)’ Desvio Condicional: if-else Calculadora calculadora = new Calculadora(); double va1=3.5, va2=7.3, va3=9.5; double media = calculadora.calcularMedia(va1,va2,va3); String resultado = “”; if ( media < 5 ){ resultado = “Reprovado”; } else { resultado = “Aprovado”; } Desvio Condicional: if-else if ( media < 5 ) resultado = “Reprovado”; else resultado = “Aprovado”; if ( media < 5 ) resultado = “Reprovado”; System.out.println(resultado); else resultado = “Aprovado”; Não recomendado Desvio Condicional: if-else int x=2, y=0, z=0, a=0; if ( x > 3 ) y = 2; z+= 8; a = y+x; É uma má prática de programação usar if-else sem chaves! int x = 1; if (x == 3){ //faz nada } else if(x>4) { System.out.println(“>4”); } else if(x<2) { System.out.println(“<2”); } else { System.out.println(“else”); } É possível encadear comandos if-else, mas não é adequado que seja algo muito extenso! Desvio Condicional: if-else É possível aninhar comandos if-else Cuidado para não comprometer a legibilidade do código if ( media < 5 ){ resultado = “Reprovado”; } else { resultado = “Aprovado”; if( media >= 7){ resultado += “ por média”; } } Desvio Condicional: switch switch(<expressão>) { case <expressão constante 1>: // Bloco de código 1 break; case <expressão constante 2>: // Bloco de código 2 break; case <expressão constante 3>: // Bloco de código 3 break; default: // Bloco de código } Executado somente quando todos os outros cases falham Tipo deve ser byte, char, short, int ou String (a partir de Java 7) Desvio Condicional: switch int x = 3; switch(x) { case 1: System.out.println(“x vale 1”); break; case 2: System.out.println(“x vale 2”); break; case 3: System.out.println(“x vale 3”); break; default: System.out.println(“Não sei quanto vale x”); } Desvio Condicional: switch O valor da expressão em cada case deve ser único É possível delimitar o corpo de cada case com chaves A cláusula default não precisa vir por último, mas essa é a forma mais convencional de usar Uso de break é opcional É executado tudo a partir do case válido ou default (caso nenhum case seja válido) até a condição de parada Desvio Condicional: switch Dentro das cláusulas case é possível ter outros blocos switch, if-else, laços de repetição, etc… switch não substitui totalmente o uso de if-else encadeado switch só verifica igualdade Com if-else é possível utilizar outros operadores de comparação Desvio Condicional: switch int x = 3; int k = 3; switch(x) { case 1: System.out.println(“x vale 1”); break; case 2: System.out.println(“x vale 2”); break; case k: System.out.println(“x vale ”+k); break; default: System.out.println(“Não sei quanto vale x”); } O valor do case tem que ser constante Operador Condicional No geral, pouco usado por comprometer a legibilidade do código <condição> ? <valor se true> : <valor se false>; int x = 5, y; y = (x>3) ? x*2 : x*4; Uso de ( ) é opcional Laço de Repetição: while while (<expressão booleana>){ //comandos } while ( true ){ //fazer alguma coisa } int contador = 0; while (contador < 10) { System.out.println(contador); contador = contador + 1; } Teste é feito no início Loop infinito Se não usar chaves, só executará um comando Laço de Repetição: do-while do{ //comandos }while (<expressão booleana>); int contador = 0; do{ System.out.println(contador); contador = contador + 1; }while (contador < 10); Teste é feito no final, o que significa que o loop executará pelo menos 1 vez Se não usar chaves, só executará um comando for(<inicialização> ; <condição> ; <incremento>){ //comandos } Laço de Repetição: for Se a condição for false, o laço é “quebrado” É executado depois de comandos Pode ser declaração e inicialização ou somente inicialização Laço de Repetição: for for(int contador = 0 ; contador < 10 ; contador++){ System.out.println(contador); } Laço de Repetição: for Campos não são obrigatórios for(;;){ System.out.println("executou for"); } Loop infinito int contador = 0; for(;contador<10;){ System.out.println(contador); contador++; } De maneira equivalente ao while Laço de Repetição: for É possível declarar mais de uma variável for(int i=0, j=0; (i<10)&&(j<10) ; i++, j++){ System.out.println(“i vale ”+i+”, j vale ”+j); } Desvio Incondicional: break Saída imediata da estrutura de controle na qual a instrução é executada Além de ser usado em switch, pode ser usado em while, for e do-while for(int i=1, j=10; (i<10)&&(j>0) ; i++, j--){ if(j%i == 2) break; System.out.println("i vale "+i+", j vale "+j); } Desvio Incondicional: continue Interrompe a execução da iteração corrente e avalia a condição de repetição Usada em laços de repetição: while, for e do- while Não se usa em switch for(int i=1, j=10; (i<10)&&(j>0) ; i++, j--){ if(j%i == 2) continue; System.out.println("i vale "+i+", j vale "+j); } Desvio Incondicional: return Foi definido para indicar o retorno de um método Exemplo: Também pode ser utilizado para desviar o fluxo de execução do programa Faz a execução do método corrente ser interrompida public double getSaldo(){ return saldo; } Desvio Incondicional: return public static boolean fazerAlgo(){ for (int x=0; x<3; x++){ System.out.println(“entrou no for”); return true; } System.out.println(“saiu do for”); return true; } public static void main(String[] args){ fazerAlgo(); System.out.println(“fim”); } Saída: entrou no for fim Desvio Incondicional: return Quando o método tem tipo de retorno void, é possível utilizar o comando return vazio, somente para finalizar a execução do método public static void main(String[] args){ for(int i=0; i<10; i++){ System.out.println("oi"); return; } } Se o método especifica o tipo de retorno, o comando return deve ser usado retornando o dado do tipo definido Desvio Incondicional: return Diferença em relação ao break e continue Finaliza a execução do método em que foi chamado Se o método é o main, o programa é finalizado! Por questão de legibilidade de código, não é recomendável usar return vazio O ideal é estruturar a lógica com as estruturas estudadas Escopo de Variáveis O escopo de uma variável determina a sua visibilidade O corpo doscomandos de controle e de repetição é delimitado por { }, também chamado de bloco O escopo de bloco é similar ao escopo de métodos Escopo de Variáveis O escopo das variáveis declaradas em blocos é delimitado pelo bloco { int n; int k; k = 0; } { int n; { int k; } k = 0; } { int n; { int k; int n; } } n e k possuem o mesmo escopo k foi declarada no bloco interno, não sendo visível no bloco mais externo n foi declarada no bloco externo, sendo visível no bloco mais interno
Compartilhar