显示所有帐户的arraylist方法不起作用

时间:2017-04-04 04:14:56

标签: java arraylist methods

我试图将数组更改为arraylist,创建帐户似乎正在运行,但“show accounts”方法一直让我回答说没有帐号注册。 这是添加帐户方法(评论是原始数组)

    //Metodo para agregar Cuentas
    public void agregarCuenta(Cuenta c){
    ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();
    cuentas.add(c);

    /*
    Cuenta aux[] = new Cuenta[cuentas.length+1];
    System.arraycopy(cuentas, 0, aux, 0, cuentas.length);
    aux[aux.length-1] = c;
    cuentas = aux;
    */

}

这是show accounts方法

public static void mostrarAhorro()
    {
        ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();
        //Si no hay cuentas en el arreglo, nos muestra el siguiente error
        if (cuentas.size() == 0)
        {
            System.out.println("No hay cuentas registradas.");
            return;
        }



        System.out.println("****Lista de cuentas de ahorro****");
        //For  para mostrar todas las cuentas de ahorro
        for (int i = 0; i<cuentas.size();i++) {

            if (cuentas.get(i) instanceof CuentaAhorros)
            {

                System.out.println("Id de cuenta: " + (i+1) +"\n"+ cuentas);
            }


        }

    }

这是代码的其余部分

package Programas;

import java.util.Scanner;

import Banco.Cuenta;

import Banco.CuentaAhorros;

import Banco.CuentaCheques;

import Banco.Movimientos;

import java.text.DecimalFormat;

import java.util.ArrayList;


public class programa1 {

//Instanciar scanner y formato de moneda
private static Scanner sc = new Scanner(System.in);
private static DecimalFormat MONEDA = new DecimalFormat("$#,###.00");;   

//Arreglo de clases instanciada.
//private static Cuenta[] cuentas = new Cuenta[0];
//private static Movimientos [] movimientos = new Movimientos[0];

public static void main(String[] args) {
    //ArrayList cuentas = new ArrayList(); 
    ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();
    ArrayList<Movimientos> movimientos = new ArrayList<Movimientos>();






    //Selec para mantener el while corriendo, y while para mantener el menu.
    int selec = 0;
    while (selec <7)
    {

        //Imprimir lista de opciones
        System.out.println("Seleccione una opcion: "+ "\n1.-Crear cuenta de ahorros."+ "\n2.-Crear cuenta de cheques."+ "\n3.-Mostrar listado de cuentas de ahorro."+ "\n4.-Mostrar listado de cuentas de cheques."+ "\n5.-Mostrar listado de todas las cuentas."+ "\n6.-Operaciones de una cuenta."+ "\n7.-Salir");

        //Pedirle al usuario una opcion
        selec = sc.nextInt();

        //Switch para que cuando selec cambie se ejecute una opcion.
        switch (selec)
        {

            //Caso 1 para agregar Cuenta de ahorros
            case 1: 
                System.out.println("Ha escogido crear una cuenta de ahorros."+ "\nIngrese el saldo inicial, y la tasa de interes: ");

                //Instancia de Cuenta tipo ahorros
                Cuenta c1 = new CuentaAhorros(sc.nextDouble(),sc.nextDouble());

                cuentas.add(c1);
                System.out.println("\nCuenta de ahorros agregada exitosamente."+ "\nTotal de cuentas: " + cuentas.size() + "\nfecha de ingreso: " + movimientos.size());
                break;

            //Caso 2 para agregar cuenta de ahorros.    
            case 2:
                System.out.println("Ha escogido crear una cuenta de cheques."+ "\nIngrese el saldo inicial, y el costo de manejo de la cuenta: ");

                //Instancia de cuenta tipo cheques
                Cuenta c2 = new CuentaCheques(sc.nextDouble(),sc.nextDouble());

                cuentas.add(c2);
                System.out.println("\nCuenta de cheques agregada exitosamente."+ "\nTotal de cuentas: "+ cuentas.size());
                break;

            //Caso para mostrar la lista de cuentas de ahorro    
            case 3:
                System.out.println("Listado de cuentas de ahorro: ");
                mostrarAhorro();
                break;

            //Caso para mostrar la lista de cuentas de cheques    
            case 4:
                System.out.println("Listado de cuentas de Cheques: ");
                mostrarCheques();
                break;

            //Caso para mostrar todas las cuentas    
            case 5:
                System.out.println("Listado de todas las cuentas: ");
                mostrarCuentas();
                break;

            //Caso para realizar operaciones de una cuenta
            case 6:
            operacionesCuenta();
            break;
        }


    }


}






//Metodo para agregar Cuentas
    public void agregarCuenta(Cuenta c){
    ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();
    cuentas.add(c);


    //cuentas = aux;

    /*
    Cuenta aux[] = new Cuenta[cuentas.length+1];
    System.arraycopy(cuentas, 0, aux, 0, cuentas.length);
    aux[aux.length-1] = c;
    cuentas = aux;
    */

}

    //Metodo para mostrar las cuentas de tipo ahorro
    public static void mostrarAhorro()
    {
        ArrayList<Cuenta> cuentas = new ArrayList<>();
        //Si no hay cuentas en el arreglo, nos muestra el siguiente error
        if (cuentas.isEmpty())
        {
            System.out.println("No hay cuentas registradas.");
            return;
        }



        System.out.println("****Lista de cuentas de ahorro****");
        //For  para mostrar todas las cuentas de ahorro
        for (int i = 0; i<cuentas.size();i++) {

            if (cuentas.get(i) instanceof CuentaAhorros)
            {
                System.out.println("Id de cuenta: " + (i+1) +"\n"+ cuentas);
            }


        }

    }


    //Metodo para cuenta cheques

    public static void mostrarCheques()
    {

        //Si no hay cuentas en el arreglo, nos muestra el siguiente error
        ArrayList<Cuenta> cuentas = new ArrayList<>();
        if (cuentas.size() == 0)
        {
            System.out.println("No hay cuentas registradas.");
            return;
        }



        System.out.println("****Lista de cuentas de Cheques****");
        //For  para mostrar todas las cuentas de ahorro
        for (int i = 0; i<cuentas.size();i++) {

            if (cuentas.get(i) instanceof CuentaCheques)
            {
                //CuentaCheques a = (CuentaCheques)cuentas.get(1);
                //System.out.println("Id de cuenta: " + (i+1) +"\n"+ a);
                System.out.println(cuentas);
            }


        }

    }


    public static void mostrarCuentas()
    {

        //Si no hay cuentas en el arreglo, nos muestra el siguiente error
        ArrayList<Cuenta> cuentas = new ArrayList<>();
        if (cuentas.size() == 0)
        {
            System.out.println("No hay cuentas registradas.");
            return;
        }



        System.out.println("****Lista de todas las cuentas****");
        //For  para mostrar todas las cuentas de ahorro
        for (int i = 0; i<cuentas.size();i++) {

            if (cuentas.get(i) instanceof CuentaCheques)
            {
                CuentaCheques a = (CuentaCheques)cuentas.get(i);
                System.out.println("Tipo de cuenta: Cheques. "+ "\nId de cuenta: " + (i+1) +"\n"+ a.toString());
            }

            else
            {
                CuentaAhorros a = (CuentaAhorros)cuentas.get(i);
                System.out.println("Tipo de cuenta: Ahorro."+ "\nId de cuenta: "+ (i+1) +"\n"+ a.toString());
            }

        }

    }


    public static void operacionesCuenta()
    {

        System.out.println("Seleccione la Id de la cuenta que desea usar: ");
        int id = (sc.nextInt() -1);
        ArrayList<Cuenta> cuentas = new ArrayList<>();

        if(id > cuentas.size())
        {
            System.out.println("Escogio una cuenta que no existe.");
            return;
        }




        if(cuentas.get(id) instanceof CuentaCheques)
        {
            int choice = 0;

            while(choice<6)
            {
                CuentaCheques a = (CuentaCheques)cuentas.get(id);
                System.out.println("Selecciono cuenta de cheques."+ "\n1.-Consultar Saldo."+ "\n2.-Retirar."+ "\n3.-Depositar." + "\n4.-Aplicar manejo de cuenta."+ "\n5.-Ver informacion de la cuenta."+ "\n6.-Salir."+ "\nSeleccione una opcion:");

                choice = sc.nextInt();

                switch(choice)
                {
                    case 1:
                        System.out.println("\nEl saldo actual de la cuenta es: " +MONEDA.format(a.getSaldo()));
                        break;

                    case 2:
                        System.out.println("\nIngrese la cantidad que desea retirar: ");
                        double retirarAhorros = sc.nextDouble();
                        a.retirar(retirarAhorros);
                        break;

                    case 3:
                        System.out.println("\nIngrese la cantidad que desea depositar: ");
                        double depositarAhorros = sc.nextDouble();
                        a.depositar(depositarAhorros);
                        break;

                    case 4:

                        System.out.println("Selecciono aplicar manejo de la cuenta.");
                        a.aplicarCostoManejoCuenta();
                        break;

                    case 5:
                        System.out.println("Selecciono ver informacion de la cuenta.");
                        System.out.println(a);
                        break;
                }
            }

        }

        else
        {
            int choice2 = 0;

            while(choice2<6)
            {
                CuentaAhorros a = (CuentaAhorros)cuentas.get(id);
                System.out.println("Escogio cuenta de ahorros."+ "\n1.-Consultar Saldo."+ "\n2.-Retirar."+ "\n3.-Depositar."+ "\n4.-Aplicar manejo de cuenta."+ "\n5.-Ver informacion de la cuenta."+ "\n6.-Salir."+ "\nSeleccione una opcion:");

                choice2 = sc.nextInt();

                switch(choice2)
                {
                    case 1:
                        System.out.println("\nEl saldo actual de la cuenta es: " +MONEDA.format(a.getSaldo()));
                        break;

                    case 2:
                        System.out.println("\nIngrese la cantidad que desea retirar: ");
                        double retirarCheques = sc.nextDouble();
                        a.retirar(retirarCheques);
                        break;

                    case 3:
                        System.out.println("\nIngrese la cantidad que desea depositar: ");
                        double depositarCheques = sc.nextDouble();
                        a.depositar(depositarCheques);
                        break;

                    case 4:

                        System.out.println("Selecciono aplicar manejo de la cuenta.");
                        a.aplicarInteres();
                        break;

                    case 5:
                        System.out.println("Selecciono ver informacion de la cuenta.");
                        System.out.println(a);
                        break;
                }

        }

    }
}

}

2 个答案:

答案 0 :(得分:0)

问题是,每次调用mostrarAhorro方法时,甚至每次调用agregarCuenta方法时,都会覆盖cuentas数组列表:

ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();

每次调用它时,它都会创建一个空数组,并忽略它以前拥有的任何数据。

您只需要创建一次并将其作为成员变量存储在类中。

ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();

   //Metodo para agregar Cuentas
public void agregarCuenta(Cuenta c){
    cuentas.add(c);

/*
Cuenta aux[] = new Cuenta[cuentas.length+1];
System.arraycopy(cuentas, 0, aux, 0, cuentas.length);
aux[aux.length-1] = c;
cuentas = aux;
*/

}

public static void mostrarAhorro()
{
    //Si no hay cuentas en el arreglo, nos muestra el siguiente error
    if (cuentas.size() == 0)
    {
        System.out.println("No hay cuentas registradas.");
        return;
    }



    System.out.println("****Lista de cuentas de ahorro****");
    //For  para mostrar todas las cuentas de ahorro
    for (int i = 0; i<cuentas.size();i++) {

        if (cuentas.get(i) instanceof CuentaAhorros)
        {

            System.out.println("Id de cuenta: " + (i+1) +"\n"+ cuentas);
        }


    }

}

编辑:您需要在类的顶部声明cuentas数组,以便所有方法都可以访问它。也可以在main方法中删除cuentas的创建。

public class programa1 {

//Instanciar scanner y formato de moneda
private static Scanner sc = new Scanner(System.in);
private static DecimalFormat MONEDA = new DecimalFormat("$#,###.00");
private ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();   

//Arreglo de clases instanciada.
//private static Cuenta[] cuentas = new Cuenta[0];
//private static Movimientos [] movimientos = new Movimientos[0];

public static void main(String[] args) {
//ArrayList cuentas = new ArrayList(); 

ArrayList<Movimientos> movimientos = new ArrayList<Movimientos>();

答案 1 :(得分:0)

您正在显示方法中创建arrayList的完整新实例。

enter image description here

如果此列表在当前运行中很常见,您可以将其声明为

私有静态列表cuentaList = new ArrayList();