Problema 1 · Programació II UDL 2011

Tema: Diseño de clases y objetos en Java, herencia e igualdad · Del examen Examen Segundo Parcial Curso 2011-2012 (2011)

Enunciado

Segundo parcial de Programación 2 (Curso 2011/2012)

A continuación se resumen algunas clases y métodos de la API estándar de Java disponibles para la resolución del examen:

StringTokenizer: constructores new StringTokenizer(String str) y new StringTokenizer(String str, String delims); métodos boolean hasMoreTokens() y String nextToken().

String: charAt(int index), substring(int begin, int end), equals(String other), equalsIgnoreCase(String other), indexOf(String s), indexOf(String s, int begin), toUpperCase(), toLowerCase(), trim().

Double e Integer: métodos de conversión estáticos Double.parseDouble(String s) e Integer.parseInt(String s).

FileReader: constructores y operaciones read(), close().

BufferedReader: new BufferedReader(FileReader reader), String readLine(), void close().

Math: métodos estáticos abs(double val), max(double val1, double val2), min(double val1, double val2).

Problema 1. Diseño e implementación de la clase Duration

Se requiere modelar e implementar una clase en Java denominada Duration concebida para almacenar y manipular magnitudes temporales compuestas por horas y minutos. Considérese la siguiente traza de ejecución como referencia del comportamiento esperado:

Duration d = new Duration(2, 15); // 2 horas y 15 minutos

int h = d.getHours(); // h vale 2

int m = d.getMinutes(); // m vale 15

double th = d.toHours(); // th vale 2.25

double tm = d.toMinutes(); // tm vale 135.0

d.add(new Duration(0, 50));

int h2 = d.getHours(); // h2 vale 3

int m2 = d.getMinutes(); // m2 vale 5

println(d.toString()); // Escribe 3:05

Duration d2 = Duration.add(d, new Duration(2, 10));

int h3 = d2.getHours(); // h3 vale 5

int m3 = d2.getMinutes(); // m3 vale 15

Especificaciones y consideraciones de diseño:

Codifique la clase Duration incluyendo el constructor y las operaciones públicas evidenciadas en el ejemplo precedente (nótese la presencia de una operación add modificadora de instancia y otra estática que devuelve un nuevo objeto).

Pueden declararse los atributos, constantes y métodos privados que se consideren oportunos para estructurar y clarificar la lógica interna.

Comportamiento del constructor: ante cualquier parámetro con valor estrictamente negativo, se tomará automáticamente 0. La cantidad de minutos suministrada puede superar el valor de 59, debiendo ajustarse adecuadamente.

Método toHours: debe devolver el equivalente en horas en formato decimal de doble precisión (por ejemplo, 15 minutos corresponden a 0,25 horas).

Método toString: devolverá la representación textual con el esquema horas:minutos, garantizando que el campo de los minutos conste siempre de dos cifras (con cero a la izquierda si es necesario).

Enunciado: Problema 1 · Programació II UDL 2011

Solución

Según los criterios oficiales de corrección

Problema 1. Codifique la clase Duration completa en Java según las especificaciones.

Solución: ```java public class Duration { private int hours; private int minutes; public Duration(int hours, int minutes) { int h = Math.max(0, hours); int m = Math.max(0, minutes); this.hours = h + (m / 60); this.minutes = m % 60; } public int getHours() { return this.hours; } public int getMinutes() { return this.minutes; } public double toHours() { return this.hours + (this.minutes / 60.0); } public double toMinutes() { return (this.hours * 60.0) + this.minutes; } public void add(Duration other) { if (other != null) { int totalMin = this.minutes + other.minutes; this.hours += other.hours + (totalMin / 60); this.minutes = totalMin % 60; } } public static Duration add(Duration d1, Duration d2) { int h1 = (d1 != null) ? d1.getHours() : 0; int m1 = (d1 != null) ? d1.getMinutes() : 0; int h2 = (d2 != null) ? d2.getHours() : 0; int m2 = (d2 != null) ? d2.getMinutes() : 0; return new Duration(h1 + h2, m1 + m2); } public String toString() { return this.hours + ":" + String.format("%02d", this.minutes); } } ```

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 · 2012 · Problema 1 · Juny 2011 ›

Más ejercicios de Diseño de clases y objetos en Java, herencia e igualdad