1 / 56

Controle de Fluxo

Controle de Fluxo. Marco Antonio. Introdução. Controle de fluxo inclui as seguintes situações: Declarações de if e switch Laços com break e continue Controle de exceções assent. Identação. if (exam.done()) if (exam.getScore() < 0.61) System.out.println("Try again."); else

renate
Download Presentation

Controle de Fluxo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Controle de Fluxo Marco Antonio

  2. Introdução • Controle de fluxo inclui as seguintes situações: • Declarações de if e switch • Laços com break e continue • Controle de exceções • assent

  3. Identação if (exam.done()) if (exam.getScore() < 0.61) System.out.println("Try again."); else System.out.println("Java master!");

  4. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 10; if (x < 0) { if (x == 11) { System.out.println("x é igual 11"); } elseif (x == x--) { System.out.println("x é menor que 11"); } } else System.out.println("x não é menor que 0"); } }

  5. Resultado • X não é menor que 10

  6. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 10; if (x <= x--) { if (x == 11) { System.out.println("x é igual 11"); } elseif (x == x--) { System.out.println("x é menor que 11"); } } else System.out.println("x não é menor que 0"); } }

  7. Resultado • x é menor que 11

  8. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 10; if (x <= --x) { if (x == 11) { System.out.println("x é igual 11"); } elseif (x == x--) { System.out.println("x é menor que 11"); } } else System.out.println("x não é menor que 0"); } }

  9. Resultado x não é menor que 0

  10. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 10; if (x < 0) if (x == 11) { System.out.println("x é igual 11"); } elseif (x == x--) { System.out.println("x é menor que 11"); } else System.out.println("x não é menor que 0"); } }

  11. Resultado • Não imprime nada...

  12. Teste publicclass Teste { publicstaticvoid main(String[] args) { booleanb = false; if (b = true) { System.out.println("b é verdadeiro"); } else { System.out.println("b é false"); } } }

  13. Teste publicclass Teste { publicstaticvoid main(String[] args) { int x = 0, y = 0, a = 1, z = 3; if (x > 3) y = 2; z += 8; a = y + x; } }

  14. Switch • Chaveamento de valores

  15. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 3; switch (x) { case 1: System.out.println("x vale 1"); break; case 2: System.out.println("x vale 2"); break; default: System.out.println("x é maior que 2"); break; } } }

  16. Resultado • x é maior que 2

  17. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 1; switch (x) { case 1: System.out.println("x vale 1"); break; case 2: System.out.println("x vale 2"); default: System.out.println("x é maior que 2"); break; } } }

  18. Resultado • x vale 1 • Altere o x para 2. • O que acontece? • Atenção para o break.

  19. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 2; switch (x) { case 1: System.out.println("x vale 1"); break; default: System.out.println("x é maior que 2"); break; case 2: System.out.println("x vale 2"); } } }

  20. Teste publicclass Teste { publicstaticvoid main(String[] args) { byte x = 1; switch x { case 1: System.out.println("x vale 1"); break; case 2: System.out.println("x vale 2"); default: System.out.println("x é maior que 2"); break; } } }

  21. Teste int x = 10;   switch (x) {   case 1: { ... }   case 2: { ... }   case 1: { ... }    // Erro de compilação: duplicate case label   }  

  22. Teste long x = 100;   switch (x) {   // Erro de compilação: possible loss of precision      case 1: { ... }   case 2: { ... }   }   • Mude o tipo de x para String.

  23. Teste final int op1 = 1;   final int op2 = 2;   int op3 = 3;   int opcao = 2;   switch (opcao) {   case op1: { ... }   // ok, op1 é final   case op2: { ... }   // ok, op2 é final   case op3: { ... }   // Erro de compilação: constant expression required   default: { ... }   } 

  24. Teste int x = 1;   switch (x) {   case 1: System.out.println("1");   default: System.out.println("default");   case 2: System.out.println("2");   case 3: System.out.println("3");   case 4: System.out.println("4");   } 

  25. Observações • Não tem break, imprime tudo.

  26. Teste publicclass Teste { publicstaticvoid main(String[] args) { int x = 3; switch (x) { case 1: System.out.println("1"); default: System.out.println("default"); case 2: System.out.println("2"); case 3: System.out.println("3"); case 4: System.out.println("4"); } } }

  27. Observações • Imprime 3 e 4.

  28. Teste publicclass Teste { publicstaticvoid main(String[] args) { finalint x = 2; for (int i = 0; i < 2; i++) { switch (i) { case x - 1: System.out.print("1 "); default: System.out.print("def "); case x: System.out.print("2 "); break; case x + 1: System.out.print("3 "); } } } }

  29. Qual a solução • a) Não será compiladob) def 2 def 2 1c) def 2 1 def 2d) def 2 1 def 1e) def 1 2 def 1

  30. Teste publicclass Teste { publicstaticvoid main(String[] args) { //int s = 9; for (int i = 0, s = 10; i < 10; i++) { System.out.println("" + (s + i)); } } }

  31. Teste publicclass Teste { publicstaticvoid main(String[] args) { for (int i = 0; i < 10 | (i % 2) == 0; i++) { System.out.println("" + i); } } }

  32. Atenção • Quando a condição for falsa o loop acaba.

  33. Teste publicclass Teste { publicstaticvoid main(String[] args) { int x = 0; for (int i = 0; i < 10; i++) { x = i; if (i == 3) break; System.out.println("i: " + x); } } }

  34. Break • O loop acaba depois do break.

  35. Continue • Altere o break para continue; • O que acontece? • O loop passar para o próximo i.

  36. Teste publicclass Teste { publicstaticvoid main(String[] args) { int x,i = 0; for (;;) { x = i; if (i == 3) continue; System.out.println("i: " + x); } } }

  37. Teste publicclass Teste { publicstaticvoid main(String[] args) { for (int x = 0; (x > 5), (y < 2); x++) { } } }

  38. Regra • O que devemos lembrar é que não podemos ter duas expressões de teste.

  39. Rótulos publicclass Teste { publicstaticvoid main(String[] args) { for (int i = 10; i < 20; i++) { aqui: for (int j = 1; j < 2; j++) { if (i % 2 == 0) continue aqui; //Números pares System.out.println(i); } } } }

  40. Exceções • O tratamento de exceções (não de erros) em java é bastante completo, permitindo um bom refinamento da aplicação.

  41. Try/catch block try {   // primeira linha vigiada   }   catch (Exception e) {   // primeira linha que será executada caso haja um exceção do tipo Exception   }   finally {   // bloco que será executado, havendo ou não uma exceção (sempre!)   } 

  42. Formas try {   }   catch (MyException e) {   }   • ?

  43. Formas try {   }   • ?

  44. Formas try {   }   finally {   }  • ? 

  45. Erros import java.io.*; publicclass Erros { publicstaticvoid main(String[] args) { metodoDoMal(); } publicstaticvoid metodoDoMal() { try { thrownew IOException("eu fiz um erro"); } catch (IOException e) { // códigoquesolucionará o problema } } }

  46. Erros package tjdf.sistj.assuntodaclassificacao.negocio; import java.io.*; publicclass Erros { publicstaticvoid main(String[] args) { metodoDoMal(); //Qual o problema? } publicstaticvoid metodoDoMal() throws IOException { thrownew IOException("eu fiz um erro"); } }

  47. Erros import java.io.*; import java.awt.print.*; public class Teste { public static void main(String[] args) { try { metodoDoMal(); } catch (IOException e) { } catch (PrinterException p) { } } static void metodoDoMal() throws IOException, PrinterException { metodoPiorAinda(); } static void metodoPiorAinda() throws PrinterException { } } //Tudo certo

  48. Erros import java.io.*; import java.awt.print.*; public class Teste { public static void main(String[] args) { try { metodoDoMal(); } catch (IOException e) { } } static void metodoDoMal() throws IOException { metodoPiorAinda(); //Aqui temos um problema... } static void metodoPiorAinda() throws PrinterException { } }

  49. RealData import java.io.*; publicclass ReadData { publicstaticvoid main(String args[]) { try { RandomAccessFile raf = new RandomAccessFile("myfile.txt", "r"); byte b[] = newbyte[1000]; raf.readFully(b, 0, 1000); } catch (IOException e) { System.err.println("IO Error"); System.err.println(e.toString()); e.printStackTrace(); } catch (FileNotFoundException e) { System.err.println("File not found"); System.err.println(e.getMessage()); e.printStackTrace(); } } }

  50. Hierarquia de classes • A sequência deve ser sempre da exceção mais especifica para a mais genérica, ou seja: a mais específica é FileNotFoundException, e a mais genérica é IOException.

More Related