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!
Última atualização: 13/abril/2011