620 likes | 732 Views
Statements básicos na linguagem Java Prof. Ricardo Linden. 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:
E N D
Statements básicos na linguagem Java Prof. Ricardo Linden Programação Orientada a Objetos - aula 3
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 - aula 3
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 decontrole Programação Orientada a Objetos - aula 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 - aula 3
Statements Condicionais • Uma statementcondicionalpermite 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
A condição deve ser uma expressão booleana. Ele deve retornar um valor verdadeiro ou falso. if é uma palavra reservada do Java Se a condição for verdadeira, o statement é executado. Se for falsa, o statement é “saltado”. O statement if • O statement if tem a seguinte sintaxe: if ( condição ) statement; Programação Orientada a Objetos - aula 3
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 - aula 3
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! condição avaliada true false statement Lógica de um statement if : Resto do Programa : Programação Orientada a Objetos - aula 3
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 - aula 3
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 - aula 3
condição avaliada true false statement1 statement2 Lógica de uma statement if-else Note que os caminhos não se cruzam - logo statement1 e statement2 não podem ser executadas juntas, dada a mesma condição : Resto do Programa : Programação Orientada a Objetos - aula 3
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 - aula 3
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 - aula 3
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
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 - aula 3
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 - aula 3
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 - aula 3
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
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 - aula 3
Porque objetos são ponteiros. Se nós os compararmos, estaremos vendo se apontam para o mesmo lugar. Porque? 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. Programação Orientada a Objetos - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
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 Comparando valores em ponto flutuante Programação Orientada a Objetos - aula 3
O statement switch • O statementswitchfornece 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
O statement switch • 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 case sao palavras reservadas Java Se a expressão casa com valor2, o fluxo de controle salta para cá. Programação Orientada a Objetos - aula 3
O statement switch • Freqüentemente, um statementbreak é 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 - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
Statements de Repetição • Statements de repetiçãonos 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 - aula 3
A condição deve ser uma expressão booleana. Ele deve retornar um valor verdadeiro ou falso. while é uma palavra 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. O statement while • O statementwhile tem a seguinte sintaxe: while ( condição ) statement; Programação Orientada a Objetos - aula 3
condição avaliada true 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 statement Lógica de um loop while Programação Orientada a Objetos - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
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 - aula 3
condição avaliada true true Loop mais interno : cada vez que entramos no loop mais externo, executamos este loop n vezes Lógica dos loops aninhados false condição avaliada false statement Programação Orientada a Objetos - aula 3
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 - aula 3
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 - aula 3
O statement é executado uma vez e depois a condição é avaliada. O processo se repete até que a condição se torne falsa. O Statement do • O statementdo tem a seguinte sintaxe: do { statement; } while ( condição ) Usa as palavras reservadas do e while Programação Orientada a Objetos - aula 3
statement 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. true condição avaliada false Lógica de um loop do Programação Orientada a Objetos - aula 3
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 - aula 3
Outro 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
A porção de initialização é executada uma vez quando o loop começa Palavra Reservada O statement é executado até que a condição se torne falsa A porção incremento é executada ao fim de cada iteração O Statement for • O statementfor tem a seguinte sintaxe: for ( initialização ; condição ; incremento ) statement; Programação Orientada a Objetos - aula 3
Logo, como no caso do while, o corpo do loop pode executar 0 ou n vezes! O Statement for • Um loop for é equivalente à seguinte estrutura do loop while: initialização; while ( condição ) { statement; incremento; } Programação Orientada a Objetos - aula 3