|
Indice | Temas Recientes | Quién Está en LÃnea | Lista de Usuarios | Mi Perfil | Búsqueda | Ayuda |
![]() |
mvnForum » Listar todos los foros » Foro: Curso PLJ » Tema: Error inesperado... |
Total de mensajes en este tema: 9 |
[Eliminar este Tema]
[Mover este Tema] [AÅadir a Mis Favoritos] [AÅadir un aviso a este tema] [Publicar nuevo tema] |
Autor |
|
![]() Extranjero
|
En la sesion 6, en el ejercicio 11.c, en la linea de código 'throw new NumeroNatualException("La division no es natural");' me da el siguiente error compilando en Eclipse: "No enclosing instance of type Ej1 is accessible. Must qualify the allocation with an enclosing instance of type Ej1 (e.g. x.new A() where x is an instance of Ej1)." Este error se soluciona haciendo que el método divide(...) no sea static. Pero a juzgar por los ejercicios no parece que debiera darnos este tipo de error. ¿Es correcto modificar divide(...) como he dicho para que funcione? ¿o no deberÃa aparecerme ese error? En ese caso, ¿qué tengo mal? Mi código: public class Ej1 { public class NumeroNaturalException extends Exception { public NumeroNaturalException(String mensaje) { super(mensaje); } } public static int divide (int dividendo, int divisor) throws NumeroNaturalException { if (divisor == 0) throw new IllegalArgumentException ("Divisor incorrecto"); if (dividendo < 0 || divisor < 0) throw new NumeroNaturalException("La division no es natural"); return dividendo / divisor; } public static void main (String[] args) { String param1=null, param2=null; int dividendo=0, divisor=0; try { dividendo = Integer.parseInt(args[0]); divisor = Integer.parseInt(args[1]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Faltan parametros"); System.exit(-1); } catch (NumberFormatException e2) { System.out.println ("Formato incorrecto del parametro"); System.exit(-1); } try { System.out.println ("Resultado: " + divide(dividendo, divisor)); } catch (IllegalArgumentException e3) { e3.printStackTrace(); } catch (NumeroNaturalException e4) { System.out.println ("Error: " + e4.getMessage()); System.exit(-1); } } } Muchas gracias. |
||
|
![]() Extranjero
|
Hola! Te has creado una clase con la excepción y otra con el ejemplo?? Natural...Exception.java y Ej1.java??? Las compilas por separado y ya está, bueno al menos asà lo he hecho yo. Pero no he utilizado el eclipse. Espero que te sirva de algo. |
||
|
![]() Miembro
|
Hola. Lo que dice mmfd es correcto. Tu error es que no puedes tener dos clases públicas ("public class") dentro de un mismo fichero .java, y menos aún una metida dentro de otra, como tienes en el código. Siempre que hay una segunda clase auxiliar en un fichero .java, no es "public", sino simplemente "class". La public sólo es la principal, la que se llama igual que el fichero. En cualquier caso, lo mejor es que separes siempre que puedas las clases Java en ficheros independientes, para evitarte lÃos de este tipo. Pruébalo y si sigue dándote problemas nos lo dices. Un saludo! Nacho. |
||
|
![]() Extranjero
|
Hola, a mi tambien me ha dado un error inesperado el throws. Al crear la excepcion NumeroNaturalException, sigue sin reconocerme las llamadas a esta excepcion. Tengo un fichero NumeroNaturalException.java y otro Ej1.java, cuyo codigo es: package modulo2.sesion6; public class Ej1 { public static int divide (int dividendo, int divisor) throws NumeroNaturalException { if (divisor == 0) throw new IllegalArgumentException ("Divisor incorrecto"); if (dividendo < 0 || divisor < 0) throw new NumeroNatualException("La division no es natural"); return dividendo / divisor; } public static void main (String[] args) { String param1=null, param2=null; int dividendo=0, divisor=0; try { dividendo = Integer.parseInt(args[0]); divisor = Integer.parseInt(args[1]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Faltan parametros"); System.exit(-1); } catch (NumberFormatException e2) { System.out.println ("Formato incorrecto del parametro"); System.exit(-1); } catch (IllegalArgumentException e3) { e3.printStackTrace(); } catch (NumeroNaturalException e4) { System.out.println ("Error: " + e4.getMessage()); System.exit(-1); } System.out.println("Resultado: " + divide(dividendo, divisor)); } } Alguien me puede decir por que me da estos errores??: 1. NumeroNatualException cannot be resolved or is not a type 2. Unreachable catch block for NumeroNaturalException. This exception is never thrown from the try statement body 3. Unhandled exception type NumeroNaturalException Gracias. |
||
|
![]() Extranjero
|
Lo que te ocurre es que capturas mal las excepciones, lo que deberias hacer es que los errores que ocurren en el metodo divide capturarlos en otro try, es decir que las excepciones IllegalArgumentException y NumeroNatualException debes capturarlas despues de llamar a divide. Espero que te aclare algo ![]() |
||
|
![]() Extranjero
|
A més, fixa't que quan captures l'excepció siga del tipus NumeroNaturalException i no NumeroNatualException, com posa en algun lloc dels apunts. ![]() |
||
|
![]() Miembro
|
Ok, me doy por aludido en la errata de "NumeroNatualException" ![]() En cuanto a los errores que te dan, es posible que sea por 3 causas: - Por mi metedura de pata (al poner mal el nombre de la clase en algunas partes del enunciado). FÃjate que pones siempre "NumeroNaturalException", y no "NumeroNatualException" como me ha pasado a mÃ. - Porque no encuentre la clase "NumeroNaturalException". En este caso, asegúrate de que el classpath contiene el directorio actual (donde tengas las clases). Aunque si lo estás haciendo desde un proyecto en Eclipse, esto no deberÃa darte problemas. - Como te dice jlgs, capturas mal las excepciones. La excepcion NumeroNaturalException la debes capturar cuando llames a "divide", no en otra parte, como tienes tú. Prueba a poner tu método "main" asÃ: public static void main (String[] args) { String param1=null, param2=null; int dividendo=0, divisor=0; try { dividendo = Integer.parseInt(args[0]); divisor = Integer.parseInt(args[1]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Faltan parametros"); System.exit(-1); } catch (NumberFormatException e2) { System.out.println ("Formato incorrecto del parametro"); System.exit(-1); } //--------------------------------------- try { System.out.println("Resultado: " + divide(dividendo, divisor)); } catch (IllegalArgumentException e3) { e3.printStackTrace(); } catch (NumeroNaturalException e4) { System.out.println ("Error: " + e4.getMessage()); System.exit(-1); } } Es decir, cuando tomas los parámetros de entrada y los pasas a entero capturas dos tipos de excepciones: ArrayIndexOutOfBounds e NumberFormat. Luego, cuando llamas a "divide" capturas otros dos, que son los que divide puede generar: IllegalArgument y NumeroNatural. Espero que se te solucione el problema con esto. |
||
|
![]() Extranjero
|
Mi error era en efecto separar las clases en fichero distintos, todo solucionado. Muchas gracias. |
||
|
![]() Extranjero
|
Idem, ya esta todo arreglado. Gracias. |
||
|
[Versión imprimible] [Publicar nuevo tema] |