mvnForum Homepage Bienvenido domingo  |  Terminar sesión   
  Búsqueda  
  Indice |  Temas Recientes |  Quién Está en Línea |  Lista de Usuarios |  Mi Perfil |  Búsqueda |  Ayuda


Ir a »
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
Tema Anterior Este tema ha sido visto 94 veces y tiene 8 respuestas Tema Siguiente
Femenino rlp
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 2
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este Tema]

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.
[Jul 13, 2004 12:18:22 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Femenino mmfd
Extranjero



Ingresó: Apr 20, 2004
Mensajes: 3
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

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.
[Jul 13, 2004 1:01:23 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino nacho
Miembro



Ingresó: Feb 1, 2004
Mensajes: 63
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

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.
[Jul 13, 2004 1:53:30 PM] Print Post    iiborra@dccia.ua.es Reportar mensaje ofensivo  Ir al inicio 
Masculino miquelsi
Extranjero



Ingresó: Jun 20, 2004
Mensajes: 11
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

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.
[Jul 13, 2004 4:35:39 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino jlgs
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 7
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

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 biggrin.
[Jul 13, 2004 8:15:30 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino xavivars
Extranjero



Ingresó: May 10, 2004
Mensajes: 14
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

A més, fixa't que quan captures l'excepció siga del tipus NumeroNaturalException i no NumeroNatualException, com posa en algun lloc dels apunts. biggrin
[Jul 13, 2004 9:21:07 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino nacho
Miembro



Ingresó: Feb 1, 2004
Mensajes: 63
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Ok, me doy por aludido en la errata de "NumeroNatualException" biggrin Ya lo he corregido en el enunciado.

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.
[Jul 13, 2004 9:50:32 PM] Print Post    iiborra@dccia.ua.es Reportar mensaje ofensivo  Ir al inicio 
Femenino rlp
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 2
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Mi error era en efecto separar las clases en fichero distintos, todo solucionado. Muchas gracias.
[Jul 14, 2004 11:26:34 AM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino miquelsi
Extranjero



Ingresó: Jun 20, 2004
Mensajes: 11
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Error inesperado... Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Idem, ya esta todo arreglado. Gracias.
[Jul 14, 2004 6:22:18 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
[Versión imprimible] [Publicar nuevo tema]