Java - AYUDAA Encontrar errores en fragmento de código de java

 
Vista:

AYUDAA Encontrar errores en fragmento de código de java

Publicado por megasonic (2 intervenciones) el 31/05/2021 06:44:32
En el siguiente código de java ¿Qué mensaje se de error se mostraría?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
X x = new X();
try {
x.Metodo2();
} catch (ExceptionM e) {
System.out.println("Atrapado acá " + e.Message);
} catch (Exception e) {
System.out.println("Atrapado aquí " + e.Message);
} finally {
System.out.println("Error");
}
class X
{
public void Metodo1(){
throw new Exception("Metodo1");
}
public void Metodo2() {
throw new ExceptionM("Metodo2");
Metodo1();
}
}
class ExceptionM extends Exception
{
public ExceptionM(string m) {
super("ExceptionM " + m);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDAA Encontrar errores en fragmento de código de java

Publicado por Kabuto (978 intervenciones) el 31/05/2021 11:52:08
A ver....
Aquí la palabra string está mal escrita, ha de comenzar con mayúscula y por tanto el programa ni siquiera compilaría.

1
2
3
public ExceptionM(string m) {
super("ExceptionM " + m);
}

Pero supongo que no es esto lo que el ejercicio pide detectar.


Esto tampoco lo admitirá el compilador. e.Message no existe

1
2
3
4
} catch (ExceptionM e) {
System.out.println("Atrapado acá " + e.Message);
} catch (Exception e) {
System.out.println("Atrapado aquí " + e.Message);

Lo correcto es la llamada al método e.getMessage()
Pero supongo que tampoco es esto lo que hay que detectar.

Otro error, que impediría la compilación, son los métodos de la clase X:

1
2
3
4
5
6
7
public void Metodo1(){
throw new Exception("Metodo1");
}
public void Metodo2() {
throw new ExceptionM("Metodo2");
Metodo1();
}

Lanzan excepciones, vale, pero cuando un método lanza una excepción, ha de indicarlo en su firma:
1
2
3
4
5
6
7
public void Metodo1() throws Exception{
throw new Exception("Metodo1");
}
public void Metodo2() throws ExceptionM {
throw new ExceptionM("Metodo2");
Metodo1();
}

Una vez más, creo que no es esto lo que el ejercicio pretende que solucionemos.
Pero lo comento, por si a caso...


A ver, si se ejecutase este programa.
Se instancia la clase x y se llama su método 2
1
x.Metodo2();

Este método lanza una excepción y luego llama a método 1.
1
2
3
4
public void Metodo2() {
throw new ExceptionM("Metodo2");
Metodo1();
}

Esa llamada a metodo1 jamás va a ocurrir porque cuando se lanza la excepción, se pone fin al metodo2.
De hecho, creo que aquí el compilador también se quejaría de que la línea donde se llama Metodo1(); es "código inalcanzable" y tendríamos otro error de compilación. Pero esto no es lo que importa.

La cuestión es que se estaría lanzando una ExceptionM pasándole el mensaje "Metodo2" por constructor.

El constructor de ExceptionM, recoge este mensaje y lo concatena con su nombre de clase:
1
2
3
public ExceptionM(string m) {
super("ExceptionM " + m);
}

Por tanto, ahora mismo esta excepción ha sido lanzada con el mensaje "ExceptionM Metodo2"

Esta excepción la capturaría este catch

1
2
3
} catch (ExceptionM e) {
System.out.println("Atrapado acá " + e.Message);
}

Quien concatena el mensaje de la excepción con otro texto y lo imprime en pantalla, quedando así:
1
Atrapado acá ExceptionM Metodo2

Por último, hay un finally que actúa tras haberse capturado la excepción y también imprime un texto en pantalla:
1
2
3
} finally {
System.out.println("Error");
}

Así que si se ejecuta este programa (tras corregir todos los errores que he comentado impedirían compilar), en pantalla tendríamos este mensaje:
1
2
Atrapado acá ExceptionM Metodo2
Error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDAA Encontrar errores en fragmento de código de java

Publicado por megasonic (2 intervenciones) el 31/05/2021 21:11:03
muy buena respuesta muchas gracias por tu ayuda, pero tengo otro fragmento de código que tiene error no se si me podrías ayudar seria el siguiente:
1
2
3
4
5
6
7
8
9
10
11
public class B
{
int [] integerArray = new int [100];
int cantidad=0;
int cantMax=100;
public void metodo (int valor)
{
integerArray [cantidad-1]= integerArray[cantidad*2] /(valor – 1);
++cantidad;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDAA Encontrar errores en fragmento de código de java

Publicado por Kabuto (978 intervenciones) el 31/05/2021 23:42:27
Tu mismo párate a pensar si es posible hacer esta asignación...
1
integerArray [cantidad-1]= integerArray[cantidad*2] /(valor – 1);
teniendo en cuenta la variable cantidad comienza con valor 0:
1
int cantidad=0;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar