Examen de Prueba Final UCV v3 PDF
Examen de Prueba Final UCV v3 PDF
Examen de Prueba Final UCV v3 PDF
1) Cuestiones
1.a) (0.75 puntos) Mostrar los contenidos del fichero salida.txt tras la ejecución del
método main de la clase principal:
/**
* Clase MiClase
*/
import java.util.*;
public MiClase() {}
/**
* Clase principal
*/
import java.io.*;
import java.util.*;
Página 1/16
Examen resuelto
Solución:
[{0,[null, null]}, {4,[uno, dos]}]
1.b) (0.75 puntos) Escribir la salida por consola obtenida con la ejecución de la siguiente
línea de código:
PropagaExcepción.método1();
Escribir también la salida que se obtendría si la excepción lanzada fuera
NumberFormatException en lugar de ArrayIndexOutOfBoundsException y si no
se lanzara ninguna excepción.
La clase PropagaExcepción es:
public class PropagaExcepción {
Página 2/16
Examen resuelto
Solución:
Lanza ArrayIndexOutOfBoundsException:
1.1
2.1
3.1
3.3
2.3
2.5
1.3
1.4
Lanza NumberFormatException:
1.1
2.1
3.1
3.3
2.4
2.5
1.2
1.4
No lanza excepción:
1.1
2.1
3.1
3.2
3.3
2.2
2.5
1.2
1.4
1.c) (0.75 puntos) ¿Cuál sería la salida por consola producida por este código? Indicar en
qué instrucciones se produce la creación de objetos.
String str1="hola";
String str2=str1;
str1.toUpperCase();
str1=str1+"hola";
System.out.println("String1:"+str1+" String2:"+str2);
Solución:
Salida por consola:
String1:holahola String2:hola
Creación de objetos:
String str1="hola"; <- se crea el objeto "hola"
String str2=str1;
str1.toUpperCase(); <- se crea el objeto "HOLA"
str1=str1+"hola"; <- se crea el objeto "holahola"
System.out.println("String1:"+str1+" String2:"+str2); <- se crea
el objeto "String1:holahola String2:hola"
Página 3/16
Examen resuelto
1.d) (0.75 puntos) Suponer que se ejecuta el método main de la clase CreaciónYBasura.
Indicar claramente las instrucciones en que se produce la creación de objetos y también las
instrucciones que causan que un objeto se convierta en "basura".
Solución:
public class CreaciónYBasura {
Página 4/16
Examen resuelto
que permite realizar la lectura de un fichero de texto que contiene un conjunto de puntos
(uno por línea) y retorna esos puntos en un ArrayList.
El formato del fichero es el mostrado a continuación:
Punto (3.45, -34.02 )
Punto ( -2.3 ,3.0)
Punto (4.56,23.14)
...
Aclaraciones al formato:
• El número de espacios entre la palabra "Punto" y el paréntesis abierto es variable (uno o
más)
• Puede haber espacios entre el paréntesis abierto y el primer número, antes o después de
la coma y antes del paréntesis cerrado.
El fichero puede contener errores de formato. Cuando se encuentre una línea con un error de
formato se introducirá en el ArrayList un punto en el que sus coordenadas x e y tengan el
máximo valor que es posible almacenar en un double. Después de encontrar una línea
errónea el método no debe finalizar, sino que deberá continuar procesando las restantes
líneas del fichero.
La clase Punto es:
Página 5/16
Examen resuelto
try {
if (str!=null) {
// procesa la línea. Como el tratamiento de todos
// los errores es el mismo, usa el manejador de
// NumberFormatException para todos
Página 6/16
Examen resuelto
Registra Entrada
Registra Salida
Comienza mes
empleado del
aparcamiento
Pagos de residentes
Página 7/16
Examen resuelto
La aplicación contará con un programa principal basado en menú que permitirá al empleado
interactuar con la aplicación (dicho programa principal se supone encargado a otro
programador, por lo que no deberá ser realizado por el alumno).
El alumno deberá desarrollar las clases que permitan gestionar los vehículos con sus datos
asociados (estancias, tiempo, ...), las listas de vehículos registrados como oficiales y
residentes, etc.
Se pide:
• diseño arquitectónico de la parte de la aplicación encargada al alumno
• código de las clases correspondientes a la parte de la aplicación encargada al alumno
Para obtener la fecha y hora actual se utiliza la clase Calendar:
Calendar unaFecha; // para almacenar una fecha
...
unaFecha=Calendar.getInstance(); // obtiene la fecha actual
Para obtener intervalos de tiempos entre dos fechas suponer que se dispone del método:
/** Obtiene la diferencia en minutos entre dos fechas
* @param inicial fecha inicial
* @param final fecha final
* @return diferencia final-inicial en minutos
*/
private static int difEnMinutos(Calendar inicial,
Calendar final) {...}
Página 8/16
Examen resuelto
Solución:
Diseño arquitectónico:
Vehículo
matrícula:Texto Estancia
horaEntrada:Hora horaEntrada:Hora
horaSalida:Hora
Vehículo(matrícula)
getMatrícula() retorna Texto Estancias(horaEntrada, horaSalida)
getHoraEntrada() retorna Hora getHoraEntrada() retorna Hora
comienzaMes() getHoraSalida() retorna Hora
finEstancia()
comienzaEstacia() estancias
0..*
tiempoAcumulado:Entero
getEstancias()
finEstancia() pagoMes() retorna Real retorna Lista
comienzaMes() comienzaMes()
pagoEstancia()
finEstancia() finEstancia()
retorna Real
getTiempoAcumulado()
retorna Entero 0..*
0..* oficiales
residentes
Aparcamiento
aparcados:Lista Vehiculo
oficiales:Lista VehiculoOficial
residentes:Lista VehículoResidente
Aparcamiento()
registraOficial(matrícula:Texto)
registraResidente(matrícula:Texto)
entra(matrícula:Texto)
sale(matrícula:Texto)
comienzaMes()
generaInformePagosResidentes(nomFich)
Página 9/16
Examen resuelto
import java.util.*;
/**
* Vehículo abstracto. Superclase de las clases de vehículos
* reales
*/
public abstract class Vehiculo {
import java.util.*;
/**
* Vehículo no residente. Debe pagar la estancia al salir.
*/
public class VehiculoNoResidente extends Vehiculo {
@Override
public void finEstancia() {
// calcula la cantidad a pagar
Página 10/16
Examen resuelto
pagoEstancia =
difEnMinutos(getHoraEntrada(),Calendar.getInstance())
* precioMinuto;
}
import java.util.Calendar;
import java.util.LinkedList;
/**
* Vehículo oficial. Lleva la lista de las estancias
* en el aparcamiento realizadas en el mes en curso
*/
public class VehiculoOficial extends Vehiculo {
@Override
public void comienzaMes() {
estancias.clear(); // borra la lista de estancias
}
@Override
public void finEstancia() {
// añade la estancia a la lista
estancias.add(
new Estancia(getHoraEntrada(),Calendar.getInstance()));
}
import java.util.Calendar;
/**
* Vehículo de residente. Lleva la cuenta del tiempo
* de estancia acumulado en el mes en curso
Página 11/16
Examen resuelto
*/
public class VehiculoResidente extends Vehiculo {
@Override
public void comienzaMes() {
// pone a 0 el tiempo acumulado
tiempoAcumulado=0;
}
@Override
public void finEstancia() {
// incrementa el tiempo acumulado en la duración de
// la estancia que finaliza en este instante
tiempoAcumulado +=
difEnMinutos(getHoraEntrada(),Calendar.getInstance());
}
import java.util.*;
import java.io.*;
/**
* Gestiona el aparcamiento
*/
public class Aparcamiento {
Página 12/16
Examen resuelto
/**
* Busca el coche con la matrícula indicada en la
* lista de vehículos oficiales
* @param matrícula matrícula del vehículo buscado
* @return el vehículo o null en caso de que no lo encuentre
*/
private VehiculoOficial buscaOficial(String matrícula) {
for(VehiculoOficial v:oficiales) {
if (v.getMatrícula().equals(matrícula))
return v;
}
return null;
}
/**
* Busca el coche con la matrícula indicada en la
* lista de vehículos de residentes
* @param matrícula matrícula del vehículo buscado
* @return el vehículo o null en caso de que no lo encuentre
*/
private VehiculoResidente buscaResidente(String matrícula) {
for(VehiculoResidente v:residentes) {
if (v.getMatrícula().equals(matrícula))
return v;
}
return null;
}
/**
* Busca el coche con la matrícula indicada en la
* lista de vehículos aparcados
* @param matrícula matrícula del vehículo buscado
* @return el vehículo o null en caso de que no lo encuentre
*/
private Vehiculo buscaAparcado(String matrícula) {
for(Vehiculo v:aparcados) {
if (v.getMatrícula().equals(matrícula))
return v;
}
return null;
}
/**
* Añade el coche con la matrícula indicada a la lista de
Página 13/16
Examen resuelto
* vehículos oficiales
* @param matrícula matrícula del nuevo coche oficial
* @throws VehiculoYaRegistrado ya existe un coche con
* esa matrícula en la lista
*/
public void registraOficial(String matrícula)
throws VehiculoYaRegistrado {
VehiculoOficial v = buscaOficial(matrícula);
if (v!=null)
throw new VehiculoYaRegistrado();
v = new VehiculoOficial(matrícula);
oficiales.add(v);
}
/**
* Añade el coche con la matrícula indicada a la lista de
* vehículos de residentes
* @param matrícula matrícula del nuevo coche de residente
* @throws VehiculoYaRegistrado ya existe un coche con
* esa matrícula en la lista
*/
public void registraResidente(String matrícula)
throws VehiculoYaRegistrado {
VehiculoResidente v = buscaResidente(matrícula);
if (v!=null)
throw new VehiculoYaRegistrado();
v = new VehiculoResidente(matrícula);
residentes.add(v);
}
/**
* Un vehículo entra al aparcamiento
* @param matrícula matrícula del coche que entra
* @throws VehiculoYaAparcado ya existe un coche con esa
* matrícula dentro del aparcamiento
*/
public void entra(String matrícula)
throws VehiculoYaAparcado {
Vehiculo v = buscaAparcado(matrícula);
if (v!=null) {
// error: ya existe un coche dentro del aparcamiento
// con esa matrícula
throw new VehiculoYaAparcado();
}
Página 14/16
Examen resuelto
/**
* Un vehículo sale del aparcamiento
* @param matrícula matrícula del vehículo que sale
* @return el vehículo que sale para que, si es necesario,
* puedan consultarse sus datos (pago, estancias, ..)
* @throws VehiculoNoAparcado si la matrícula no corresponde
* a ningún vehículo aparcado
*/
public Vehiculo sale(String matrícula)
throws VehiculoNoAparcado {
Vehiculo v = buscaAparcado(matrícula);
if (v==null) {
// error: el vehículo debería estar en el aparcamiento!!
throw new VehiculoNoAparcado();
}
return v;
}
/**
* Pone a 0 los registros de todos los vehículos
*/
public void comienzaMes() {
for(VehiculoResidente v: residentes)
v.comienzaMes();
for(VehiculoOficial v: oficiales)
v.comienzaMes();
}
/**
* Genera un informe con los pagos que deben realizar los
* residentes
* @param nomFich fichero en el que se escribe el informe
* @throws IOException error de E/S
*/
public void generaInformePagosResidentes(String nomFich)
throws IOException {
PrintWriter sal = null;
Página 15/16
Examen resuelto
try {
sal = new PrintWriter(new FileWriter(nomFich));
import java.util.*;
/**
* Estancia de un vehículo oficial
*/
public class Estancia {
Página 16/16