[RESOLVIDO]Problema com trecho de código que nunca será executado
12 respostas
J
joaozinho33
Bom dia!
Considerem o exemplo abaixo:
while(false){
//fazqualquercoisa
}
Isso aí nem compila pois é um trecho de código que nunca será executado. Mas reparem no código abaixo:
privatevoidmenuListaConta(){inttipo=menuTipoConta("Listar Contas");switch(tipo){case1:listaContaCorrente();break;case2:listaContaPoupanca();break;case0:return;default:System.out.println("Valor invalido. Tente novamente.");}}privateintmenuTipoConta(StringmenuAtual){System.out.print(menuAtual+" - Digite o tipo de conta: (1)Conta corrente (2)Conta poupanca (0)Sair: ");while(true){inttipo=leitor.leInteger();// Método que só aceita valores inteiros do teclado e os retorna.if((tipo==1)||(tipo==2)||(tipo==0))returntipo;elseSystem.out.println("Valor invalido. Tente novamente.");}}
1 - while indica um trecho de código que irá se repetir ATÉ QUE a condição imposta torne-se falsa.
2 - switch/case/default indica trechos de código que irão ser executados de acordo com o valor do parâmetro passado.
J
joaozinho33
Se eu tirar o default é considerado má prática de programação?
darlan_machado
Não.
J
joaozinho33
Ok, entendi.
Obrigado!
darlan_machado
Obviamente você já deve ter ouvido ou lido (senão, logo irá) sobre “if bom é if morto”.
O teu código tem um if
Que não precisaria existir e, isso sim, é uma má prática.
Veja que a regra é redundante, você valida uma coisa e depois valida de novo no switch.
É uma opção tua, mas, o ideal é eliminar ifs que dependem de regras específicas.
J
joaozinho33
É que “int tipo = leitor.leInteger()” recebe um valor qualquer inteiro, mas eu só quero 0, 1 ou 2. Então o método “menuTipoConta” só vai retornar um desses três valores. Depois, em “menuListaConta” eu trato adequadamente cada um dos três casos.
Qual seria o jeito mais adequado?
darlan_machado
E, mantendo o default, trata os casos que não atenderem ao que espera.
J
joaozinho33
Não sei se entendi bem, mas você sugere que eu não use “menuTipoConta”. Que eu faça a leitura direto dentro de “menuListaConta”? Só que aí eu vou ter que colocar um while(true) encapsulando o switch para que o usuário fique em loop até digitar um dos três valores válidos.
Eu pensei que você falava para eu usar algo como:
if(tipo>=0&&tipo<=2){
returntipo;
}
darlan_machado
Veja, eu não sei qual a tua necessidade, porém, eu não colocaria o if, sendo que você tem a validação no switch.
Apenas isso.
J
joaozinho33
Minha necessidade é bem específica. Só isso que eu te disse. Vou fazer do jeito que você sugeriu então. Se é que eu entendi corretamente.
Sou novo em programação. Nesse caso eu estava encarando o if como validador e o switch como seletor.
darlan_machado
O switch é uma adaptação do if, para evitar que você crie muitos ifs aninhados.