Erro no switch no java 1.3

5 respostas
E

Não entendi, tenho um código assim…

class Exemplo {

public void Metodo (int i) {

swicth (i) {

case 0: {

System.out.println(case 0);

break;

}

case 1: { throw new ExceptionA("");}

case 2: { throw new ExceptionB("");}

case 9: { throw new ExceptionC("");}

}

}

}

para i = 0 o último case é sempre executado!?!? Se comentar o case 9, o case 2 será executado, ou seja, só resolvi quando alterei o controle de decisão de switch para if

if (i == 0) {…}

if (i == 1) {…}

if (i == 2) {…}

if (i == 9) {…}

no java 1.5 funciona perfeitamente, mas não posso mudar a versão na empresa.

Onde estou errando?
Atenciosamente, obrigado.

5 Respostas

L
Experimente o código abaixo:
class Exemplo {
    public void Metodo (int i) {
        swicth (i) {
            case 0: 
                System.out.println("case 0");
                break;

            case 1: 
                throw new ExceptionA("");
                break;

            case 2: 
                throw new ExceptionB("");
                break;

            case 9: 
                throw new ExceptionC("");
        }
    }
}
E

Obrigado pela resposta, mas, o break após um throw torna-se um código inalcançável e nem chega a ser compilado.

kemperacc
lap_junior:
Experimente o código abaixo:
class Exemplo {
    public void Metodo (int i) {
        Exception ee = null;
        swicth (i) {
            case 0: 
                System.out.println("case 0");
                break;

            case 1: 
                ee = new ExceptionA("");
                break;

            case 2: 
                ee = new ExceptionB("");
                break;

            case 9: 
                ee =  new ExceptionC("");
                break;
        }
        if (ee!=null){
             throw ee;
       }
    }
}
A
swicth (i) {

case 0:

System.out.println(“case 0”);

break;
case 1: 
             ee = new ExceptionA("");
             break;

         case 2: 
             ee = new ExceptionB("");
             break;

         case 9: 
             ee =  new ExceptionC("");
             break;
         default: {}
     }
O

Em qual a versão da JVM 1.3 que dá o erro? A titulo de curiosidade, fiz este teste:

public class Exemplo {
  public static void metodo (int i) {
    switch(i) {
      case 0: {
                System.out.println("Case 0");
                break;
              }
      case 1: { throw new NullPointerException("Case 1");}
      case 2: { throw new NullPointerException("Case 2");}
      case 9: { throw new NullPointerException("Case 9");}
    }
  }

  public static void main (String[] args) {
    try {
      int x = 0;
      Exemplo.metodo(x);
    } catch (Exception e) {
		e.printStackTrace();
      }
  }
}

Rodei no JDK 1.3.1_08 da Sun no Windows XP e o resultado foi que só printou “Case 0”.
Será que não tem algum erro de abrir e fechar os “{” e “}” no seu código original? Acredito que você não tenha feito um copy/paste do seu código, pois switch está escrito errado no seu post original.

Criado 23 de novembro de 2006
Ultima resposta 24 de nov. de 2006
Respostas 5
Participantes 5