Estrutura Condicional em Java

Propaganda
Linguagem de Programação – 1
Estrutura Condicional em Java
O Java contém três tipos de instruções de seleção. A instrução if realiza uma
ação se uma condição for verdadeira ou pula a ação se a condição for falsa. A instrução
if... else realiza uma ação se uma condição for verdadeira e realiza uma ação
diferente se a condição for falsa. A instrução de seleção switch realiza uma de muitas
ações diferentes, dependendo do valor de uma expressão.
A instrução if é uma instrução de uma única seleção porque seleciona ou
ignora uma única ação (ou um único grupo de ações). A instrução if... else é
chamada instrução de seleção dupla porque seleciona entre duas ações diferentes (ou
grupos de ações). A instrução switch é chamada de instrução de seleção múltipla uma
vez que seleciona entre muitas ações diferentes (ou grupos de ações).
Instrução de uma única seleção
A instrução IF é uma instrução de controle de uma única entrada e uma única
saída.
Exemplo 1: verificar se um número fornecido pelo usuário é impar. Se for, exibir a
mensagem “O número _____ informado é ímpar”.
import javax.swing.JOptionPane;
public class impar {
public static void main(String args[]){
int numero;
numero = Integer.parseInt(JOptionPane.showInputDialog
("Digite um número"));
/*avalia se o número é impar
* ao verificar se o resto da divsão por 2
* é igual a 1
*/
if (numero % 2 == 1){
JOptionPane.showMessageDialog(null,
"O número "+numero+" é ímpar");
}
}
}
Exemplo 2: determinar o maior de dois números dados. Suponha que o primeiro deles é
o maior, armazenando-o em uma variável MAIOR e depois, compare se os maior
procurado é o segundo dos números dados, neste caso o conteúdo da variável MAIOR
deve ser alterado.
//importa para utilizar a classe Scanner
import java.util.*;
//o nome da nova classe
public class maior_de_dois {
//a função principal
public static void main(String args[]){
//declara entrada como Scanner, para ler do teclado
Scanner entrada = new Scanner(System.in);
//declara as três variáveis
int a, b, maior;
//exibe uma mensagem solicitando a digitação dos números
System.out.println("Digite dois números inteiros: ");
//armazena os números em a e b
a = entrada.nextInt();
http://erinaldosn.wordpress.com
2 – Estrutura Condicional
b = entrada.nextInt();
//atribui a para maior
maior = a;
//verifica se b é maior que a
if (b > a){
//se for, atribui b para maior
maior = b;
}
//exibe a mensagem com os dois valores digitados e o valor
de maior
System.out.printf("O maior dos números %d e %d é %d",
a,b,maior);
}
}
Exemplo 3: ordenar os conteúdos das variáveis X e Y. Só há necessidade de se realizar
alguma ação se o conteúdo de Y for maior que o conteúdo de X. Neste caso, deve-se
fazer a permuta dos conteúdos de X e de Y.
//para usar a classe Graphics
import java.awt.*;
//para usar a classe JApplet e JOptionPane
import javax.swing.*;
//classe principal
public class ordena extends JApplet{
//declaração de variáveis de instância
int X, Y;
//método para receber informações
public void init(){
//variáveis que receberão dados digitados pelo usuário
String num1, num2;
//variável auxiliar para ordenação
int AUX;
//atribui o valor digitado para num1 e num2
num1 = JOptionPane.showInputDialog(
"Digite o valor de X");
num2 = JOptionPane.showInputDialog(
"Digite o valor de Y");
//atribui num1 e num2 para X e Y
X = Integer.parseInt(num1);
Y = Integer.parseInt(num2);
//mostra os valores de X e Y na ordem que foram digitados
JOptionPane.showMessageDialog(null,
"Números digitados: X "+X
+" Y "+Y);
//verifica se X é maior que Y
if (X > Y){//se for
//atribui X para a variável auxiliar
AUX = X;
//atribui Y para X
X = Y;
/*Y receberá o valor de X
* que ficou armazenado
* na variável auxiliar
*/
Y = AUX;
}
}
public void paint(Graphics g){
super.paint(g);
//desenha um retângulo
g.drawRect(10, 10, 200, 30);
http://erinaldosn.wordpress.com
Linguagem de Programação – 3
//escreve os valores ordenados de X e Y
g.drawString("Números ordenados: X "+X
+" Y "+Y, 20, 30);
}
}
A instrução if de uma única seleção realiza uma ação indicada somente quando
a condição é true; caso contrário, a ação é pulada.
Instrução de seleção dupla
A instrução de seleção dupla if... else permite que o programação
especifique uma ação a realizar quando a condição é verdadeira e uma ação diferente
quando a condição é falsa.
Exemplo 1: a empresa XSoftwares Ltda. concedeu um bônus de 20% do valor do
salário a todos os funcionários com tempo de trabalho na empresa igual ou superior a
cinco anos, e 10% aos demais. Calcular e exibir o valor do bônus.
import javax.swing.JOptionPane;
public class bonus {
public static void main(String args[]){
//declaração das variáveis necessárias para a resolução do
problema
float salario, premio;
int tempo;
//leitura (entrada) dos valores com as conversões adequadas
salario = Float.parseFloat(JOptionPane.showInputDialog(
"Salário"));
tempo = Integer.parseInt(JOptionPane.showInputDialog(
"Tempo de empresa"));
//avalia a condição:
if (tempo >= 5){
//se o resultado for verdadeiro
premio = salario * 0.20f;
}
else{
//se o resultado for falso
premio = salario * 0.10f;
}
JOptionPane.showMessageDialog(null, "O valor do bônus é:
"+premio);
}
}
Exemplo 2: calcule a área de um triângulo, dados os comprimentos dos seus lados. Para
os números serem comprimentos dos lados de um triângulo, cada um deles precisa ser
menor que a soma dos outros dois.
//para usar a classe JOptionPane
import javax.swing.*;
//para formatar números reais
import java.text.DecimalFormat;
//classe principal
public class area_triangulo {
//função principal
public static void main(String args[]){
//num_real recebe o formato de número decimal
DecimalFormat num_real = new DecimalFormat ("0.000");
//declaração das variáveis
float x, y, z, area, semiper;
//atribuição dos valores para x, y e z
http://erinaldosn.wordpress.com
4 – Estrutura Condicional
x = Float.parseFloat(JOptionPane.showInputDialog(
"Digite o primeiro lado: "));
y = Float.parseFloat(JOptionPane.showInputDialog(
"Digite o segundo lado: "));
z = Float.parseFloat(JOptionPane.showInputDialog(
"Digite o terceiro lado: "));
//verifica se cada lado é menor que a soma dos outros dois
if ((x < y+z) && (y < x+z) && (z < x+y)){//se for
//acha o semiperímetro
semiper = (x + y + z)/2;
//calcula a área
area = (float)Math.sqrt(semiper*
(semiper-x)*(semiper-y)*(semiper-z));
//exibe a área no formato de num_real
JOptionPane.showMessageDialog(null,
"A área do triângulo é:
"+num_real.format(area));
}
else{//caso a verificação seja falsa
//exibe a mensagem informando que não é um triângulo
JOptionPane.showMessageDialog(null,
"Os valores não podem ser comprimentos
dos lados de um triângulo");
}
}
}
Operador condicional
O Java fornece o operador condicional ?:, que pode ser utilizado no lugar de
uma instrução if... else. Esse é o único operador ternário1 do Java. Juntos, os
operandos e o símbolo ?: formam uma expressão condicional.
O primeiro operando (à esquerda do ?) é uma expressão booleana2, o segundo
operando (entre o ? e :) é o valor da expressão condicional se a expressão booleana for
true, e o terceiro operando (à direita do :) é o valor da expressão condicional se a
expressão booleana for avaliada como false.
Exemplo: imprimir ‘Aprovado’ se a média do aluno for maior ou igual a 60, mas
imprimir ‘Reprovado’ se for menor que 60.
import java.util.Scanner;
public class mediaaluno {
public static void main(String args[]){
Scanner entrada = new Scanner(System.in);
float media;
System.out.print("Digite a média do aluno: ");
media = entrada.nextFloat();
System.out.println(media>=60 ? "Aprovado" : "Reprovado");
}
}
Instruções if... else aninhadas
Um programa pode testar múltiplos casos colocando instruções if... else
dentro de outras instruções if... else para criar instruções if... else
aninhadas.
1
2
Significa que ele recebe três operandos.
Uma condição que avalia um valor boolean – true ou false.
http://erinaldosn.wordpress.com
Linguagem de Programação – 5
Exemplo 1: receba três valores fornecidos pelo usuário que representarão os lados de
um triângulo. Verifique se os valores formam um triângulo e classifique esse triângulo
como:
a) Equilátero: três lados iguais.
b) Isósceles: dois lados iguais.
c) Escaleno: três lados diferentes.
Lembre-se de que, para formar um triângulo, nenhum dos lados pode ser igual a
zero, um lado não pode ser maior do que a soma dos outros dois.
import javax.swing.*;
public class triangulo {
public static void main (String args[]){
//declara as variáveis A, B e C
int A, B, C;
//inicializa as variáveis
A = Integer.parseInt(JOptionPane.showInputDialog("Lado
A"));
B = Integer.parseInt(JOptionPane.showInputDialog("Lado
B"));
C = Integer.parseInt(JOptionPane.showInputDialog("Lado
C"));
//verifica se os lados não são iguais a zero
if (A != 0 && B != 0 && C != 0){
//verifica se um lado não é maior que a soma dos
outros dois
if (A+B > C && A+C>B && B+C > A){
//verifica se todos os lados são diferentes
if (A != B && A != C && B != C){
JOptionPane.showMessageDialog(null,
"Escaleno");
}
//caso não sejam todos diferentes
else{
//verifica se todos os lados são iguais
if (A == B && B == C){
JOptionPane.showMessageDialog(null,
"Equilátero");
}
//caso não sejam todos iguais
else{
JOptionPane.showMessageDialog(null,
"Isósceles");
}
}
}
//caso a soma de dois lados não seja maior que um dos
lados
else{
JOptionPane.showMessageDialog(null, "Não forma
um triângulo");
}
}
//caso algum dos lados seja igual a zero
else{
JOptionPane.showMessageDialog(null, "Não forma um
triângulo");
}
}
}
http://erinaldosn.wordpress.com
6 – Estrutura Condicional
Exemplo 2: determine as raízes de uma equação do segundo grau. Sabendo que uma
quação ax2 + bx + c = 0 só tem raízes se b2–4ac
0. Além disso, para que ela
seja do segundo grau, deve-se ter a
0.
//para ler do teclado
import java.util.Scanner;
//para formatar número decimal
import java.text.DecimalFormat;
//programa
public class eqgrau2 {
//principal
public static void main(String args[]){
//declara entrada para ler do teclado
Scanner entrada = new Scanner(System.in);
//declara num_real para números decimais
DecimalFormat num_real = new DecimalFormat("0.0");
//declaração de variáveis
float a, b, c, x1, x2, delta;
//recebe os valores da equação
System.out.println("Digite os valores de a, b e c: ");
//atribui os valores às variáveis
a = entrada.nextFloat();
b = entrada.nextFloat();
c = entrada.nextFloat();
//verifica se o valor de a é diferende de 0
if (a != 0){//se for diferente de 0
//calcula o valor de delta
delta = (float)Math.pow(b, 2)-4*a*c;
//verifica se delta é maior ou igual a 0
if (delta >= 0){//se for
//calcula as raízes
x1 = (-b+(float)Math.sqrt(delta))/2*a;
x2 = (-b-(float)Math.sqrt(delta))/2*a;
//exibe o valor das raízes
System.out.println("Raízes da equação: "+
num_real.format(x1)+" e "+
num_real.format(x2));
}
//se delta não for maior ou igual a 0
else{
//exibe a mensagem
System.out.println("A equação dada não tem
raízes reais");
}
}
//se a for igual a 0
else{
//exibe a mensagem
System.out.println("A equação não é do segundo
grau");
}
}
}
Operadores lógicos
As instruções IF, IF... else, e outras, requerem uma condição para determinar
como continuar o fluxo de um programa de controle. O Java fornece operadores lógicos
para permitir que os programadores formem condições mais complexas combinando
condições simples.
http://erinaldosn.wordpress.com
Linguagem de Programação – 7
Operador E condicional (&&)
Se em algum ponto em um programa ambas condições precisam ser verdadeiras
antes de escolher certo caminho de execução, utilizamos o operador && (E condicional).
Expressão 1 Expressão 2 Expressão 1 && expressão 2
false
false
false
false
true
false
true
false
false
true
true
true
Operador OU condicional (||)
Se um programa quiser assegurar que qualquer uma ou ambas as condições
sejam verdadeiras antes de escolher certo caminho de execução, deve utilizar o operador
|| (OU condicional).
Expressão 1 Expressão 2 Expressão 1 || expressão 2
false
false
false
false
true
true
true
false
true
true
true
true
Operador E lógico booleano (&) e OU lógico booleano(|)
Esses operadores funcionam de modo idêntico aos operadores && e ||, com
uma exceção: os operadores lógicos booleanos sempre avaliam seus dois operandos.
OU exclusivo lógico booleano (^)
Uma condição simples que contém o operador OU exclusivo lógico booleano é
true se e somente se um de seus operandos for true e o outro for false. Se os dois
operandos forem true ou somente forem false, a condição inteira é false.
Expressão 1 Expressão 2 Expressão 1 ^ expressão 2
false
false
false
false
true
true
true
false
true
true
true
false
Operador de negação lógica (!)
O operador ! permite ao programador inverter o significado de uma condição. O
operador de negação lógica é um operador unário que tem apenas uma única condição
como um operando. O operador lógico de negação é colocado antes de uma condição
para escolher um caminho de execução se a condição original for false.
expressão !expressão
false
true
true
false
Estrutura de seleção múltipla
Uma estrutura de seleção múltipla escolha é uma estrutura de seleção que
funciona como um conjunto de opções para escolha. É também denominada estrutura de
seleção homogênea.
O Java oferece a instrução de múltipla seleção switch para realizar diferentes
ações baseadas nos possíveis valores de uma variável de inteiro ou expressão. Cada
http://erinaldosn.wordpress.com
8 – Estrutura Condicional
ação está associada com o valor de uma expressão integral constante (byte, short,
int ou char) que a variável ou expressão em que a switch é baseada pode assumir.
Exemplo: ler o código de um produto e exibir seu nome de acordo com a tabela a
seguir:
Código do produto Nome do produto
1
Caderno
2
Lápis
3
Borracha
Qualquer outro
Diversos
//para mostrar caixas de diálogo
import javax.swing.JOptionPane;
//programa
public class exibeproduto {
//principal
public static void main(String args[]){
//declaração de variáveis
int codigo;
String texto;
//atribuição do valor do código do produto
codigo = Integer.parseInt(JOptionPane.showInputDialog
("Digite o código do produto"));
//verifica o valor do código
switch (codigo){
//caso seja 1
case 1 :
//atribui a string à variável texto
texto = "O produto é caderno";
//interrompe o fluxo
break;
//caso seja 2
case 2:
//atribui a string à variável texto
texto = "O produto é lápis";
//interrompe o fluxo
break;
//caso seja 3
case 3:
//atribui a string à variável texto
texto = "O produto é borracha";
//interrompe o fluxo
break;
//caso o código não seja 1, 2 ou 3
default :
//atribui a string à variável texto
texto = "Diversos";
}
//exibe o conteúdo da variável texto
JOptionPane.showMessageDialog(null, texto);
}
}
Instrução break
O Java fornece a instrução break para alterar o fluxo de controle. A instrução
break ocasiona sua saída imediata da instrução. A execução continua com a primeira
instrução depois da instrução de controle.
http://erinaldosn.wordpress.com
Linguagem de Programação – 9
Exercícios
1. Preencha as lacunas:
a) A instrução __________ é utilizada para executar uma ação quando uma
condição for verdadeira e outra quando essa condição for falsa.
b) O Java requer que todas as variáveis tenham um __________.
c) A instrução __________ seleciona entre múltiplas ações com base nos possíveis
valores de uma variável ou expressão integrais.
d) O operador __________ pode ser utilizado para assegurar que duas condições
são verdadeiras antes de escolher certo caminho de execução.
2. Determine se cada uma das seguintes afirmações é verdadeira ou falsa. Se falso,
explique por que.
a) Um algoritmo é um procedimento para resolver um problema em termos das
ações a serem executadas e a ordem em que essas ações são executas.
b) Um conjunto de instruções dentro de um par de parênteses é chamado bloco.
c) Uma instrução de seleção especifica que uma ação deve ser repetida enquanto
algumas condições permanecem verdadeiras.
d) O pseudocódigo ajuda um programador a pensar sobre um programa antes de
tentar escrevê-lo em uma linguagem de programação.
e) O caso default é requerido na instrução de seleção switch.
f) A instrução break é necessária no último caso de uma instrução de seleção
switch.
g) A expressão ((x>y)&&(a<b)) é verdadeira se x>y for verdadeira ou a<b for
verdadeira.
h) Uma expressão contendo o operador || é verdadeira se um ou ambos de seus
operandos forem verdadeiros.
i) Para testar uma série de valores em uma instrução switch, utilize um hífen (–)
entre os valores inicial e final da série em um rótulo case.
3. Escreva instruções Java para realizar cada uma das seguintes tarefas:
a) Teste se a variável contador é maior do que 10. Se for, imprima
“Contador é maior que 10”.
b) Calcule o resto após q ser dividido por divisor e atribua o resultado a q.
c) Calcule o valor de 2.5 elevado à potência de 3, utilizando o método pow.
4. Escreva uma instução Java para realizar cada uma das seguintes tarefas:
a) Declare as variáveis soma e x que serão do tipo inteiro.
b) Atribua 1 à variável x.
c) Atribua 0 à variável soma.
d) Adicione a variável x à variável soma e atribua o resultado à variável soma.
e) Imprima “A soma é: ” seguido pelo valor da variável soma.
Bibliografia
Java: como programar
H. M. Deitel, P. J. Deitel
São Paulo: Pearson Prentice Hall, 2005
Estrutura de dados e algoritmos em Java
Michael Goodrich, Roberto Tamassia
Porto Alegre: Bookman, 2007
Lógica de programação e estrutua de dados, com aplicações em Java
Sandra Puga, Gerson Rissetti
http://erinaldosn.wordpress.com
10 – Estrutura Condicional
São Paulo: Pearson Prentice Hall, 2009
http://erinaldosn.wordpress.com
Download