我试图将数组更改为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;
}
}
}
}
}
答案 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)