Olá!
Estou tendo dificuldade para entender a função de switch/case. Poderiam me dá um exemplo de como funciona ? (em código)
Obrigado!
Olá!
Estou tendo dificuldade para entender a função de switch/case. Poderiam me dá um exemplo de como funciona ? (em código)
Obrigado!
[quote=hackum]Olá!
Estou tendo dificuldade para entender a função de switch/case. Poderiam me dá um exemplo de como funciona ? (em código)
Obrigado![/quote]
É uma estrutura de decisão, assim como o if/else. Basicamente seu formato é este:
switch(decisao){
case 1:
(...)
break;
case 2:
(...)
break;
default:
(...)
break;
}
No exemplo acima, se o valor da variável decisao fosse 1, ele entraria no bloco do “case 1”, se fosse 2, entraria no bloco do “case 2”, e se não fosse de nenhum dos dois, entraria no bloco do “default”. Você não só pode usar inteiros como também caracteres. Por exemplo:
switch(decisao){
case 'a':
(...)
há este artigo aqui [ http://www.tiexpert.net/programacao/java/switch-case-default.php ], bem mais detalhado que minha explicação.
ficou claro?
É parecido com a função do SE.
Digamos que você vai digitar o número do mês e ele irá imprimir o mês referente ao número digitado, ficaria assim.
Exemplo:
switch(3){
caso 1 imprima janeiro
caso 2 imprima fevereiro
caso 3 imprima março
… e assim por diante, veja que dentro do switch tem o número 3 então ele vai verificar os cases de acordo com o número do switch … case/caso seja 1 imprima janeiro, 2 fevereiro, 3 março. como dentro do switch tem o número 3 então vai cair no mês de março. quando se usa case/switch é sempre bom colocar um break dentro dos case para que ele não saia imprimindo todos os meses que tem depois do mês escolhido.
}
Olá, Andre Rosa!
Obrigado por sua explicação, não entendi completamente, mas estou entendendo sim, a função de switch!
Mas… qual é a diferença dele do if…else. Por que ter duas função que façam a mesma coisa ? Provavelmente tem alguma diferença. No caso, qual é?
Abraços!
[quote=hackum]Olá, Andre Rosa!
Obrigado por sua explicação, não entendi completamente, mas estou entendendo sim, a função de switch!
Mas… qual é a diferença dele do if…else. Por que ter duas função que façam a mesma coisa ? Provavelmente tem alguma diferença. No caso, qual é?
Abraços![/quote]
[quote=hackum]Olá, Andre Rosa!
Obrigado por sua explicação, não entendi completamente, mas estou entendendo sim, a função de switch!
Mas… qual é a diferença dele do if…else. Por que ter duas função que façam a mesma coisa ? Provavelmente tem alguma diferença. No caso, qual é?
Abraços![/quote]
Usando o switch o código fica mais legivel e mais limpo do que vc sair colocando um punhado de if e else mas ambos funcionam basicamente para a mesma coisa. Depende de cada caso.
Obrigado a todos que me responderam!
Bom, por exemplo, com o if…else, eu posso fazer uma comparação ou definir se um número é maior ou menor. Com o case é possível ? Ou ele só serve para a pessoa digitar um valor e aparecer o que esta no case ?
Se possível, mais exemplo, por favor.
Até mais…
Estrutura condicional if é usada para comparar expressões, variáveis e condições booleanas.
Para comparar multiplas condições o ideal é usar o else if.
Estrutura condicional switch funciona por meio da verificação de condições diversas ,as quais determinaram diversos casos.Realiza um unico teste,verificando condições numéricas(não booleanas)…
Vejamos essa classe:
//GradeBook.java
//Classe GradeBook utiliza instrução switch para contas as nota A, B, C, D, E, F.
import java.util.Scanner; //importa a classe Scanner
public class GradeBook {
private String courseName; //nome do curso que essa GradeBook representa
private int total; //soma das notas
private int gradeCounter; //número de notas inseridas
private int aCount; //contagem de notas A
private int bCount; //contagem de notas B
private int cCount; //contagem de notas C
private int dCount; //contagem de notas D
private int fCount; //contagem de notas F
//construtor inicializa courseName
public GradeBook(String name)
{
courseName = name;
}
//método para configurar o nome do curso
public void setCourseName(String name)
{
courseName = name;
}
//método para recuperar o nome do curso
public String getCourseName()
{
return courseName;
}
//exibe uma mensagem de boas-vindas para o usuário GradeBook
public void displayMessage()
{
System.out.printf("Bem vindo(a) a classe GradeBook! %s\n",getCourseName());
}
//insere número arbitrário de notas do usuário
public void inputGrades()
{
//cria Scanner para obter dados a partir da janela de comando
Scanner input = new Scanner(System.in);
int grade; //nota inserida pelo usuário
System.out.printf("Digite a nota ou <ctrl> d para sair.\n");
//faz o loop até o usuário inserir o indicador de fim do arquivo
while(input.hasNext())
{
grade = input.nextInt(); //lê a nota
total += grade; //adciona grade a total
++gradeCounter; //incrementa o número de notas
//chama o método para incrementar o contador adequado
incrementLetterGradeCounter(grade);
}
}
//adciona 1 ao contador adequado da nota especificada
public void incrementLetterGradeCounter(int grade)
{
//determina a nota que foi inserida
switch(grade / 10)
{
case 9: //nota estava entre 90
case 10: //e 100
++aCount; //incrementa aCount
break; //necessário para sair do switch
case 8: //nota estava entre 80 e 89
++bCount; //incrementa bCount
break; //sair do switch
case 7: //nota estava entre 70 e 79
++cCount; //incrementa cCount
break; //sai do switch
case 6: //nota estava entre 60 e 69
++dCount;
break;
default: //nota era menor que 60
++fCount;
break;
}
}
public void displayGradeReport()
{
System.out.println("\nVotação de relatório: ");
//se o usuário inseriu pelo menos uma nota
if(gradeCounter != 0)
{
double average = (double) total / gradeCounter;
System.out.printf("Total %d e graus: %d",gradeCounter, total);
System.out.printf("Classe média: %.2f\n",average);
System.out.printf("%s\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n",
"Número de alunos que receberam cada grau: \n",
"A: ",aCount,
"B: ",bCount,
"C: ",cCount,
"D: ",dCount,
"F: ",fCount);
}
else
System.out.println("Nenhuma nota foi inserida");
}
}
Não consigui entender o switch nesse caso!
Tente passar para if que irá entender.Dica, preste muita atenção nos comentarios…
switch(grade / 10)
{
case 9: //nota estava entre 90
case 10: //e 100
++aCount; //incrementa aCount
break; //necessário para sair do switch
case 8: //nota estava entre 80 e 89
++bCount; //incrementa bCount
break; //sair do switch
case 7: //nota estava entre 70 e 79
++cCount; //incrementa cCount
break; //sai do switch
case 6: //nota estava entre 60 e 69
++dCount;
break;
default: //nota era menor que 60
++fCount;
break;
}
}
Como assim ? nota estava entre 90 e 100 :
Passa esse código em if ? Não vou consiguir. Poderia passar para eu ver ?
[quote=hackum][code]
switch(grade / 10)
{
case 9: //nota estava entre 90
case 10: //e 100
++aCount; //incrementa aCount
break; //necessário para sair do switch
case 8: //nota estava entre 80 e 89
++bCount; //incrementa bCount
break; //sair do switch
case 7: //nota estava entre 70 e 79
++cCount; //incrementa cCount
break; //sai do switch
case 6: //nota estava entre 60 e 69
++dCount;
break;
default: //nota era menor que 60
++fCount;
break;
}
}
[/code]
Como assim ? nota estava entre 90 e 100 :
Passa esse código em if ? Não vou consiguir. Poderia passar para eu ver ?[/quote]
Consegue sim, se eu consigo por que vc não vai conseguir… E já começou bem (Como assim ? nota estava entre 90 e 100 )
Preste atenção nos comentários e no que eu expliquei acima.
if(90 > 100)
++aCount;
É mais ou menos isso ?
Mas, pq ele não colocou case: 90 e case: 100 ?
Me confundi todo… =/
[quote=hackum]
if(90 > 100)
++aCount;
É mais ou menos isso ?[/quote]
Quase, a nota tem que ser entre 90 e 100…
Olá hackum,
A instrução Switch é chamada de instrução de seleção multipla uma vez que seleciona entre muitas ações diferentes.
Vou postar um trecho de código para exemplo:
// Armazena a opção do usuário
int opcao;
String dia_semana;
switch(opcao)
{
case 0:
dia_semana = "Domingo";
break;
case 1:
dia_semana = "Segunda";
break;
case 2:
dia_semana = "Terça";
break;
case 3:
dia_semana = "Quarta";
break;
case 4:
dia_semana = "Quinta";
break;
case 5:
dia_semana = "Sexta";
break;
case 6:
dia_semana = "Sábado";
break;
}
A variavél opcao poderia ser um (byte, short, int ou char mas não long). O usuário digitaria uma opção e a variavel dia_semana assumiria um dos valores.
Espero ter ajudado
hackum
Pode parecer que eu estou sendo “chata”, mas quero que vc aprenda e só vai aprender certos conceitos se aprender os anteriores, vivo falando aqui, antes de aprender qualquer linguagem é fundamental aprender lógica de programação.
Pra vc entender esse exercício tem que entender primeiro os operadores logicos.
http://www.slideshare.net/aislan/aula-05-logica-de-programacao
Se estiver errada me desculpe, parece que vc não sabe ainda…
Se interessar nesse link tem uma apostila de lógica para baixar.http://www.guj.com.br/java/230067-qual-linguagem-estudar-/2#1181534
A questão, é que não estou entendendo o switch.
O switch não testa intervalos. O que esse código fez foi dividir grade por 10, numa divisão de inteiros, para que notas como 80,81,82,83,84,85,87,88 e 89, virassem simplesmente 8.
Com esse artifício, o switch então pode só testar a parte do número na casa das dezenas.
O switch é muito parecido com um if. Um switch assim:
switch (opcao) {
case 1:
fazAlgo();
break;
case 2:
case 3:
fazOutraCoisa();
break;
default:
fazUmaTerceiraCoisa();
break;
}
É equivalente ao if:
if (opcao == 1) {
fazAlgo();
} else if (opcao == 2 || opcao == 3) {
fazOutraCoisa();
} else {
fazUmaTerceiraCoisa();
}
Note que sem o break, o switch faz o que chamamos de “fall through”. Ou seja, ele entra na condição que estiver abaixo dele. O exemplo acima é um caso onde usamos fallthrough da maneira correta. Abaixo, mostro um exemplo onde um erro de programação pode gerar um comportamento inesperado:
switch (opcao) {
case 1:
fazAlgo(); //Ops, esqueceu do break
case 2:
fazOutraCoisa();
break.
default:
fazUmaTerceiraCoisa();
break;
}
Isso fica equivalente ao código:
if (opcao == 1) {
fazAlgo();
fazOutraCoisa();
} else (if opcao == 2) {
fazOutraCoisa();
} else {
fazUmaTerceiraCoisa();
}
Não há como testar condições mais complexas no switch. Intervalos por exemplo. Quanto a ser mais legível, também tenho minhas dúvidas.
Eu sempre preferi código com if, e o problema do break é um exemplo de como ele pode prejudicar a legibilidade.
Depois da existência do polimorfismo, o switch e ifs como esses praticamente desapareceram. Mas isso você só vai ver com um pouco mais de estudo na linguagem.
[quote=hackum][code]
switch(grade / 10)
{
case 9: //nota estava entre 90
case 10: //e 100
++aCount; //incrementa aCount
break; //necessário para sair do switch
case 8: //nota estava entre 80 e 89
++bCount; //incrementa bCount
break; //sair do switch
case 7: //nota estava entre 70 e 79
++cCount; //incrementa cCount
break; //sai do switch
case 6: //nota estava entre 60 e 69
++dCount;
break;
default: //nota era menor que 60
++fCount;
break;
}
}
[/code]
Como assim ? nota estava entre 90 e 100 :
Passa esse código em if ? Não vou consiguir. Poderia passar para eu ver ?[/quote]
Já que não conseguiu mesmo…
if ((nota >= 90 ) && (nota <= 100)) {
++aCount; //incrementa aCount
} else if((nota >= 80) && (nota <= 89)){
++bCount; //incrementa bCount
} else if((nota >= 70) && (nota <= 79)) {
++cCount; //incrementa cCount
} else if((nota >= 60) && (nota <= 69)){
++dCount;
} else {
++fCount;
}
Espero que ajude realmente…