switch em Java
Guarde o número inteiro 2 sob o nome choice. Monte um switch que liste case 1, case 2 e case 3, cada um com o próprio println, mais um default. Quando você compila e executa, a tela deve mostrar mid — uma linha — porque case 2 combina. É isso que esta página ensina: um valor, vários rótulos fixos, um caminho escolhido.
Um valor, vários rótulos fixos
Crie um arquivo de programa pequeno chamado Dial.java. A public class da primeira linha deve coincidir com o nome do arquivo: public class Dial. Não deixe uma classe Gate ou Mint antiga neste arquivo; o compilador espera que o nome da classe e o nome do arquivo batam.
Dentro de main, guarde um número inteiro antes do switch:
int choice = 2;
Essa linha não escreve nada. Só dá ao nome choice o valor 2. choice começa com c minúsculo. Não há aspas em volta de 2. O ponto e vírgula termina a linha de guarda. Depois vem o switch em si:
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
A palavra switch é minúscula. Dentro dos parênteses fica o nome choice — o valor que o Java vai comparar com cada rótulo case. Cada linha case termina com dois-pontos, não com ponto e vírgula. Sob case 2 fica System.out.println("mid"); depois a palavra break e um ponto e vírgula. Quando choice guarda 2, o Java entra em case 2, imprime mid, encontra break e sai do switch inteiro. case 3 e default não rodam nesta execução. Salve o arquivo antes de compilar.
Programa que imprime mid
Esta é a versão que você compila primeiro. choice é 2, então o rótulo que combina é case 2.
public class Dial {
public static void main(String[] args) {
int choice = 2;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
Na pasta que contém Dial.java, execute javac Dial.java. Quando as chaves, os parênteses e os dois-pontos batem, o javac não escreve nenhuma linha por conta própria. Depois execute java Dial — não java Dial.java. Tire o final .java do segundo comando. Os mesmos dois comandos funcionam no Windows e no macOS; esta página não depende de uma ortografia de shell diferente para nenhum dos sistemas. O programa deve imprimir mid e parar. Não deve esperar você digitar. Se o terminal ficar esperando entrada do teclado, uma chamada nextLine de um exercício antigo ainda está no arquivo. Apague essa chamada e mantenha o int mais o switch acima. Uma linha errada na tela não significa que você precisa reinstalar o JDK.
Por que mid e não low ou high? Porque o valor entre parênteses era 2, e case 2 é o rótulo que combina. O Java não imprime o dígito 2 nesta execução, a menos que você escreva um println para esse dígito. Ele imprime o que o println executa sob o case correspondente. Os parênteses seguram o valor comparado. Cada rótulo case aqui é um número inteiro fixo. break termina o switch para que os cases seguintes fiquem quietos. default espera valores que não combinam com nenhum case — fica sem uso enquanto choice for 2.
Quando nenhum case combina
Mude só o valor guardado:
int choice = 9;
Deixe a estrutura do switch como está. Agora nenhum de case 1, case 2 ou case 3 combina. O Java vai para default e executa System.out.println("none");. A tela deve mostrar none, uma linha.
public class Dial {
public static void main(String[] args) {
int choice = 9;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
Compile e execute de novo: javac Dial.java, depois java Dial. Você deve ver none. Você não reescreveu as linhas case — só o valor sob choice mudou. Depois de ver none, você pode colocar int choice = 2; de volta para voltar à primeira demo. As duas versões são Java válido. Elas ensinam a mesma forma de switch com um case correspondente e com default.
Leia a execução de default mais uma vez em ordem. choice guarda 9. switch (choice) começa. case 1 não combina. case 2 não combina. case 3 não combina. O controle continua em default. println("none") executa. Uma linha na tela. O dígito 9 em si nunca aparece, a menos que você o imprima de propósito.
break interrompe os cases seguintes
break não é enfeite. Sem ele, o Java pode continuar executando as linhas do próximo case depois de uma combinação. Essa queda (fall-through) surpreende iniciantes. Aqui vai uma demo curta que esquece break de propósito depois de case 2 — mantenha-a em uma tentativa separada, ou leia com cuidado antes de compilá-la como arquivo principal:
public class Dial {
public static void main(String[] args) {
int choice = 2;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
Com choice igual a 2 e sem break sob case 2, a tela pode mostrar mid em uma linha e high na seguinte. case 2 combinou, imprimiu mid, depois caiu em case 3 e imprimiu high. As primeiras demos de ensino mantêm break sob cada case para que cada caminho escreva exatamente uma linha. Coloque break de volta antes de tratar Dial.java outra vez como o arquivo de lição guardado.
Regras que mantêm os rótulos claros
Parênteses em volta do valor comutado são obrigatórios. Escrever switch choice { … } sem parênteses faz o javac falhar. Cada rótulo case nesta página é uma constante inteira: case 1:, case 2:, case 3:. Dois-pontos seguem o rótulo. Escrever case 2; com ponto e vírgula em vez de dois-pontos não é a forma que esta lição compila. default não tem valor depois dele — só default: e então as linhas para «nada combinou».
switch não é a mesma ferramenta que if. if (ready) faz uma pergunta verdadeiro-ou-falso. switch (choice) combina um valor com uma lista de rótulos fixos. Não escreva switch (ready) com um boolean e espere a mesma forma de lição de Gate.java. Mantenha as demos desta página em um int chamado choice e rótulos case inteiros. Comparações como if (score > 10) ainda pertencem a if quando você precisa de um intervalo; switch brilha quando os valores são discretos e conhecidos de antemão.
Uma confusão comum é imprimir a própria sintaxe: System.out.println("switch (choice)");. Isso escreve os caracteres switch (choice). Não escolhe nenhum case. Outra confusão é deixar uma demo if / else de Gate no mesmo main e se perguntar por que a tela mostra pass em vez de mid. O main desta sessão deve guardar só o int e o switch.
📊 choice e a tela
| choice | Tela |
|---|---|
| 1 | low |
| 2 | mid |
| 3 | high |
| 9 | none |
Use a tabela como verificação depois de uma execução, não no lugar de uma. choice 2 com a primeira demo imprime mid. choice 9 com a segunda demo imprime none. choice 1 imprime low. choice 3 imprime high. Se mid e high aparecerem os dois para choice 2, falta um break sob case 2 — corrija os break em vez de reinstalar o Java.
O que você pode fazer agora
Você pode guardar um número inteiro, colocá-lo em switch (…), e dar a cada valor fixo o próprio case com um println e um break. Quando um case combina, essa linha roda; quando nada combina, default roda. A próxima página é for, onde o mesmo bloco de linhas pode rodar de novo e de novo enquanto um contador muda.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo