Olá:
Quero apresentar-lhes um pequeno programa e fazer umas considerações sobre ele. Num loop while infinito ele aprsenta um diálogo perguntando se quer continuar ou não. Se clicar em “sim” o loop continua; se clicar em “não” ou em “cancela” ele sai do loop. Segue-se o código:
import javax.swing.JOptionPane;
public class TestaReturn {
public static void main(String args[]) {
while(true){
int opcao = JOptionPane.showConfirmDialog(null, "Continua?");
if((opcao == JOptionPane.NO_OPTION) ||
(opcao == JOptionPane.CANCEL_OPTION)) {
System.exit(0); // linha 1
//break; // linha 2
//return; // linha 3
}
}
//System.out.println("Saiu do while"); // Aviso
//System.exit(0); // Linha A
//return; // Linha B
}
}
:arrow: Do jeito como está, o programa compila normalmente e termina normalmente quando sai do loop. Mas sem imprimir o aviso.
:arrow: Se a linha 1 ou a 3 estiverem descomentadas e se o aviso e/ou as linhas A ou B estiverem descomentadas o compilador (seja javac ou jikes) solta o seguinte erro: “unreachable statement”.
:?: Como o Compilador pode determinar o que está ou não “unreachable”? Ele verifica pelas ocorrências de “System.exit(0)” ou de “return” e determina que o que vier depois não terá efeito?
:arrow: Se a linha 2 e o aviso estiverem descomentados, a compilação é normal. Ao sair do while, o aviso é impresso. Mas o programa não é concluído. Tenho que terminá-lo na “marra”. Mesmo se descomentar a linha B isso acontece. Só com a linha A descomentada (e a B comentada) o programa é terminado normalmente.
:?: Alguém tem idéia de como concluir o programa normalmente sem ter que “forçar a barra” com System.exit(0)?
Grato,
)