Problema 1 · Programació II UDL Juny 2011
Tema: Diseño de clases y objetos en Java, herencia e igualdad · Del examen Juny (2011)
Enunciado
Problema 1 (3 puntos). Traza de ejecución con objetos Vector3D
Considérese la siguiente definición de clase en Java:
public class Vector3D {
private double x;
private double y;
private double z;
public Vector3D(double x, double y, double z) {
this.x = x; this.y = y; this.z = z;
}
public void add(Vector3D other) {
x += other.x; y += other.y; z += other.z;
}
public void normalize() {
double mag = Math.sqrt(x*x + y*y + z*z);
x = x/mag; y = y/mag; z = z/mag;
}
public static Vector3D mistery(Vector3D v1, Vector3D v2) {
Vector3D result = new Vector3D(v1.x, v1.y, v1.z);
v2.normalize();
result.add(v2);
return result;
}
public String toString() {
return "x=" + String.valueOf(x)
+ " y=" + String.valueOf(y)
+ " z=" + String.valueOf(z);
}
}
Y el siguiente fragmento de código que interactúa con ella:
1 Vector3D first = new Vector3D(1.0, 2.0, 3.0);
2 Vector3D second = new Vector3D(0.0, 0.0, 3.0);
3 Vector3D third = Vector3D.mistery(first, second);
4 println("first: " + first.toString());
5 println("second: " + second.toString());
6 println("third: " + third.toString());
Indique con precisión qué salida produce este código por pantalla. Para justificar la respuesta, muestre paso a paso el flujo de ejecución de los métodos invocados, señalando el estado y las referencias de cada objeto manipulado (variables locales del programa principal, parámetros, variables auxiliares y la referencia implícita this en las llamadas donde exista).

Solución
Según los criterios oficiales de corrección
println("first: " + first.toString());
Solución: first: x=1.0 y=2.0 z=3.0
println("second: " + second.toString());
Solución: second: x=0.0 y=0.0 z=1.0
println("third: " + third.toString());
Solución: third: x=1.0 y=2.0 z=4.0
Justifique de forma clara el seguimiento de objetos y referencias, mostrando paso a paso el flujo de ejecución de los métodos invocados.
Solución: Traza de ejecución detallada según solucionario: 1. Línea 1: Instanciación de first en memoria dinámica con x=1.0, y=2.0, z=3.0. 2. Línea 2: Instanciación de second con x=0.0, y=0.0, z=3.0. 3. Línea 3: Llamada a Vector3D.mistery(first, second): - Parámetros v1 y v2 reciben copias de las referencias first y second. - Se crea result con x=1.0, y=2.0, z=3.0. - v2.normalize(): this apunta al objeto de second. mag = sqrt(0^2+0^2+3^2) = 3.0. Se modifican sus atributos a x=0.0, y=0.0, z=1.0. - result.add(v2): this es result, other es v2. x=1.0+0.0=1.0, y=2.0+0.0=2.0, z=3.0+1.0=4.0. - Retorna result asignándose a third. 4. Líneas 4 a 6: Invocación de toString() en cada objeto.
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
‹ Problema 1 · 2011 · Problema 2 · Juny 2011 ›