Gracias a todos, después de recorrer la clase manualmente un montón de veces encontré la solución
en el metodo makeTransactions, como dice alexg88, no estaba enviando nada al nuevo lugar en el arreglo, así que lo he modificado y he dejado así:
Código PHP:
public static void makeTransactions(int amount, int[] trans) {
int position = findNr(trans);
if (position == -1) {
moveTrans(trans);
position = findNr(trans);
trans[position] = amount;
} else {
trans[position] = amount;
}
}
y el metodo moveTrans lo arregle así:
Código PHP:
public static void moveTrans(int[] trans) {
for (int i = 0; i < trans.length - 1; i++) {
trans[i] = trans[i + 1]; //mueve el elemento a la izquerda, el primer elemento se pierde
}
//en este punto el ultimo espacio esta vacio, se asigna 0
// y vuelve a makeTransactions
trans[trans.length - 1] = 0;
}
Ahora todo funciona correctamente. Solo les quería pedir un ultimo favor.
Desde el punto de vista de un programador con experiencia (yo estoy recién comenzando en java) como se ve la estructura de la clase? yo se que la posición de los métodos no afecta a la ejecución de la clase pero para leer el código están bien colocados los métodos?
y algo que supongo que dependera del programador, pero dentro del los casos 2 y 3 del switch estoy guardando el valor ingresado en la variable amount en el caso de ingresar dinero uso:
amount = sum;
y para el retiro de dinero:
amount = - sum;
He visto en otros ejemplos por internet que utilizan algo así:
amount = (int) + sum;
amount = (int) - sum;
Que forma es semanticamente mas aceptable?
Aquí les dejo la clase final:
Código PHP:
import java.util.Scanner;
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[4];
//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 = sum;
makeTransactions(amount, trans);
break;
case 2:
System.out.print("Sacar dinero: ");
sum = input.nextInt();
amount = - 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();
// recorre el arreglo. Si la posicion es 0 (vacio) no se imprime
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]; // se acumula el balance
}
}
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); // mueve los elementos un lugar a la izquerda
position = findNr(trans); // obtiene el indice del lugar desocupado
trans[position] = amount; // se coloca el monto en el lugar indicado por findNr
} else {
trans[position] = amount; // Aun hay espacios disponibles por lo tanto no se necesita mover nada.
}
}
// 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; // -1 significa que no hay lugares libres
for (int i = 0; i < trans.length; i++) { //recorre el arreglo
if (trans[i] == 0) { // si la posicion es 0 (vacio)
position = i; // se guarda el indice en position
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[i] = trans[i + 1]; //mueve el elemento a la izquerda, el primer elemento se pierde
}
//en este punto el ultimo espacio esta vacio, se asigna 0
// y vuelve a makeTransactions
trans[trans.length - 1] = 0;
}
}
Gracias por todo nuevamente.