Você está na página 1de 61

Statements bsicos na linguagem Java

Prof. Ricardo Linden

Programao Orientada a Objetos -

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

Programao Orientada a Objetos -

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.

A ordem de execuo de statements chamada de fluxo de controle

Programao Orientada a Objetos -

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!

Programao Orientada a Objetos -

Statements Condicionais
Uma statement condicional permite que selecionemos qual statement ser a prxima executada.

Por isto, elas so muitas vezes chamadas de statements de seleo.


Statements condicionais nos do o poder de tomar decises bsicas. As statements condicionais do Java so:
if if-else switch e o operador ?
Programao Orientada a Objetos 5

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;

Se a condio for verdadeira, o statement executado. Se for falsa, o statement saltado.

Programao Orientada a Objetos -

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); } }

Programao Orientada a Objetos -

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;

Se a condio verdadeira, a statement1 executada; Se a condio for falsa, a statement2 executada.


Como a condio no pode ser verdadeira e falsa ao mesmo tempo, ou statement1 executada ou statement2 executada. No podemos executar ambas.
Programao Orientada a Objetos 10

Lgica de uma statement if-else

condio avaliada true statement1 false statement2

: Resto do Programa :

Note que os caminhos no se cruzam - logo statement1 e statement2 no podem ser executadas juntas, dada a mesma condio

Programao Orientada a Objetos -

11

Exemplo completo de if-else


import javax.swing.JOptionPane; public class Exemplo_If_Else { public static void main (String[] args) { int n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com num. :")); if (n1>50) System.out.println(O numero e maior que 50); else System.out.println(O numero nao e maior que 50); System.out.println(Fim do programa.); System.exit(0); } }

Programao Orientada a Objetos -

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

Exemplo completo de bloco de instrues


import javax.swing.JOptionPane; public class Exemplo_Bloco { public static void main (String[] args) { int d,n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com n1. :")); int n2=Integer.parseInt(JOptionPane.showInputDialog(Entre com n2. :")); if (n1>n2) { System.out.println(O maior dos nmeros +n1); d=n1-n2; } else { System.out.println(O maior dos nmeros +n2); d=n2+n1; } System.out.println(O valor de d +d); System.exit(0); } } Programao Orientada a Objetos 14

Conselho sobre blocos


Se no usarmos as chaves, somente a primeira statement subseqente a um if (e a outras statements que veremos depois) ser-lhe- subordinada. Exemplo:

if (n1>n2) n1=n1-n2; n2=n2+1;

if termina aqui! Esta instruo no pertence ao if!

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!

Programao Orientada a Objetos -

16

Exemplo completo de ifs aninhados


import javax.swing.JOptionPane; public class Exemplo_Bloco { public static void main (String[] args) { int n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com n1. :")); int n2=Integer.parseInt(JOptionPane.showInputDialog(Entre com n2. :")); int n3=Integer.parseInt(JOptionPane.showInputDialog(Entre com n3. :")); if (n1>n2) if (n1>n3) System.out.println(O maior e +n1) else System.out.println(O maior e +n3) else if (n2>n3) System.out.println(O maior e +n2) else System.out.println(O maior e +n3); System.exit(0); } }
Programao Orientada a Objetos 17

Conselho sobre ifs aninhados


O else dependurado uma bomba pronta para criar bugs inesperados em seu programa. Para evitar isto, basta usar as chaves para garantir que os ifs e elses pertenam a quem ns efetivamente queremos.

Veja como o exemplo anterior fica mais claro quando usamos as chaves.
Programao Orientada a Objetos 18

Novamente o exemplo de ifs aninhados


import javax.swing.JOptionPane; public class Exemplo_Bloco { public static void main (String[] args) { int n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com n1. :")); int n2=Integer.parseInt(JOptionPane.showInputDialog(Entre com n2. :")); int n3=Integer.parseInt(JOptionPane.showInputDialog(Entre com n3. :")); if (n1>n2) { if (n1>n3) System.out.println(O maior e +n1) else System.out.println(O maior e +n3) } else { if (n2>n3) System.out.println(O maior e +n2) else System.out.println(O maior e +n3); } System.exit(0); } } Programao Orientada a Objetos -

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.

Programao Orientada a Objetos -

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)

Programao Orientada a Objetos -

21

Exemplo completo de Strings


import javax.swing.JOptionPane; public class Compara_Strings { public static void main (String[] args) { String senha=JOptionPane.showInputDialog(Entre com a senha:"); if (senha.equals(senha1)) { System.out.println(Bem vindo ao programa.) } else { System.out.println(Usurio no autorizado); } System.exit(0); Repare que os mtodos em Java sempre comeam } com minsculas. Se eles tiverem uma segunda palavra, ento esta ser escrita com maiscula } (exemplo : compareTo)

Programao Orientada a Objetos -

22

Comparando valores em ponto flutuante


Ns tambm devemos ser bastante cautelosos quando compararmos dois valores de ponto flutuante (float or double) para saber se eles so iguais. Em termos prticos, ns raramente devemos usar o operador de igualdade (==) para comparar dois reais. Na maioria das situaes, ns devemos analsar se dois nmeros so prximos os suficiente para serem considerados iguais. Por exemplo:
if (Math.abs (f1 - f2) < 0.00001) System.out.println (Praticamente iguais.");

Programao Orientada a Objetos -

23

Comparando valores em ponto flutuante


Isto ocorre por problemas de arredondamento normais em um ambiente de representao finita. s vezes, duas operaes que deveriam resultar em nmeros idntico, por problemas de arredondamento, no o fazem e podemos ter um problema de lgica em nossos programas.

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.

Cada caso contm um valor e uma lista de statements


O fluxo de controle transferido para a lista de statements associada ao primeiro valor que casa com a expresso avaliada

Programao Orientada a Objetos -

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 ... }

Switch e case sao palavras reservadas Java

Se a expresso casa com valor2, o fluxo de controle salta para c.

Programao Orientada a Objetos -

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.

Programao Orientada a Objetos -

28

Exemplo completo de switch


import javax.swing.JOptionPane; public class Exemplo_Switch { public static void main (String[] args) { char sexo=M; switch sexo { case M,m : { System.out.println( um homem.) break; } case F,f : { System.out.println( uma mulher.) break; } } System.exit(0); } } O que acontece se apagarmos os breaks?

Programao Orientada a Objetos -

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

Exemplo completo de switch-default


import javax.swing.JOptionPane; public class Exemplo_Switch { public static void main (String[] args) { char sexo=M; switch sexo { case M,m : { System.out.println( um homem.) break; } case F,f : { System.out.println( uma mulher.) break; } default : {System.out.println(Sexo invlido.);} } System.exit(0); } Porque no colocamos break no default? }

Programao Orientada a Objetos -

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

Programao Orientada a Objetos -

32

Exemplo completo do operador condicional


import javax.swing.JOptionPane; public class op_Condicional { public static void main (String[] args) { String senha=JOptionPane.showInputDialog(Entre com a senha:"); System.out.println(senha.equals(senha1) ?Bem vindo ao programa.: Usurio no autorizado.) System.exit(0); } }

Programao Orientada a Objetos -

33

Statements de Repetio
Statements de repetio nos permitem executar uma ou mais statements mltiplas vezes.

Eles so chamados freqentemente de loops


Assim como as statements condicionais, eles so controlados por expresses booleanas. Java tem trs tipos de statements de repetio statements while do loop for Cada uma delas tem peculiaridades que as fazem adequadas para diferentes situaes e cabe ao programador escolher a mais apropriada
Programao Orientada a Objetos 34

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;

while uma palavra reservada

Se a condio for avaliada como verdadeira, o statement executado. Ao fim do statement, volta-se para cima e a condio re-avaliada

O statement executado de forma repetitiva at que a condio torne-se falsa.

Programao Orientada a Objetos -

35

Lgica de um loop while

condio avaliada true statement false

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

Exemplo completo de um while


import javax.swing.JOptionPane;

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

Desafio em sala de aula

Que tal modificarmos o programa de senha para dar trs chances para o usurio acertar?

Programao Orientada a Objetos -

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.

Programao Orientada a Objetos -

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

Programao Orientada a Objetos -

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.

Programao Orientada a Objetos -

41

Lgica dos loops aninhados

condio avaliada true

false

false

condio avaliada true statement

Loop mais interno : cada vez que entramos no loop mais externo, executamos este loop n vezes

Programao Orientada a Objetos -

42

Exemplo de loops aninhados


public class Exemplo_Aninhados { public static void main (String[] args) { int n1=0,n2; while(++n1<10) { n2=n1+1; while(n2<10) { System.out.println(n1+ +n2++); } } System.out.println(Fim do programa. Soma=+soma); System.exit(0); } }
Programao Orientada a Objetos 43

Mos massa

Vamos colocar o programa anterior para funcionar e ver o resultado.

Como garantimos os pontos de sada dos dois loops do exemplo?

Programao Orientada a Objetos -

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.

Programao Orientada a Objetos -

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

Programao Orientada a Objetos -

46

Comparando os loops while e do


Loop while Loop do

condio avaliada true true statement false

statement

condio avaliada false

Programao Orientada a Objetos -

47

Outro exerccio

Vamos modificar o exemplo com loop while para fazer o mesmo, s que usando um loop do.

Fica melhor? Precisamos inicializao de n1? Porqu?

da

Programao Orientada a Objetos -

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

for ( initializao ; condio ; incremento ) statement;

A poro incremento executada ao fim de cada iterao

Programao Orientada a Objetos -

49

O Statement for
Um loop for equivalente seguinte estrutura do loop while:
initializao; while ( condio ) { statement; incremento; }

Logo, como no caso do while, o corpo do loop pode executar 0 ou n vezes!

Programao Orientada a Objetos -

50

Lgica de um loop for

initializao O for bom quando temos um nmero fixo de execues. Os programadores C adoram fazer construes bem complexas com o FOR!

condio avaliada true statement incremento false

Programao Orientada a Objetos -

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.

Mesmo que no usemos os elementos, os pontos-e-vrgulas ainda so necessrios.


Exemplos
for ( ; x < 10 ; x++) for ( x=1 ; ; x++) for ( x=1; x<10 ; ) Sem inicializao Sem condio Sem incremento
Programao Orientada a Objetos 52

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).

Programao Orientada a Objetos -

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); } }

Qual a sada deste programa?

Programao Orientada a Objetos -

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.

Programao Orientada a Objetos -

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); } }

Qual a sada deste programa?

Programao Orientada a Objetos -

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) {

Programao Orientada a Objetos -

57

Break e Continue rotulados


Podemos colocar rtulos (sem os dois pontos) aps as statements break e continue. Assim, ao invs de causar a interrupo ou voltar para o incio necessariamente do loop mais interno, ns o faremos com o loop cujo rtulo seja explicitado. Esta a maneira do Java de simular o comando GOTO, que no suportado.

Programao Orientada a Objetos -

58

Exemplo de continue rotulado


public class Continue_Rotulado { public static void main (String[] args) { loop_ext:for(int i = 0; i < 10; i++) { if( (i == 5 ) continue; for(int j=i;j<=10;j++) { if (j=(i+3)) continue loop_ext; if (j=2*i) continue; System.out.println(i = + i +j=+j); } } System.exit(0); } }
Programao Orientada a Objetos 59

Dentro dos mtodos, trabalhamos como se estivssemos usando uma LP imperativa. Agora estamos prontos para entrar no mundo da OO

Programao Orientada a Objetos -

60

S no esqueam de fazer as listas de exerccios!

Programao Orientada a Objetos -

61