Download Statements básicos na linguagem Java

Document related concepts
no text concepts found
Transcript
Statements básicos na linguagem Java
Prof. Ricardo Linden
Programação Orientada a Objetos -
1
Statements
 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 -
2
Fluxo 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 -
3
Fluxo de controle
Não se esqueçam: a execução de um programa
Java começa dentro do método main (e só pode
existir um por arquivo!)
Isto é um contrasenso:
uma LOO que tem
um método main...
Outras LOO agem de
forma diferente!
Programação Orientada a Objetos -
4
Statements 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 -
5
O statement if
 O statement if tem a seguinte sintaxe:
if é uma palavra
reservada do Java
A condição deve ser uma expressão booleana.
Ele deve retornar um valor verdadeiro ou falso.
if ( condição )
statement;
Se a condição for verdadeira, o statement é executado.
Se for falsa, o statement é “saltado”.
Programação Orientada a Objetos -
6
O 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 é executada
Se 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 -
7
Lógica de um statement if
condição
avaliada
true
false
Você não lembra de
fluxogramas? Nós os
vimos em Programação I
Eles são uma ótima ferramenta
de definição de algoritmos e
merecem ser revistos!
statement
:
Resto do Programa
:
Programação 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);
}
}
Programação Orientada a Objetos -
9
O 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 -
10
Lógica de uma statement if-else
condição
avaliada
true
false
statement1
statement2
:
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 -
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);
}
}
Programação 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 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 -
13
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 14
Conselho 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 -
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 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 -
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);
}
}
Programação 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 “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 -
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);
}
}
Programação Orientada a Objetos -
19
Comparando 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ós
os compararmos, estaremos vendo
se apontam para o mesmo lugar.
Programação Orientada a Objetos -
20
Comparando 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 -
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(“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 -
22
Comparando 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 -
23
Comparando 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 -
24
O 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 -
25
O statement switch
 A sintaxe geral do statement switch é a seguinte:
Switch e case
sao palavras
reservadas Java
switch ( expressão )
{
case valor1 :
statement-list1
case valor2 :
statement-list2
case valor3 :
statement-list3
case ...
}
Programação Orientada a Objetos -
Se a expressão
casa com valor2,
o fluxo de controle
salta para cá.
26
O statement switch
 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.
Programação Orientada a Objetos -
27
O statement switch
 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.
Programação 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?
Programação Orientada a Objetos -
29
O statement switch
 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.
Programação 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 inválido.”);}
}
System.exit(0);
}
Porque não colocamos break no default?
}
Programação Orientada a Objetos -
31
O 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 -
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.”:
“Usuário não autorizado.”)
System.exit(0);
}
}
Programação Orientada a Objetos -
33
Statements 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 statements
while
do loop
for
 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 -
34
O statement while
 O statement while tem a seguinte sintaxe:
A condição deve ser uma expressão booleana.
Ele deve retornar um valor verdadeiro ou falso.
while é uma
palavra reservada
while ( condição )
statement;
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.
Programação Orientada a Objetos -
35
Lógica de um loop while
condição
avaliada
true
statement
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 -
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);
}
}
Programação Orientada a Objetos -
37
Desafio em sala de aula
Que tal modificarmos o programa
de senha para dar três chances
para o usuário acertar?
Programação Orientada a Objetos -
38
Loops 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 -
39
Perguntas Razoáveis
Em nosso exemplo anterior, para que servia
o valor de inicialização de n1?
Garantir que o loop executasse
pela primeira vez
O que fazia com que o loop tivesse um ponto
de saída?
A entrada de um número menor
ou igual que zero pelo usuário
Programação Orientada a Objetos -
40
Loops 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 -
41
Lógica dos loops aninhados
condição
avaliada
true
false
condição
avaliada
true
statement
false
Loop mais interno : cada
vez que entramos no loop
mais externo, executamos
este loop n vezes
Programação 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);
}
}
Programação Orientada a Objetos -
43
Mã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 -
44
O Statement do
 O statement do tem a seguinte sintaxe:
Usa as palavras
reservadas
do e while
do
{
statement;
}
while ( condição )
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 -
45
Lógica de um loop do
statement
true
condição
avaliada
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.
false
Programação Orientada a Objetos -
46
Comparando os loops while e do
Loop while
Loop do
statement
condição
avaliada
true
true
false
condição
avaliada
statement
false
Programação Orientada a Objetos -
47
Outro exercício

Vamos modificar o exemplo com loop
while para fazer o mesmo, só que
usando um loop do.

Fica
melhor?
Precisamos
inicialização de n1? Porquê?
Programação Orientada a Objetos -
da
48
O Statement for
 O statement for tem a seguinte sintaxe:
Palavra
Reservada
A porção de initialização
O statement é executado
é executada uma vez
até que a condição se torne falsa
quando o loop começa
for ( initialização ; condição ; incremento )
statement;
A porção incremento é executada ao fim de cada iteração
Programação Orientada a Objetos -
49
O Statement for
 Um loop for é equivalente à seguinte estrutura do loop
while:
initialização;
while ( condição )
{
statement;
incremento;
}
Logo, como no caso do while, o corpo
do loop pode executar 0 ou n vezes!
Programação Orientada a Objetos -
50
Lógica de um loop for
initialização
O for é bom quando
temos um número fixo
de execuções.
condição
avaliada
true
statement
false
Os programadores C
adoram fazer
construções bem
complexas com o
FOR!
incremento
Programação Orientada a Objetos -
51
O Statement for
 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.
 Exemplos
for ( ; x < 10 ; x++)
for ( x=1 ; ; x++)
for ( x=1; x<10 ; )
Sem inicialização
Sem condição
Sem incremento
Programação Orientada a Objetos -
52
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 -
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 saída deste programa?
Programação 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
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 -
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 saída deste programa?
Programação Orientada a Objetos -
56
Labels
 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 -
57
Break 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 -
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);
}
}
Programação Orientada a Objetos -
59
Dentro dos métodos, trabalhamos
como se estivéssemos usando
uma LP imperativa.
Agora estamos prontos para
entrar no mundo da OO
Programação Orientada a Objetos -
60
Só não esqueçam de fazer
as listas de exercícios!
Programação Orientada a Objetos -
61