Estoy creando una classe que simula un banco. La clase hace las tareas típicas del banco. ingresar dinero, sacar dinero y mostrar el saldo.
El problema de la clase esta en que las ultimas 10 transacciones se deben guardar en un arreglo, si el usuario realiza una transacción mas , cada transacción en el arreglo deben moverse para dejar un lugar libre en el arreglo así la ultima transacción se pueda guardar en el arreglo.
Hasta ahora todo funciona, puedo realizar 10 transacciones, guardarlas en el arreglo y mostrarlas después. El problema esta en que cuando hago una transacción mas, ésta no se guarda en el arreglo, si no que la transacción que esta en el ultimo lugar del arreglo se copia a la posición 0 del arreglo.
Este es el codigo que he escrito:
Código:
En este codigo el arreglo tiene 4 posiciones para probarlo mas rápido. Al ejecutarlo y seleccionando ingresar dinero las 4 veces obtengo esto:public class Bank { public static void main(String args[]) { Scanner input = new Scanner(System.in); int amount = 0, choice = 0, sum = 0, balance = 0; int[] trans = new int[10]; //mientras el usuario no decide terminar ingresa al switch while (choice != 4) { choice = menu(); switch (choice) { case 1: System.out.print("Ingresar dinero: "); sum = input.nextInt(); amount = (int) +sum; makeTransactions(amount, trans); break; case 2: System.out.print("Sacar dinero: "); sum = input.nextInt(); amount = (int) -sum; makeTransactions(amount, trans); break; case 3: showTransactions(trans, balance); break; default: System.out.println("Terminar"); break; } } } // Muestra el menu y recive la opcion del usuario public static int menu() { int choice = 0; Scanner input = new Scanner(System.in); System.out.println("Banco"); System.out.println("-------------------"); System.out.println(); System.out.println("1. Ingresar dinero"); System.out.println("2. Scar dinero"); System.out.println("3. Saldo"); System.out.println("4. Terminar"); System.out.println(); System.out.print("Tu opcion: "); choice = input.nextInt(); return choice; } //Muestra las ultimas 10 transacciones mas el saldo public static void showTransactions(int[] trans, int balance) { System.out.println(); System.out.println("Historial: "); System.out.println(); for (int i = 0; i < trans.length; i++) { if (trans[i] == 0) { System.out.print(""); } else { System.out.print(trans[i] + "\n"); balance += trans[i]; } } System.out.println(); System.out.println("Saldo: " + balance); System.out.println(); } //Coloca la ultima transaccion en el ultimo lugar libre del array // si el array esta lleno, moveTrans creara un espacio libre en el array public static void makeTransactions(int amount, int[] trans) { int position = findNr(trans); if (position == -1) { moveTrans(trans); } else { trans[position] = amount; } } // Entrega la posicion en el array en donde la transaccion se guardara // si no hay lugares devuelve -1 public static int findNr(int[] trans) { int position = - 1; for (int i = 0; i < trans.length; i++) { if (trans[i] == 0) { position = i; break; } } return position; } //Mueve todas las transacciones en el array un lugar para hacer espacio //para la nueva transaccion. La transaccion mas antigua se sobreescribe. public static void moveTrans(int[] trans) { for (int i = 0; i < trans.length - 1; i++) { trans[0] = trans[i + 1]; } } }
Código PHP:
Historial:
1
2
3
4
Saldo: 10
Código PHP:
Historial:
4 <==== aqui se repite la ultima transacción
2
3
4
Saldo: 10
Código PHP:
Historial:
2
3
4 <==== las transacciones anteriores se mueven un lugar
5 <==== ultima transaccion
Saldo: 14 <=== el saldo se actualiza
Me podrían ayudar a resolver esto? Gracias a todos.