/**
*
* @author Daniel
*
* @param <T>
*/
public class DynamicArray<T> {
Object[] vector;
//Constructor de la clase
public DynamicArray() {
vector = new Object[0];
}
//Devuelve el tamaño del array
public int tamaño() {
return vector.length;
}
//Devuelve el valor con ese índice
public T obtener(int índice) {
final T t = (T)vector[índice];
return t ;
}
// Redimensiona el array dandole un a nueva posicion con el argumento frase
public void agregar(T frase) {
Object aux[] = new Object[vector.length + 1];
for (int x = 0; x < vector.length; x++) {
aux[x] = vector[x];
}
aux[vector.length] = frase;
vector = aux;
}
// Borra en una posición indicada y redimensiona el array
public void borrar(int posicion) {
if(posicion>=0&&posicion<vector.length) {
if ((vector.length - 1) != posicion) {
for (int i = posicion; i < (vector.length - 1); i++) {
vector[i] = vector[i + 1];
}
}
Object aux[] = new Object[vector.length - 1];
for (int i = 0; i < aux.length; i++) {
aux[i] = vector[i];
}
vector = aux;
}else {
//Ejecuta la excepcion apropiada si posicion se sale de los límites
throw new ArrayIndexOutOfBoundsException("Has sobrepasado los límites del array");
}
}
}
////Clase principal
/**
*
* @author Daniel
*
*/
public class Prueba {
public static void main(String[] args) {
DynamicArray<Integer> a = new DynamicArray<Integer>();
//Añadimos en el array
for(int i=0;i<10;i++) {
a.agregar(i);
}
//Mostramos lo agregado
for (int i = 0; i<a.tamaño();i ++) {
System.out.println("Dentro: "+a.obtener(i));
}
//Borramos una posición
a.borrar(1);
System.out.println("borrando...");
//Capturamos la excepción ya que sale de los límites
try {
Thread.sleep(100);
a.borrar(99);
} catch (ArrayIndexOutOfBoundsException | InterruptedException e ) {
System.err.println(e.getMessage());
}
//Mostramos el array redimensionado desues de borrar
for (int i = 0; i<a.tamaño();i ++) {
System.out.println("Dentro: "+a.obtener(i));
}
}
}
Comentarios sobre la versión: 3.0 (1)
Sugiero eliminar los comentarios obvios (e.g. Constructor, que el metodo tamano devuelve el tamano)
Menos bloques facilitan la lectura.
En la funcion borrar, pon la condicion de excepcion al inicio y elimina el else.
if(condicion problematica) {
throw new ...
}
<las instrucciones cuando el parametro esta bien>
El comentario indica que se "Ejecuta la excepcion apropiada", pero parece mejor decir que se arroja la excepcion, aunque pensandolo mejor, es algo obvio si se lee el codigo, mejor eliminar ese comentario.
En el programa de test, una vez que borras deberias comprobar al menos 2 cosas:
- que el tamano es menor
- que el elemento que borraste ya no esta.
Pero esto se comprueba en el programa mismo, no mostrando el resultado en la salida.
Dicho de otra forma, si tu programa inserta 5 elementos y borra 1, el programa mismo puede comprobar que hay 4 despues de borrar, no tienes que mostrarle al usuario los 4 elementos para que el compruebe si esta bien. No esta mal mostrarlo, pero parece mejor hacer que tu mismo programa de prueba detecte los errores, si es que los hay.
Deberias borrar uno por uno todos los elementos, para probar que no importa el tamano, la funcion borrar siempre funciona.
Dice "desues", creo que quisiste decir "despues"