Ver Mensaje Individual
  #7 (permalink)  
Antiguo 30/09/2011, 11:48
Jarkaos
 
Fecha de Ingreso: noviembre-2002
Ubicación: Suecia
Mensajes: 253
Antigüedad: 21 años, 5 meses
Puntos: 2
Respuesta: Mover elementos en un arreglo, problemas

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 amountint[] 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 0trans.length 1i++) {
            
trans[i] = trans[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 0choice 0sum 0balance 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(amounttrans);
                    break;

                case 
2:
                    
System.out.print("Sacar dinero: ");
                    
sum input.nextInt();
                    
amount = - sum;
                    
makeTransactions(amounttrans);
                    break;

                case 
3:
                    
showTransactions(transbalance);
                    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[] transint 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 0trans.lengthi++) {
            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 amountint[] 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 0trans.lengthi++) { //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 0trans.length 1i++) {
            
trans[i] = trans[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.