Académique Documents
Professionnel Documents
Culture Documents
Statements
Nesta aula analisaremos alguns statements importantes para a programao. Todos nesta matria sabem programar imperativamente, logo, considerem esta aula como uma reviso. Tpicos principais:
Fluxo de controle atravs de um mtodo Statements e operadores para tomada de deciso Statements de repetio
Fluxo de controle
A no ser que ordenado de outra maneira, a ordem de execuo dentro de um mtodo linear: uma aps a outra na ordem em que esto escritas. Alguns statements permitem que modifiquemos esta ordem da seguinte maneira:
decidindo se vamos executar ou no um (bloco de) statement realizar uma mesma statements vrias vezes consecutivas.
Fluxo de controle
No se esqueam: a execuo de um programa Java comea dentro do mtodo main (e s pode existir um por arquivo!)
Isto um contrasenso: uma LOO que tem um mtodo main... Outras LOO agem de forma diferente!
Statements Condicionais
Uma statement condicional permite que selecionemos qual statement ser a prxima executada.
O statement if
O statement if tem a seguinte sintaxe:
if uma palavra reservada do Java A condio deve ser uma expresso booleana. Ele deve retornar um valor verdadeiro ou falso.
if ( condio ) statement;
O statement if
Exemplo de um statement if
if (sum > MAX) delta = sum - MAX; System.out.println (A soma " + sum);
Primeiro a condio avaliada. Se o valor de sum maior que o valor de MAX, ou no Se a condio for verdaeira, a atribuio executada Se a condio for falsa, a atribuio saltada.
De qualquer maneira, a chamada para o println executada, pois ela no pertence ao corpo do if.
Programao Orientada a Objetos 7
Lgica de um statement if
Voc no lembra de fluxogramas? Ns os vimos em Programao I Eles so uma tima ferramenta de definio de algoritmos e merecem ser revistos!
condio avaliada
true statement false
: Resto do Programa :
Programao Orientada a Objetos 8
Exemplo completo de if
import javax.swing.JOptionPane;
public class Exemplo_If { public static void main (String[] args) { int n1; n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com um num. :")); if (n1>50) System.out.println(O numero e maior que 50); System.out.println(Fim do programa.); System.exit(0); } }
O Statement if-else
Uma clusula else pode ser adicionada a um statement if para torn-lo um statement if-else:
if ( condio ) statement1; else statement2;
: Resto do Programa :
Note que os caminhos no se cruzam - logo statement1 e statement2 no podem ser executadas juntas, dada a mesma condio
11
12
Bloco de Statements
Muitas statements podem ser agrupadas em um bloco de statement Um bloco delimitado por chaves ( { } )
Um bloco de statements pode ser usado em qualquer lugar que uma statement for definida na sintaxe do Java
Por exemplo, no if ou no if-else, tanto a statement do if quanto a do if-else podem ser substitudas por um bloco. Fazemos isto quando precisamos tomar vrias atitudes quando de um teste, por exemplo, ao invs de uma s.
Programao Orientada a Objetos 13
Isto uma causa muito comum de erros! Para evit-los, basta usar sempre as chaves, mesmo quando temos apenas uma nica instruo subordinada ao if!
Programao Orientada a Objetos 15
Ifs aninhados
Uma statement executada dentro de um statement if ou dentro de um statement else pode ser outra statement if
Na verdade, pode ser qualquer statement vlido do Java, sem distino!
A isto dado o nome de ifs aninhados A clusula else encontrada, a no ser que haja chaves delimitantes, relacionada com o ltimo if.
No importa o que a identao quer implicar!
16
Veja como o exemplo anterior fica mais claro quando usamos as chaves.
Programao Orientada a Objetos 18
19
Comparando Strings
Lembre-se que uma string de caracteres em Java um objeto. Ns no podemos usar o operador relacional para comparar strings.
Porque? Porque objetos so ponteiros. Se ns os compararmos, estaremos vendo se apontam para o mesmo lugar.
20
Comparando Strings
O mtodo equals da classe string pode ser chamado de um a string para determinar se duas strings contm exatamente os mesmos caracteres na mesma ordem. A classe String tambm tem uma mtodo chamado compareTo para determinar se uma string vem antes de outra alfabeticamente (conforme determinado pelo conjunto de caracteres Unicode)
21
22
23
Uma lembrana boa: Em Java, se errarmos e substituirmos o == por um =, o programa no compila. Isto evita erros chatos que tnhamos em C
Programao Orientada a Objetos 24
O statement switch
O statement switch fornece outra maneira de decidir qual dentre vrias opes de statements ser executada a seguir. O switch avalia uma expresso e depois tenta casar o resultado com um dentre vrios casos possveis.
25
O statement switch
A sintaxe geral do statement switch a seguinte:
switch ( expresso ) { case valor1 : statement-list1 case valor2 : statement-list2 case valor3 : statement-list3 case ... }
26
O statement switch
Freqentemente, um statement break usado como ltima instruo de cada lista de statements.
Um statement break faz com que o fluxo de controle seja transferido para o fim do statement switch.
Se o break no for usado, o fluxo de controle continua executando as statements do prximo case Algumas vezes isto pode ser til, especialmente quando houver um caso que executa um suoperconjunto de instrues do outro. Entretanto, na maioria dos casos, esquecer um break uma causa de bugs em seus programas.
Programao Orientada a Objetos 27
O statement switch
A expresso de um switch deve resultar em um integral data type, como um inteiro ou caracter. No pode resultado em um ponto flutuante ou string. Note que implicitamente estamos usando o operador de igualdade em cada case do switch. No podemos realizar testes relacionais dentro de um switch para isto usamos o if.
28
29
O statement switch
Um statement switch pode ter um caso default opcional. O caso default no tem nenhum valor associado, e simplesmente usa a palavra reservada default Se o caso default estiver presente, o controle ser transferido para ele caso nenhum outro caso tenha um valor que case com a expresso. Apesar do caso default poder ser colocado em qualquer posio no switch, ele normalmente colocado no fim. Se no h caso default e nenhum valor casa com a expresso, o controle transferido para a primeira instruo aps o switch.
Programao Orientada a Objetos 30
31
O operador condicional
Java tem um operador condicional, como o C, que avalia uma condio booleana e determina qual de duas outras expresses so avaliadas O resultado da expresso selecionada ento o resultado da expresso condicional Sua sintaxe :
condio ? expresso1 : expresso2
Se a condio avalia para verdadeira, a expresso1 avaliada; se condio for falsa, a expresso2 avaliada
32
33
Statements de Repetio
Statements de repetio nos permitem executar uma ou mais statements mltiplas vezes.
O statement while
O statement while tem a seguinte sintaxe:
A condio deve ser uma expresso booleana. Ele deve retornar um valor verdadeiro ou falso. while ( condio ) statement;
Se a condio for avaliada como verdadeira, o statement executado. Ao fim do statement, volta-se para cima e a condio re-avaliada
35
A chave do bom uso do while perceber que o statement pode executar zero ou vrias vezes, j que a condio avaliada antes do statement ser executado
Programao Orientada a Objetos 36
public class Exemplo_While { public static void main (String[] args) { int n1=1,soma=0; while(n1>0) { n1=Integer.parseInt(JOptionPane.showInputDialog(No. positivo :")); soma+=n1; } System.out.println(Fim do programa. Soma=+soma); System.exit(0); } }
Programao Orientada a Objetos 37
Que tal modificarmos o programa de senha para dar trs chances para o usurio acertar?
38
Loops Infinitos
O corpo de um loop while deve eventualmente fazer com que a condio de teste se torne falsa. Se no, temos uma situao de um loop infinito, que executar para sempre, a no ser que o usurio interrompa o programa
Este um tipo de erro lgico comum que deve ser evitado. Sempre cheque seus programas para garantir que existam pontos de sada em seus loops.
39
Perguntas Razoveis
Em nosso exemplo anterior, para que servia o valor de inicializao de n1? Garantir que o loop executasse pela primeira vez O que fazia com que o loop tivesse um ponto de sada? A entrada de um nmero menor ou igual que zero pelo usurio
40
Loops Aninhados
Da mesma maneira que os statements ifs podem ser aninhados, loops tambm podem s-lo. Isto , o corpo de um loop pode conter outro loop. O loop que contm chamado de loop mais externo, enquanto que o loop contido chamado de loop mais interno. Cada vez que executamos o loop mais externo, o loop mais interno executar n vezes.
41
false
false
Loop mais interno : cada vez que entramos no loop mais externo, executamos este loop n vezes
42
Mos massa
44
O Statement do
O statement do tem a seguinte sintaxe:
Usa as palavras reservadas do e while do { statement; } while ( condio )
O statement executado uma vez e depois a condio avaliada. O processo se repete at que a condio se torne falsa.
45
Lgica de um loop do
statement
true
condio avaliada Note que o loop do muito similar ao loop while, exceto que a condio avaliada ao fim do corpo do loop. Isto garante que o corpo do loop seja executado ao menos uma vez.
false
46
statement
47
Outro exerccio
Vamos modificar o exemplo com loop while para fazer o mesmo, s que usando um loop do.
da
48
O Statement for
O statement for tem a seguinte sintaxe:
Palavra Reservada
A poro de initializao O statement executado executada uma vez at que a condio se torne falsa quando o loop comea
49
O Statement for
Um loop for equivalente seguinte estrutura do loop while:
initializao; while ( condio ) { statement; incremento; }
50
initializao O for bom quando temos um nmero fixo de execues. Os programadores C adoram fazer construes bem complexas com o FOR!
51
O Statement for
Cada elemento de um statement for opcional:
Se no usarmos a inicializao, nenhuma inicializao realizada Se a condio no usada, nenhum teste feito e criamos um loop infinito. Se o incremento no usado, nenhum incremento realizado.
Continue
A statement continue faz com que o programa abandone a iterao corrente (mais interna) e comee a prxima iterao do loop. Use o continue para pular execues que no so necessrias. Ao encontrar o continue, o programa volta para a primeira instruo do loop (for, while ou do).
53
Exemplo de continue
public class Exemplo_Continue { public static void main (String[] args) { for(int i = 0; i < 10; i++) { if( (i == 5 ) continue; System.out.println(i = + i ); } System.exit(0); } }
54
Break
A statement break faz com que o programa interrompa o loop corrente (mais interno) sem executar o resto das suas statements. Faz com que o controle seja transferido para a primeira instruo imediatamente aps o bloco do loop mais interno. Use o break para interromper uma interao especfica quando encontrar um situao no usual ou de erro.
55
Exemplo de break
public class Exemplo_Break { public static void main (String[] args) { for(int i = 0; i < 10; i++) { if( i == 5 ) break; System.out.println(i = + i ); } System.exit(0); } }
56
Labels
Qualquer instruo pode receber um rtulo (label). Um label nada mais do que um identificador Java seguido de um : (dois pontos). Os labels no precisam ser nicos, desde que seus escopos no tenham intersees. Exemplos:
label1: for(int i = 0; i < 10; i++) { loopx : while (a<10) {
57
58
Dentro dos mtodos, trabalhamos como se estivssemos usando uma LP imperativa. Agora estamos prontos para entrar no mundo da OO
60
61