java aula03

61
Programação Orientada a Objetos - a ula 3 1 Statements básicos na linguagem Java Prof. Ricardo Linden

Upload: 1wocker1

Post on 21-Oct-2015

65 views

Category:

Documents


0 download

TRANSCRIPT

Programação Orientada a Objetos - aula 3

1

Statements básicos na linguagem Java

Prof. Ricardo Linden

Programação Orientada a Objetos - aula 3

2

StatementsStatements

Nesta aula analisaremos alguns statements importantes para a programação.

Todos nesta matéria sabem programar imperativamente, logo, considerem esta aula como uma revisão.

Tópicos principais: Fluxo de controle através de um método Statements e operadores para tomada de decisão Statements de repetição

Programação Orientada a Objetos - aula 3

3

Fluxo de controleFluxo de controle

A não ser que ordenado de outra maneira, a ordem de execução dentro de um método é linear: uma após a outra na ordem em que estão escritas.

Alguns statements permitem que modifiquemos esta ordem da seguinte maneira: decidindo se vamos executar ou não um (bloco de) statement realizar uma mesma statements várias vezes consecutivas.

A ordem de execução de statements é chamada de fluxo de controle

Programação Orientada a Objetos - aula 3

4

Não se esqueçam: a execução de um programaJava começa dentro do método main (e só pode

existir um por arquivo!)

Fluxo de controleFluxo de controle

Isto é um contrasenso:uma LOO que temum método main...

Outras LOO agem deforma diferente!

Programação Orientada a Objetos - aula 3

5

Statements CondicionaisStatements Condicionais Uma statement condicional permite que selecionemos qual

statement será a próxima executada.

Por isto, elas são muitas vezes chamadas de statements de seleção.

Statements condicionais nos dão o poder de tomar decisões básicas.

As statements condicionais do Java são: if if-else switch e o operador ?

Programação Orientada a Objetos - aula 3

6

O statement if O statement if

O statement if tem a seguinte sintaxe:

if ( condição ) statement;

if é uma palavrareservada do Java

A condição deve ser uma expressão booleana.Ele deve retornar um valor verdadeiro ou falso.

Se a condição for verdadeira, o statement é executado.Se for falsa, o statement é “saltado”.

Programação Orientada a Objetos - aula 3

7

O statement ifO statement if

Exemplo de um statement if

if (sum > MAX) delta = sum - MAX;System.out.println (”A soma é " + sum);

Primeiro a condição é avaliada. Se o valor de sum é maior que o valor de MAX, ou não

Se a condição for verdaeira, a atribuição é executadaSe a condição for falsa, a atribuição é saltada.

De qualquer maneira, a chamada para o println é executada, pois ela não pertence ao corpo do if.

Programação Orientada a Objetos - aula 3

8

Lógica de um statement ifLógica de um statement if

condiçãoavaliada

false

statement

true

:Resto do Programa

:

Você não lembra defluxogramas? Nós os

vimos em Programação IEles são uma ótima ferramentade definição de algoritmos e

merecem ser revistos!

Programação Orientada a Objetos - aula 3

9

Exemplo completo de ifExemplo 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);

}

}

Programação Orientada a Objetos - aula 3

10

O Statement if-elseO Statement if-else

Uma cláusula else pode ser adicionada a um statement if para torná-lo um statement if-else:

if ( condição ) statement1;else statement2;

Se a condição é verdadeira, a statement1 é executada; Se a condição for falsa, a statement2 é executada.

Como a condição não pode ser verdadeira e falsa ao mesmo tempo, ou statement1 é executada ou statement2 é executada. Não podemos executar ambas.

Programação Orientada a Objetos - aula 3

11

Lógica de uma statement if-elseLógica de uma statement if-else

false

statement2

condiçãoavaliada

statement1

true

:Resto do Programa

:

Note que os caminhos não se cruzam - logo statement1 e statement2 não podem ser executadas juntas, dada a mesma condição

Programação Orientada a Objetos - aula 3

12

Exemplo completo de if-elseExemplo completo de if-elseimport 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);

}

}

Programação Orientada a Objetos - aula 3

13

Bloco de StatementsBloco 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 substituídas por um bloco.

Fazemos isto quando precisamos tomar várias atitudes quando de um teste, por exemplo, ao invés de uma só.

Programação Orientada a Objetos - aula 3

14

Exemplo completo de bloco de instruções Exemplo completo de bloco de instruções 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 números é”+n1);

d=n1-n2;

} else {

System.out.println(“O maior dos números é”+n2);

d=n2+n1;

}

System.out.println(“O valor de d é “+d);

System.exit(0);

}

}

Programação Orientada a Objetos - aula 3

15

Conselho sobre blocosConselho sobre blocos Se não usarmos as chaves, somente a primeira statement

subseqüente 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 instrução não pertence ao if!

Isto é uma causa muito comum de erros! Para evitá-los, basta usar sempre as chaves, mesmo quando temos apenas uma única instrução subordinada ao if!

Programação Orientada a Objetos - aula 3

16

Ifs aninhadosIfs 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 válido do Java, sem

distinção!

A isto é dado o nome de ifs aninhados

A cláusula else encontrada, a não ser que haja chaves delimitantes, é relacionada com o último if. Não importa o que a identação quer implicar!

Programação Orientada a Objetos - aula 3

17

Exemplo completo de ifs aninhadosExemplo completo de ifs aninhadosimport 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);

}

}

Programação Orientada a Objetos - aula 3

18

Conselho sobre ifs aninhados 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 “pertençam” a quem nós efetivamente queremos.

Veja como o exemplo anterior fica mais claro quando usamos as chaves.

Programação Orientada a Objetos - aula 3

19

Novamente o exemplo de ifs aninhadosNovamente o exemplo de ifs aninhadosimport 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);

}

}

Programação Orientada a Objetos - aula 3

20

Comparando StringsComparando Strings

Lembre-se que uma string de caracteres em Java é um objeto.

Nós não podemos usar o operador relacional para comparar strings.

Porque? Porque objetos são ponteiros. Se nósos compararmos, estaremos vendose apontam para o mesmo lugar.

Programação Orientada a Objetos - aula 3

21

Comparando StringsComparando Strings

• O método equals da classe string pode ser chamado de um a string para determinar se duas strings contêm exatamente os mesmos caracteres na mesma ordem.

• A classe String também tem uma método chamado compareTo para determinar se uma string vem antes de outra alfabeticamente (conforme determinado pelo conjunto de caracteres Unicode)

Programação Orientada a Objetos - aula 3

22

Exemplo completo de StringsExemplo 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(“Usuário não autorizado”);

}

System.exit(0);

}

}

Repare que os métodos em Java sempre começam com minúsculas. Se eles tiverem uma segunda palavra, então esta será escrita com maiúscula (exemplo : compareTo)

Programação Orientada a Objetos - aula 3

23

Comparando valores em ponto flutuanteComparando valores em ponto flutuante

Nós também devemos ser bastante cautelosos quando compararmos dois valores de ponto flutuante (float or double) para saber se eles são iguais.

Em termos práticos, nós raramente devemos usar o operador de igualdade (==) para comparar dois reais.

Na maioria das situações, nós devemos analsar se dois números são próximos os suficiente para serem considerados iguais.

Por exemplo:

if (Math.abs (f1 - f2) < 0.00001) System.out.println (”Praticamente iguais.");

Programação Orientada a Objetos - aula 3

24

Comparando valores em ponto flutuanteComparando valores em ponto flutuante

Isto ocorre por problemas de arredondamento normais em um ambiente de representação finita. Às vezes, duas operações que deveriam resultar em números idêntico, por problemas de arredondamento, não o fazem e podemos ter um problema de lógica em nossos programas.

Uma lembrança boa: Em Java, se errarmos e substituirmos o == por um =, o programa não compila. Isto evita erros chatos que tínhamos em C

Programação Orientada a Objetos - aula 3

25

O statement switchO statement switch

O statement switch fornece outra maneira de decidir qual dentre várias opções de statements será executada a seguir.

O switch avalia uma expressão e depois tenta casar o resultado com um dentre vários casos possíveis.

Cada caso contém 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 expressão avaliada

Programação Orientada a Objetos - aula 3

26

A sintaxe geral do statement switch é a seguinte:

switch ( expressão ){ case valor1 : statement-list1 case valor2 : statement-list2 case valor3 : statement-list3 case ...

}

Switch e casesao palavras

reservadas Java

Se a expressãocasa com valor2,o fluxo de controlesalta para cá.

O statement switchO statement switch

Programação Orientada a Objetos - aula 3

27

Freqüentemente, um statement break é usado como última instrução 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 não for usado, o fluxo de controle continua executando as statements do próximo case

Algumas vezes isto pode ser útil, especialmente quando houver um caso que executa um suoperconjunto de instruções do outro.

Entretanto, na maioria dos casos, esquecer um break é uma causa de bugs em seus programas.

O statement switchO statement switch

Programação Orientada a Objetos - aula 3

28

A expressão de um switch deve resultar em um integral data type, como um inteiro ou caracter.

Não pode resultado em um ponto flutuante ou string.

Note que implicitamente estamos usando o operador de igualdade em cada case do switch.

Não podemos realizar testes relacionais dentro de um switch - para isto usamos o if.

O statement switchO statement switch

Programação Orientada a Objetos - aula 3

29

Exemplo completo de switchExemplo completo de switchimport 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?

Programação Orientada a Objetos - aula 3

30

Um statement switch pode ter um caso default opcional.

O caso default não 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 expressão.

Apesar do caso default poder ser colocado em qualquer posição no switch, ele normalmente é colocado no fim.

Se não há caso default e nenhum valor casa com a expressão, o controle é transferido para a primeira instrução após o switch.

O statement switchO statement switch

Programação Orientada a Objetos - aula 3

31

Exemplo completo de switch-defaultExemplo completo de switch-defaultimport 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 inválido.”);}

}

System.exit(0);

}

}Porque não colocamos break no default?

Programação Orientada a Objetos - aula 3

32

O operador condicionalO operador condicional

Java tem um operador condicional, como o C, que avalia uma condição booleana e determina qual de duas outras expressões são avaliadas

O resultado da expressão selecionada é então o resultado da expressão condicional

Sua sintaxe é:

condição ? expressão1 : expressão2

Se a condição avalia para verdadeira, a expressão1 é avaliada; se condição for falsa, a expressão2 é avaliada

Programação Orientada a Objetos - aula 3

33

Exemplo completo do operador condicionalExemplo 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.”:

“Usuário não autorizado.”)

System.exit(0);

}

}

Programação Orientada a Objetos - aula 3

34

Statements de RepetiçãoStatements de Repetição Statements de repetição nos permitem executar uma ou mais statements

múltiplas vezes.

Eles são chamados freqüentemente de loops

Assim como as statements condicionais, eles são controlados por expressões booleanas.

Java tem três tipos de statements de repetição statementswhile do loopfor

Cada uma delas tem peculiaridades que as fazem adequadas para diferentes situações e cabe ao programador escolher a mais apropriada

Programação Orientada a Objetos - aula 3

35

O statement whileO statement while O statement while tem a seguinte sintaxe:

while ( condição ) statement;

while é umapalavra reservada

Se a condição for avaliada como verdadeira, o statement é executado.Ao fim do statement, “volta-se para cima” e a condição é re-avaliada

O statement é executado de forma repetitiva até que a condição torne-se falsa.

A condição deve ser uma expressão booleana.Ele deve retornar um valor verdadeiro ou falso.

Programação Orientada a Objetos - aula 3

36

Lógica de um loop whileLógica de um loop while

true

statement

condiçãoavaliada

false

A chave do bom uso do while é perceber que o statement pode executar zero ou várias vezes, já que a condição é avaliada antes do statement ser executado

Programação Orientada a Objetos - aula 3

37

Exemplo completo de um whileExemplo 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);

}

}

Programação Orientada a Objetos - aula 3

38

Desafio em sala de aulaDesafio em sala de aula

Que tal modificarmos o programade senha para dar três chances

para o usuário acertar?

Programação Orientada a Objetos - aula 3

39

Loops InfinitosLoops Infinitos

O corpo de um loop while deve eventualmente fazer com que a condição de teste se torne falsa.

Se não, temos uma situação de um loop infinito, que executará para sempre, a não ser que o usuário interrompa o programa

Este é um tipo de erro lógico comum que deve ser evitado. Sempre cheque seus programas para garantir que existam pontos de saída em seus loops.

Programação Orientada a Objetos - aula 3

40

Perguntas RazoáveisPerguntas Razoáveis

Em nosso exemplo anterior, para que servia o valor de inicialização de n1?

O que fazia com que o loop tivesse um ponto de saída?

Garantir que o loop executasse pela primeira vez

A entrada de um número menor ou igual que zero pelo usuário

Programação Orientada a Objetos - aula 3

41

Loops AninhadosLoops Aninhados

Da mesma maneira que os statements ifs podem ser aninhados, loops também podem sê-lo.

Isto é, o corpo de um loop pode conter outro loop.

O loop que contém é 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.

Programação Orientada a Objetos - aula 3

42

Lógica dos loops aninhados Lógica dos loops aninhados

true

condiçãoavaliada

false

true

statement

condiçãoavaliada

false

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

Programação Orientada a Objetos - aula 3

43

Exemplo de loops aninhadosExemplo 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);

}

}

Programação Orientada a Objetos - aula 3

44

Mãos à massaMãos à massa

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

Como garantimos os pontos de saída dos dois loops do exemplo?

Programação Orientada a Objetos - aula 3

45

O Statement doO Statement do

O statement do tem a seguinte sintaxe:

do{ statement;}while ( condição )

Usa as palavrasreservadas do e while

O statement é executado uma vez e depois a condição é avaliada. O processo se repete até que a condição se torne falsa.

Programação Orientada a Objetos - aula 3

46

Lógica de um loop doLógica de um loop do

true

condiçãoavaliada

statement

false

Note que o loop do é muito similar ao loop while, exceto que a condição é avaliada ao fim do corpo do loop.

Isto garante que o corpo do loop seja executado ao menos uma vez.

Programação Orientada a Objetos - aula 3

47

Comparando os loops while e doComparando os loops while e do

Loop while Loop do

true

condiçãoavaliada

statement

false

statement

true

condiçãoavaliada

false

Programação Orientada a Objetos - aula 3

48

Outro exercícioOutro exercício

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

Fica melhor? Precisamos da inicialização de n1? Porquê?

Programação Orientada a Objetos - aula 3

49

O Statement forO Statement for

O statement for tem a seguinte sintaxe:

for ( initialização ; condição ; incremento ) statement;

PalavraReservada

A porção de initializaçãoé executada uma vez quando o loop começa

O statement é executadoaté que a condição se torne falsa

A porção incremento é executada ao fim de cada iteração

Programação Orientada a Objetos - aula 3

50

Um loop for é equivalente à seguinte estrutura do loop while:

initialização;while ( condição ){ statement; incremento;}

O Statement forO Statement for

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

Programação Orientada a Objetos - aula 3

51

Lógica de um loop forLógica de um loop for

condiçãoavaliada

false

statement

true

incremento

initialização

O for é bom quando temos um número fixo

de execuções.

Os programadores Cadoram fazer

construções bemcomplexas com o

FOR!

Programação Orientada a Objetos - aula 3

52

Cada elemento de um statement for é opcional:

Se não usarmos a inicialização, nenhuma inicialização é realizada Se a condição não é usada, nenhum teste é feito e criamos um loop

infinito. Se o incremento não é usado, nenhum incremento é realizado.

Mesmo que não usemos os elementos, os pontos-e-vírgulas ainda são necessários.

Exemplosfor ( ; x < 10 ; x++) Sem inicialização

for ( x=1 ; ; x++) Sem condição

for ( x=1; x<10 ; ) Sem incremento

O Statement forO Statement for

Programação Orientada a Objetos - aula 3

53

Continue Continue

A statement continue faz com que o programa abandone a iteração corrente (mais interna) e começe a próxima iteração do loop.

Use o continue para pular execuções que não são necessárias.

Ao encontrar o continue, o programa volta para a primeira instrução do loop (for, while ou do).

Programação Orientada a Objetos - aula 3

54

Exemplo de continueExemplo 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 saída deste programa?

Programação Orientada a Objetos - aula 3

55

BreakBreak

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 instrução imediatamente após o bloco do loop mais interno.

Use o break para interromper uma interação específica quando encontrar um situação não usual ou de erro.

Programação Orientada a Objetos - aula 3

56

Exemplo de breakExemplo 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 saída deste programa?

Programação Orientada a Objetos - aula 3

57

LabelsLabels Qualquer instrução pode receber um rótulo (label).

Um label nada mais é do que um identificador Java seguido de um : (dois pontos).

Os labels não precisam ser únicos, desde que seus escopos não tenham interseções.

Exemplos:label1: for(int i = 0; i < 10; i++) {

loopx : while (a<10) {

Programação Orientada a Objetos - aula 3

58

Break e Continue rotuladosBreak e Continue rotulados

Podemos colocar rótulos (sem os dois pontos) após as statements break e continue.

Assim, ao invés de causar a interrupção ou voltar para o início necessariamente do loop mais interno, nós o faremos com o loop cujo rótulo seja explicitado.

Esta é a maneira do Java de simular o comando GOTO, que não é suportado.

Programação Orientada a Objetos - aula 3

59

Exemplo de continue rotuladoExemplo 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);

}

}

Programação Orientada a Objetos - aula 3

60

Dentro dos métodos, trabalhamoscomo se estivéssemos usando

uma LP imperativa.Agora estamos prontos para

entrar no mundo da OO

Programação Orientada a Objetos - aula 3

61

Só não esqueçam de fazer as listas de exercícios!