Código
y la clase Banco asi
public class Cuenta { private double saldo ; private int cuenta ; setTitular(ti); setCuenta(c); setSaldo(s); } this(f,d,0.0); } public void ingreso(double s){ setSaldo(getSaldo() +s); } public void debito (double d){ setSaldo(getSaldo() - d); } return getTitular(); } public int cuenta (){ return getCuenta(); } public double s (){ return getSaldo(); } return "[(" + getTitular() + "/" + getCuenta() + ") ->" + getSaldo() + "]"; } return titular; } this.titular = titular; } public int getCuenta() { return cuenta; } public void setCuenta(int cuenta) { this.cuenta = cuenta; } public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } }
Código
private static final int NUMCTALIBRE=1001; private int ppl; private int unca; public Cuenta [] ctas,ctas2; if (b !=null && b != "" && un>0 ){ nombre=b; ppl = 0; unca=NUMCTALIBRE; ctas= new Cuenta[un]; for (int c=0;c<100;c++){ ctas[c]= new Cuenta ("",0,0); } } else { } for(int i=0;i<ctas.length;i++) { ctas= new Cuenta[i]; } } this(nom, NCTAS); } int p=0; if (p <= 99) { ctas[p]=new Cuenta (nombre,unca,n); p++; unca++; } else { ctas2= new Cuenta [2*ctas.length]; for (int j=0; j < ctas.length ; j++) { ctas2[j]=ctas[j]; } } return unca; } this.abrirCuenta(nom,10.0); return ctas[ppl].getCuenta(); } public int posicionCuenta (int n){ int i = 0; while (ctas[i].getCuenta()!=n){ i++; } if(i>ctas.length){ } else{ return i; } } public void cerrarCuenta(int n){ int j =posicionCuenta(n); for (int i=ppl; i>j;i--) { ctas[i-1].setSaldo(ctas[i].getSaldo()); ctas[i-1].setTitular(ctas[i].getTitular()); ctas[i-1].setCuenta(ctas[i].getCuenta()); } ctas[ppl].setTitular(""); ctas[ppl].setSaldo(0); ctas[ppl].setCuenta(0); } public void ingreso (int n, double s){ int j= posicionCuenta(n); ctas[j].setSaldo(ctas[j].getSaldo() + s); } public double debito (int n, double s){ int j= posicionCuenta(n); if (ctas[j].getSaldo()<s){ return ctas[j].getSaldo(); } else{ return s; } } public double saldo(int n){ int j= posicionCuenta(n); return ctas[j].getSaldo(); } public double transferencia(int n,int n2, double s){ int j= posicionCuenta(n); int j2= posicionCuenta(n2); ctas[j].setSaldo(ctas[j].getSaldo() + s); ctas[j2].setSaldo(ctas[j2].getSaldo() - s); return s; } for(int i=0;i<ppl ;i++) { System.out.println ("[(" + ctas[i].getTitular() + "/" + ctas[i].getCuenta() + ") ->" + ctas[i].getSaldo() + "]"); } return null; }
el caso es que llevo horas y horas y siempre me da el error : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
el ejercicio decia lo siguiente
El objetivo de esta práctica es el de crear clases para representar bancos y cuentas
bancarias.
Defínase una clase Cuentade cuentas bancarias. Toda cuenta bancaria vendrá dada
por un número de cuenta (de tipo int), un titular de la cuenta bancaria (de tipo
String) y un saldo (de tipo double). Sobre una cuenta bancaria se podrán realizar
operaciones de ingreso (añadirdinero a la cuenta) y de débito (extraer una cantidad de
dinero de la misma, no importando que el saldo quede negativo), además de operaciones
de consulta del número de la cuenta, su titular y saldo.
Defínase una clase Bancopara representar bancos. Un banco tendrá un nombre (dado
en el constructor) y dispondrá de una colección de cuentas bancarias (representadas en
un array de cuentas). Además, la clase Bancocontendrá las variables de instancia
pply uncaque representan respectivamente la primeraposición libre en el array de
cuentas (están en posiciones contiguas) y el primer número de cuenta libre, de forma
que una vez asignado el número a una nueva cuenta este contador se debe incrementar.
El valor inicial de uncaserá el de la constante NUMCTALIBRE (1001)
La clase Banco debe proporcionar métodos para llevar a cabo operacionesde ingreso,
de débito o de consulta de saldo sobre cualquiera de sus cuentas dado su número de
cuenta, así como una operación de transferencia entre dos cuentas bancarias indicando
los números de cuenta de la cuenta origen y de la cuenta destino y la cantidad a
transferir. Los métodos abrirCuentay cerrarCuentase encargarán de crear una
nueva cuenta bancaria y de cerrar una existente. Para abrir una cuenta bancaria bastará
con proporcionar el nombre del titular de la cuenta (suponemos un único titular por
cuenta), si no se indica saldo inicial la cuenta se creará con saldo cero. El banco se
encargaráde asignar un número de cuentaa la nueva cuenta, que será devuelto como
resultado de la operación. A la hora de cerrar una cuenta existente, después de su
2
supresión las cuentas restantes habrán de ocupar posiciones contiguas en el array de
cuentas.
Algunas cuestiones:
• Los constructores de la clase Banco se encargarán de crear el array de cuentas
con un tamaño inicial, así como de dar valores iniciales a las variables
auxiliares. El segundo argumento del constructor de Banco con dos argumentos
indica el tamaño inicial del array de cuentas. En el constructor con un argumento
el array se inicializará con un tamaño por defecto (10definido en la constante
NCTAS).
• La creación de cuentas no debe fallar porque el array esté lleno; en caso de no
quedar espacio enel array se creará un array (de doble capacidad)para habilitar
más espacio.
• Un banco no permite que una cuenta quede con saldo negativo. Si se intenta
realizar un débito por una cantidad mayor que el saldo, solo se permitirá extraer
el saldo. En ese caso, el saldo quedará a 0 y se devolverá el dinero que realmente
se ha extraído de la cuenta.
• Para facilitar la implementación de algunos métodos se debe implementar un
método llamado posicionCuenta. Éstees un método auxiliar que devuelve
la posición dentrodel array de cuentas en la que se encuentra la cuenta con el
número de cuenta dadocomo argumento.Si la cuenta no existe, el método debe
lanzar una excepción RuntimeException de la siguiente manera:
throw new RuntimeException(“No existe la cuenta
dada”);
• Se debe proporcionar una redefinición del método toStringpara las clases
CuentayBanco
Al ejecutar la siguiente clase de prueba TestBanco, el resultado ha de ser el
mostrado más abajo.
Me podeis ayudar muchas gracias de antemano