Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda a un novato.(2)

Se que ya pedí ayuda en una anterior, pero en este caso llevo muuuchas vueltas dadas a este código y no lo consigo arreglar. He preguntado a muchos que conozco, pero no saben tampoco.

Código:

public class Banco {

private Cuenta[] cuentas;
private static int noCuentas = 0;

public Banco( int capacidad){
cuentas = new Cuenta[capacidad];
}

public int abrirCuenta(TipoCuenta tipo,Cliente titular,double ingresoInicial)
throws ExcepcionCuentaNoValida, ExcepcionImporteNoValido, ExcepcionClienteNoValido{

boolean lleno = false;

if(noCuentas == cuentas.length){
return 0;
}

int i= 0;
while(!lleno && (i <= cuentas.length -1)){
if(tipo == null){
throw new ExcepcionCuentaNoValida("La Cuenta no es valida.");
}
else{
if(tipo == TipoCuenta.AHORRO){
CuentaAhorro cuentaAux = new CuentaAhorro(titular,ingresoInicial);
cuentas[i] = cuentaAux;
}
else{
CuentaDeposito cuentaAux = new CuentaDeposito(titular, ingresoInicial);
cuentas[i] = cuentaAux;
}
}
i++;
}
if (lleno = true){
return 0;
}
noCuentas++;
return cuentas[i].getNumero();
}

public Cuenta buscarCuenta(int numCuenta){
Cuenta cuentaAux= null;
int i=0;

while(i<noCuentas && cuentaAux != null){

if(i == numCuenta){
cuentaAux = cuentas[i];
}

i++;
}
return cuentaAux;
}

public void ingresar(int numeroCuenta, double importe)
throws ExcepcionCuentaNoValida,ExcepcionImporteNoValido,ExcepcionOperacionNoPermitida, ExcepcionClienteNoValido{
int i=0;
Cuenta cuentaAux = buscarCuenta(numeroCuenta);

while(i <= noCuentas){

if (i == noCuentas){
throw new ExcepcionCuentaNoValida("La Cuenta no es valida.");
}

if (cuentaAux != null){

if(i == numeroCuenta){
cuentas[i].ingresar(importe);
}
i++;
}
i++;
}
}

public void retirar(int numeroCuenta, double importe)
throws ExcepcionCuentaNoValida,ExcepcionImporteNoValido,ExcepcionOperacionNoPermitida,ExcepcionSaldoInsuficiente{
int i=0;

while(i <= cuentas.length -1){
if (cuentas[i] != null){
if(cuentas[i].getNumero() == numeroCuenta){
cuentas[i].retirar(importe);
}
if (i == cuentas.length-1){
throw new ExcepcionCuentaNoValida("La Cuenta no es valida.");
}
i++;

}
i++;
}
}

public double getSaldo(int numeroCuenta)
throws ExcepcionCuentaNoValida{
Cuenta cuentaAux = buscarCuenta(numeroCuenta);

if(cuentaAux == null){
throw new ExcepcionCuentaNoValida("");
}

return cuentaAux.getSaldo();

}

public void marcarVencido(int numeroCuenta)
throws ExcepcionCuentaNoValida{
Cuenta cuentaAux = buscarCuenta(numeroCuenta);
int i= 0;
boolean lleno= true;

while (lleno && (i <= cuentas.length-1)){
if ( cuentas[i]== cuentaAux){
lleno=false;
}
else{
i++;
}
}
int posAux = i;

if ( cuentas[posAux] instanceof CuentaDeposito){
((CuentaDeposito) cuentas[posAux]).marcarVencido();
}
else{
throw new ExcepcionCuentaNoValida("La Cuenta no es valida.");
}
}
}

El error más importante es que no consigo que el método buscarCuenta me devuelva la cuenta correcta. Se supone que debe buscar en el array y devolver la cuenta correspondiente.
Os agradecería muchísimo la ayuda.

junio 23, 2014 | Registered Commenterjorgebodega

Vas a tener que usar un debugger, porque ese código no se puede compilar ni ejecutar.

Por otra parte, ese método para buscar cuentas es un poco enrevesado :)

public Cuenta buscarCuenta(int numCuenta){
Cuenta cuentaAux= null;
if(numCuenta < cuentas.length)
cuentaAux= cuentas[numCuenta];
return cuentaAux;
}

No sé si así se resolverá el problema; si no es así, deberías buscar en la creación de cuentas.

junio 24, 2014 | Registered Commenterchoces

Pufff... eso no funciona...
Pero mirando en la creación de cuentas todo esta correcto... no se que hacer...

junio 24, 2014 | Registered Commenterjorgebodega

Son demasiado errores y poco tiempo... No habría alguna posibilidad de que alguien me ayude por correo?
Es muy importante de verdad, llevo mucho tiempo haciendo esto.

junio 24, 2014 | Registered Commenterjorgebodega

public Cuenta buscarCuenta(int numCuenta){
Cuenta cuentaAux= null;
int i=0;
while(i<noCuentas && cuentaAux != null){
if(i == numCuenta){
cuentaAux = cuentas[i];
}
i++;
}
return cuentaAux;
}

Solo he mirado esta función: Veamos
Linea 1:
Cuenta cuentaAux= null;
Linea 2:
int i=0;
Linea 3:
while(i<noCuentas && cuentaAux != null){
En esta condición cuentaAux es null siempre antes de entrar la primera vez así que nunca entra en el while.

Aún así estre metodo solo te devuelve la Cuenta en la posicion numCuenta de un array... no? Esto se solucionaría así
if(numCuenta<noCuentas)cuentaDestino=cuentas[numCuenta];
else cuentaDestino=null;
O incluso:
cuentaDestino=(numCuenta<noCuentas?cuentas[numCuenta]:null);

Aunque echando un rápido vistazo al cçódigo me extrañaría que no tuviera más errores.
Un saludo.

junio 30, 2014 | Unregistered Commenterkike