TA345/531 TP257 Informática Aplicada à Engenharia de Alimentos.


 

Aula 03 – Parte B: Seletores e laços

 

3.3. O seletor switch

 

Um mecanismo comum para substituição de ifs que pode ser usado para um grupo de testes e ações junto a um simples agrupamento chama-se switch.

 

A estrutura de controle switch é uma estrutura de seleção que nos permite considerar múltiplas decisões. A estrutura switch poderia ser representada como: switch (Expressão) Instrução.

 

Na realidade, a estrutura comporta várias definições de “cases” (casos) que determinam as instruções que serão executadas.

 

Exemplo 3 - MenuTecla:

 

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

 

/*

<APPLET CODE="MenuTecla.class" WIDTH=400 HEIGHT=400></APPLET>

*/

 

public class MenuTecla extends Applet implements KeyListener

{

  public Label legenda1, legenda2, legenda3;

  public TextField caixa1, caixa2, caixa3;

  public TextArea ta;

  public Button botaoLimpa;

  double A,B;

  char opçao;

 

  public void keyPressed(KeyEvent e) { }

  public void keyReleased(KeyEvent e) { }

 

  public void init( )

  {

     legenda3 = new Label ("Digite o símbolo da operação (+,-,* ou /):"); add(legenda3);

     caixa3 = new TextField (" ", 1); add (caixa3);   caixa3.addKeyListener(this);

   

     legenda1 = new Label ("A =");    add (legenda1);

     caixa1 = new TextField("3", 2);  add (caixa1);

     legenda2 = new Label ("B =");    add (legenda2);

     caixa2 = new TextField("2", 2);  add (caixa2);

     ta = new TextArea("",1,25,TextArea.SCROLLBARS_NONE); add(ta);

  }

 

  public void keyTyped(KeyEvent e)

  {

      A=Double.valueOf(caixa1.getText()).doubleValue();

      B=Double.valueOf(caixa2.getText()).doubleValue();

     

      opçao = e.getKeyChar();

 

      switch (opçao)

      {

                case('+'): ta.setText(" A+B = "+String.valueOf(A+B)+"\n"); break;

                case('-'): ta.setText(" A-B = "+String.valueOf(A-B)+"\n"); break;

                case('*'): ta.setText(" A*B = "+String.valueOf(A*B)+"\n"); break;

                case('/'): ta.setText(" A/B = "+String.valueOf(A/B)+"\n"); break;

                default: ta.setText("Opção inválida");

      }

      caixa3.setText(" ");

   }

}

 

 

Exemplo 4 - menu2:

 

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

 

/*

<APPLET CODE=”Menu2.class” WIDTH=410 HEIGHT=120></APPLET>

*/

 

public class Menu2 extends Applet implements KeyListener

{

  public Label legenda1, legenda2, legenda3;

  public TextField caixa1, caixa2, caixa3;

  public TextArea ta;

  double A,B;

  char opcao;

 

  public void keyPressed(KeyEvent e) { }

  public void keyReleased(KeyEvent e) { }

 

  public void init( )

  {

      legenda3 = new Label ("Escolha a operação ( + , - , * , / ):"); add(legenda3);

      caixa3 = new TextField (" ", 1); add (caixa3);

      caixa3.addKeyListener(this);

 

      legenda1 = new Label ("A="); add (legenda1);

      caixa1 = new TextField("3", 2); add (caixa1);

      legenda2 = new Label ("B="); add (legenda2);

      caixa2 = new TextField("2", 2); add (caixa2);

      ta = new TextArea("",1,20,TextArea.SCROLLBARS_NONE); add(ta);

  }

 

  public void keyTyped(KeyEvent e)

  {

      ta.setForeground(Color.black);

 

      A=Double.parseDouble(caixa1.getText());

      B=Double.parseDouble(caixa2.getText());

 

      opcao = e.getKeyChar();

      switch (opcao)

      {

          case('+'):

             ta.setBackground(Color.green);

             ta.setText("A+B= "+String.valueOf(A+B)+"\n");  break;

          case('-'):

             ta.setBackground(Color.yellow);

             ta.setText("A-B= "+String.valueOf(A-B)+"\n");  break;

          case('*'):

             ta.setBackground(Color.red);

             ta.setText("A*B= "+String.valueOf(A*B)+"\n");  break;

          case('/'):

             ta.setBackground(Color.white);

             ta.setText("A/B= "+String.valueOf(A/B)+"\n");  break;

          case('%'):

             ta.setBackground(Color.magenta);

             ta.setText("A%B= "+String.valueOf(A%B)+"\n");  break;

          default:

             ta.setBackground(Color.black);

             ta.setForeground(Color.white);

             ta.setText("Opção inválida");

             break;

      }

      caixa3.setText(" ");

  }

}

 

 

O valor da tecla de entrada (o símbolo aritmético da operação aritmética) é comparado com o valor da tecla que correspondente a cada uma das quatro operações consideradas. Em caso positivo realiza a operação e depois disso passa a executar o comando break o qual suspende o processamento dentro do bloco switch.

Se a combinação de valores não for encontrada, o bloco default é executado. O comando default é opcional, então caso a opção não exista, o bloco do switch não executa nenhuma operação.

 

3.4. O laço for

 

A estrutura de controle for é uma estrutura de repetição expressa pela forma abaixo:

for (Instrução Inicial; Instrução de Teste; Instrução de Incremento);

 

As instruções, que aparecem separadas por ponto e vírgula, são expressões que controlam o laço, podendo cada uma delas ser opcional.

 

O loop em Java tem esta sintaxe:

 

for (inicialização; teste; incremento) {

bloco de comandos;

}

 

Você também pode incluir um comando simples, sendo assim não há necessidade da utilização de chaves.

 

Exemplo: Inicializa um Array de 10 elementos com “”;

 

 

String strArray[] = new String[10];

for ( I = 0; i< strArray. length; i++) strArray [i] =  “”;

 

Exemplo 5 – ExFor01:

 

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

 

/*<APPLET code="ExFor01.class" height=400 width=300></APPLET>*/

 

public class ExFor01 extends Applet implements ActionListener

{

     Label legenda1,legenda2,legenda3;

     TextField caixa1,caixa2,caixa3;

     Button botao;

     TextArea ta;

     double f,k;

     int Tmin, Tmax, dT;

 

     public void init()

     {

          legenda1 = new Label ("Digite a temperatura mínima:"); add(legenda1);

          caixa1 = new TextField("", 3); add (caixa1);

          legenda2 = new Label ("Digite a temperatura máxima:"); add(legenda2);

          caixa2 = new TextField("", 3); add (caixa2);

          legenda3 = new Label ("Digite o intervalo:"); add(legenda3);

          caixa3 = new TextField("", 3); add (caixa3);

          botao = new Button ("Clique aqui");  add(botao); botao.addActionListener(this);

          ta = new TextArea("",16,30);

          add(ta);

     }// fim da declaração dos construtores

 

     public void actionPerformed(ActionEvent e)

     {

        Tmin=Integer.valueOf(caixa1.getText()).intValue();

        Tmax=Integer.valueOf(caixa2.getText()).intValue();

        dT=Integer.valueOf(caixa3.getText()).intValue();

 

        if (e.getSource() == botao)

        {

            /* transformação de ºC para ºF apresentando o resultado na área de texto ta */

            ta.append("Tabela de conversão \n de Temperaturas\n");

            ta.append("==================\n");

            ta.append("ºC         ºF            K\n");

            ta.setBackground(Color.yellow);

            ta.setForeground(Color.blue);

 

            for (int i=Tmin;i<=Tmax;i=i+dT)

            {

               f = 1.8*i+32;

               k = i+273.15;

               ta.append(i+"      "+f+"       "+k+"\n");

            }

            ta.append("==================\n");

         } // fim do if

      } // fim do actionPerformed

 } // fim da classe ExFor01

 

 

Exemplo 6 – ExFor02:

 

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

 

/*<APPLET code=”ExFor02.class” height=380 width=370></APPLET>*/

 

public class ExFor02 extends Applet implements ActionListener

{

     Label l1,l2,l3, legenda1,legenda2,legenda3;

     TextField caixa1,caixa2,caixa3;

     Button botao;

     TextArea ta;

     Panel p1,p2,p3;

     double f,k;

     int Tmin, Tmax, dT;

 

     public void init()

     {

        setBackground (Color.white);

        setLayout(new BorderLayout());//Gerenciador de Layout

 

        p1 = new Panel();add ("North",p1);

        p1.setLayout(new FlowLayout());

        p1.setBackground(Color.white);

        l1 = new Label("Conversao de temperatura",Label.CENTER);

        l1.setForeground(Color.blue);/*Cor da letra*/  p1.add(l1);

       

        p2= new Panel(); add("Center",p2);

        p2.setLayout(new GridLayout(3,3,4,4));     

        legenda1 = new Label ("Temperatura minima:");  p2.add(legenda1);

        caixa1 = new TextField("0", 3);                                   p2.add (caixa1);

                                                                                                 p2.add(new Label(""));

        legenda2 = new Label ("Temperatura máxima:");  p2.add(legenda2);

        caixa2 = new TextField("60", 3);                                 p2.add (caixa2);      

                                                                                                 p2.add(new Label(""));

        legenda3 = new Label ("Intervalo:");                        p2.add(legenda3);

        caixa3 = new TextField("10", 3);                                 p2.add (caixa3);      

        botao = new Button ("Clique aqui");                        p2.add(botao);  botao.addActionListener(this);

 

        p3= new Panel();add("South",p3);             

        ta = new TextArea("",11,30);                                        p3.add(ta);

     }   // fim do init

 

     public void actionPerformed(ActionEvent e)

     {

        Tmin=Integer.valueOf(caixa1.getText()).intValue();

        Tmax=Integer.valueOf(caixa2.getText()).intValue();

        dT=Integer.valueOf(caixa3.getText()).intValue();

 

        if (e.getSource() == botao)

        {

          /* transformação de ºC para ºF apresntando o resultado em ta */

          ta.append("ºC         ºF            K\n");

          ta.setBackground(Color.yellow);

          ta.setForeground(Color.blue);

 

          for (int i=Tmin;i<=Tmax;i=i+dT)

          {

             f = 1.8*i+32;

             k = i+273.15;

             ta.append(i+"      "+f+"       "+k+"\n");

          } // fim do for

        } // fim do if

    } // fim do actionPerformed

 } // fim da classe

 

 

 

 3.5. Laço while() {}

 

 A estrutura de controle while é uma estrutura de repetição. Ela permite que o programador especifique uma ação que será repetida enquanto uma determinada condição permanecer verdadeira. O modelo para representar a estrutura tem a forma de:

 

while (expressão testada verdadeira) instrução;

 

while (expressão testada verdadeira)

{

   Instrução1;

   Instrução2;

   Instrução3;

}

 

A expressão  testada, entre parênteses, deve devolver um valor lógico (true ou false) para ser avaliado.

A ação ou a série de ações contidas nas instruções será executada enquanto a expressão retornar um valor verdadeiro (true).

 

Exemplo:

 

int count = 0;

while ( count < Array1.length && Array1[count] != 0)

{

array2[count] = (float) array1[count++];

}

 

Devemos considerar que, se a primeira avaliação de Expressão devolver um valor falso, as ações estabelecidas em Instrução nunca serão executadas.

Encontramos diversas situações de programação em que isso é absolutamente necessário. Para exemplificar, vamos examinar a classe abaixo:

 

import java.awt.*;

import java.applet.Applet;

 

public class InstrucaoWhile extends Applet

{

   int x;

   String a;

   Label texto;

   TextField va;

 

   public void init()

   {

            resize(200,80);

            Label texto = new Label("O valor de a é: ");  add(texto);

            String a = "";

            int x = 10;

 

              while (x>0)

            {

                        a = a+x;

                        x=x-1;

             }

            TextField va = new TextField (a.toString()); add(va);

    }

 

O resultado do programa é:

 

A instrução while(X>0), como se percebe, avalia se o valor de x é maior que zero. E, quando isso acontecer, o objeto String a é concatenado com o valor de x.

 

3.6. Laço do{} while()

 

A principal diferença entre o while e o do é que o teste condicional no caso do while é feito antes de se executar o código interno ao loop.

Desta forma, o que pode acontecer no while é que o loop pode não ser executado se a condição for falsa.

Já no laço do o corpo do loop é executado pelo menos uma vez, pois o teste de permanência é executado no fim do laço.

 

 do

 {

Instruções contidas dentro do bloco;

 }

 while (condição);

 

Observe a classe: 

 

import java.awt.*;

import java.applet.Applet;

 

public class InstrucaoDoWhile extends Applet

{

 

   int x;

   String a;

   Label texto;

   TextField va;

 

   public void init()

   {

            resize(200,80);

            Label texto = new Label("O valor de a é: ");  add(texto);

             String a = "";

            int x = 10;

 

            do

            {

                a = a + x;

                x = x - 1;

            }

            while (x>10);

 

            TextField va = new TextField (a.toString()); add(va);

     }

}

 

As linhas

a = a + x;

x = x - 1;

foram inicialmente executadas e, em seguida, a condição foi avaliada.

Como o valor de x não é maior que 10, a condição retorna falso, desarmando a estrutura.

Como conseqüência, o seguinte resultado seria produzido:

 

 

Note que os resultados dos exemplos while e do while são diferentes.

Que mudanças devemos fazer para que ambos apresentem o mesmo resultado? Veja o código abaixo:

 

import java.awt.*;

import java.applet.Applet;

 

public class InstrucaoDoWhile2 extends Applet {

 

   int x;

   String a;

   Label texto;

   TextField va;

 

   public void init()

   {

            resize(200,80);

Label texto = new Label("O valor de a é: ");  add(texto);

            String a = "";

            int x = 10;

 

            do

            {

                a = a + x;

                x = x - 1;

            }

            while (x>0);

 

            TextField va = new TextField (a.toString()); add(va);

   }

}

 

Observe que apenas mudamos a linha: while (x>10);

Para: while (x>0);

 

A condição é avaliada e, como o valor de x é maior que 0, o objeto String a é concatenado com o valor de x.

Com isso, temos neste exemplo, exatamente o mesmo resultado obtido no exemplo while.

 

 

 

Até a próxima!


  Volta para a página principal

Última atualização: 13/abril/2011