Duda con ejercicio de Java en Netbeans!

Iniciado por KlaHavoK, 28 Julio 2013, 20:22 PM

0 Miembros y 3 Visitantes están viendo este tema.

KlaHavoK

Saludos a todos!

En la Universidad me mandaron un ejercicio de Java que no he logrado hacer funcionar como se debe. Es el típico ejercicio de la cuenta bancaria, y por más que he buscado en Internet no consigo un ejercicio parecido al que me tocó (todos son o mas complicados o más sencillos).

El ejercicio va asi:

>> Hay una clase Cuenta que tiene los atributos: tipoCuenta (puede ser ahorro, corriente), titular y saldo y sus respectivos setters/getters.

>> Hay una clase Util donde se realizará la parte lógica del programa. Se mostrará un menú de opciones (1 para Crear Cuenta, 2 para Depositar, 3 para Retirar, 4 para Mostrar Saldo y 5 para Salir). Adicionalmente los métodos de Depósito y Retiro deben estar en esta clase.

>> Una clase Principial con el main.

Mis dudas son las siguientes:

1) Estan pidiendo que almacene las cuentas en un arreglo de cuentas (arregloCuentas), creo que eso lo hice bien en teoría. El problema es que piden que los métodos de retiro y depósito estén en Util y no en Cuenta (En mi ejercicio los tengo en Cuenta), pero ¿Cómo hago para llamar a esos métodos cuando estan en Util? Porque si hago arregloCuenta[id].getSaldo() estando los métodos en Util no me corre y da error.

2) De la manera en que hice el programa, el programa crea un objeto de la clase Cuenta y lo guarda en el índice ID de arregloCUentas. Hay alguna manera de acceder a un objeto de dicho arreglo sin ID?

Acá les dejo mi código tal como está. Así funciona, pero me estan pidiendo que pase los métodos depósito y retiro a la clase Util, y ahi se vuelve un ocho todo!

public class Principal {

    public static void main(String[] args) {
   
        Util u = new Util();
        u.menu();
       
    }
}


public class Cuenta {
   
    private String tipoCuenta;
    private String titular;
    private double saldo;

    public Cuenta(String tipoCuenta, String titular, double saldo) {
        this.tipoCuenta = tipoCuenta;
        this.titular = titular;
        this.saldo = saldo;
    }
   
    public String getTipoCuenta() {
        return tipoCuenta;
    }
   
    public String getTitular() {
        return titular;
    }

    public void setTitular(String titular) {
        this.titular = titular;
    }

    public void setTipoCuenta(String tipo) {
        this.tipoCuenta = tipo;
    }

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
       
    public void retiro(double monto) {
        this.saldo = saldo - monto;
    }
   
    public void deposito(double monto) {
        this.saldo = saldo + monto;
    }   
}


import java.util.Scanner;

public class Util {

    Scanner input = new Scanner(System.in);
    String opcion;
    Cuenta[] arregloCuenta = new Cuenta[20];
    boolean salir = false;

    public void menu() {
        do {
            System.out.println("1 para Crear Cuenta.\n2 para Retiro.\n3 para Deposito.\n4 para mostrar Saldo\n5 para Salir");
            opcion = input.next();


            switch (opcion) {
                case "1":

                    System.out.println("Introduzca un ID de cuenta: ");
                    int id = input.nextInt();
                    System.out.println("Introduzca tipo de cuenta: ");
                    String tipoCuenta = input.next();
                    System.out.println("Introduzca nombre del titular: ");
                    String titular = input.next();
                    System.out.println("Introduzca saldo: ");
                    double saldo = input.nextDouble();
                    Cuenta nuevaCuenta = new Cuenta(tipoCuenta, titular, saldo);
                    arregloCuenta[id] = nuevaCuenta;
                    break;

                case "2":

                    System.out.println("Introduzca ID de cuenta: ");
                    id = input.nextInt();
                    System.out.println("Introduzca cantidad a retirar: ");
                    double retiro = input.nextDouble();
                    arregloCuenta[id].retiro(retiro);
                    System.out.println("Retiró de la cuenta: " + retiro + ".\nEl nuevo saldo es de: " + arregloCuenta[id].getSaldo());
                    break;

                case "3":

                    System.out.println("Introduzca numero de cuenta: ");
                    id = input.nextInt();
                    System.out.println("Introduzca cantidad a depositar: ");
                    double deposito = input.nextDouble();
                    arregloCuenta[id].deposito(deposito);
                    System.out.println("Depositó a la cuenta: " + deposito + ".\nEl nuevo saldo es de: " + arregloCuenta[id].getSaldo());
                    break;

                case "4":

                    System.out.println("Introduzca numero de cuenta: ");
                    id = input.nextInt();
                    System.out.println("Introduzca cantidad a depositar: ");
                    System.out.println(arregloCuenta[id].getSaldo());
                    break;

                case "5":
                    salir = true;
                    break;

            }
        } while (salir == false);
    }
}


Espero me puedan ayudar! Llevo desde el Jueves dándole duro y leyendo y consultando pero nada!
Mil Gracias por tomarse su tiempo en leer mi post!

Alien-Z

#1
Citar1) Estan pidiendo que almacene las cuentas en un arreglo de cuentas (arregloCuentas), creo que eso lo hice bien en teoría.

En realidad, si no sabes cuántas cuentas vas a menejar a la vez, no puedes usar un array porque el usuario podrá crear más cuentas de las que caben en él. Debes usar las colecciones que heredan de la clase List<T>:

Código (java) [Seleccionar]
ArrayList<Cuenta> listaCuentas = new ArrayList<Cuenta>();

Código (java) [Seleccionar]
LinkedList<Cuenta> listaCuentas = new LinkedList<Cuenta>();

Cualquiera de los dos te vale, la diferencia es que los métodos de acceso/modificación de ArrayList son rápidos pero añadir o eliminar un elemento resulta ineficiente. En cambio los métodos de acceso/modificación de LinkedList son ineficientes pero para añadir o eliminar un elemento tienen un menos coste que ArrayList.

CitarEl problema es que piden que los métodos de retiro y depósito estén en Util y no en Cuenta (En mi ejercicio los tengo en Cuenta), pero ¿Cómo hago para llamar a esos métodos cuando estan en Util? Porque si hago arregloCuenta[id].getSaldo() estando los métodos en Util no me corre y da error.

Porque no se refieren a los métodos get/set. Lo que te dice es lo siguiente:

1- Dentro de la clase Cuenta crear los métodos:

Código (java) [Seleccionar]
...
public double getSaldo() { //Consulta cuánto saldo tenemos, el valor NO se modifica
  return saldo;
}

public void setSaldo(double saldo) { //Servirá tanto para depositar como para retirar saldo
  this.saldo = saldo;
}
...


2- Dentro de la clase Util crear los métodos:

Código (java) [Seleccionar]
public void depositar(Cuenta cuenta, double cantidad) { //Deposita en la cuenta la cantidad indicada
  cuenta.setSaldo(cuenta.getSaldo() + cantidad); //El saldo que teníamos más la cantidad
}

public void retirar(Cuenta cuenta, double cantidad) { //Retira en la cuenta la cantidad indicada
  if(cuenta.getSaldo() >= cantidad) { //Si hay dinero suficiente para retirar
     cuenta.setSaldo(cuenta.getSaldo() - cantidad); //El saldo que teníamos menos la cantidad
  }
  else {
     System.out.println("No hay saldo suficiente para retirar esa cantidad."); //Si no hay dinero suficiente notifícalo por pantalla
  }
}


Citar2) De la manera en que hice el programa, el programa crea un objeto de la clase Cuenta y lo guarda en el índice ID de arregloCUentas. Hay alguna manera de acceder a un objeto de dicho arreglo sin ID?

No, siempre necesitas un índice para acceder a un elemento de un array. Sin embargo ya te he comentado que si no sabes el número de cuentas que vas a tener no puedes utilizar un array sino una colección.

Saludos.

KlaHavoK

Mil gracias Alien-Z!! :D

Ya entendí lo de los métodos en Util :D y realicé los cambios pertinentes y quedó excelente! Quería aprovechar de preguntar otra duda que tengo:
(seguimos usando arreglos, ya que en la Uni aún no nos han dado colecciones y si me adelanto de seguro el profesor me la aplicará!)

>> Supongamos que Cuenta tiene un atributo más del tipo int llamado numeroCuenta que almacenará el número de la cuenta. Cómo hago para poder acceder a un determinado número de cuenta sin necesidad de usar el ID? Es decir, supongamos que en arregloCuenta[1] tengo un objeto de tipo cuenta con un numeroCuenta 1234... Cómo hago para (por ejemplo) cuando seleccione la opción de depositar en mi programa, que el programa me pida el número de cuenta y de ahí acceda a la posición en el arreglo donde se encuentra la cuenta con dicho númeroCuenta y realizar las aciones pertinentes? O es esto imposible?  ;D

>> Hoy cambiaron un poco el ejercicio. Ahora al parecer necesito una clase Cliente que va a tener un ID y un arreglo de cuentas (arregloCuentasCliente). Entonces en vez de crear una cuenta en la opcion 1, crearé un Cliente y lo almacenaré en un arregloClientes junto con la información de su cuenta. El cliente tiene un arregloCuentasCliente ya que el puede tener varias cuentas. Cómo hago la lógica de esto? Osea, sé cómo crear el cliente y almacenarlo; pero cómo hago si quiero añadir una cuenta adicional a un cliente ya creado?

Esas son mis dudas. Alien-Z has sido de más utilidad que el testarudo de mi profesor hjahaha.  :xD
Mil gracias!

Alien-Z

#3
Cita de: KlaHavoK en 29 Julio 2013, 06:53 AM
>> Supongamos que Cuenta tiene un atributo más del tipo int llamado numeroCuenta que almacenará el número de la cuenta. Cómo hago para poder acceder a un determinado número de cuenta sin necesidad de usar el ID? Es decir, supongamos que en arregloCuenta[1] tengo un objeto de tipo cuenta con un numeroCuenta 1234... Cómo hago para (por ejemplo) cuando seleccione la opción de depositar en mi programa, que el programa me pida el número de cuenta y de ahí acceda a la posición en el arreglo donde se encuentra la cuenta con dicho númeroCuenta y realizar las aciones pertinentes? O es esto imposible?  ;D

Ya veo lo que quieres hacer, para esto tendrás que:

1- Recoger el número de cuenta en una variable.
2- Crear un bucle que vaya comparando el número de cuenta que tienes almacenada en la variable con los números de cuenta de todas las cuentas del array.

Código (java) [Seleccionar]
boolean encontrada = false; //Cuando encontremos la cuenta, finalizará el bucle
final int totalCuentas = 10; //Aqui pondrás el total de cuentas que tienes
int i = 0;

while(i < totalCuentas && !encontrada) { //Mientras no nos salgamos del array y no encontremos la cuenta
  if (arrayCuentas[i].getNumCuentas() == numCuentas) { //Si el número de cuenta es igual al que buscamos
     encontrada = true; //Nos salimos del bucle
  }
  i++;
}

if (i != totalCuentas) { //ATENCION: Hay que comprobar si nos hemos salido del bucle porque hemos encontrado la cuenta o porque hemos recorrido todo el array y no está

//Colocamos las instrucciones que se ejecutarán una vez encontrada
}


Citar>> Hoy cambiaron un poco el ejercicio. Ahora al parecer necesito una clase Cliente que va a tener un ID y un arreglo de cuentas (arregloCuentasCliente). Entonces en vez de crear una cuenta en la opcion 1, crearé un Cliente y lo almacenaré en un arregloClientes junto con la información de su cuenta. El cliente tiene un arregloCuentasCliente ya que el puede tener varias cuentas. Cómo hago la lógica de esto? Osea, sé cómo crear el cliente y almacenarlo; pero cómo hago si quiero añadir una cuenta adicional a un cliente ya creado?

Es interesante darle vueltas a estos problemas. Ahora en el menú tendrás que dar dos opciones:
1- Nuevo Cliente
2- Nueva cuenta
3- ...

Cuando el usuario elija crear una nueva cuenta tendrás que preguntarle obligatoriamente a qué cliente pertenece esta cuenta, recoges el dato y vas comparando en el array de clientes (viene a ser el mismo bucle que el apartado anterior) hasta dar con el propietario de la nueva cuenta. La creas y la almacenas en el array de éste cliente.

Saludos.

KlaHavoK

Excelente Alien-Z! Mil gracias por tu ayuda!!

Disculpa la tardía respuesta y agradecimiento, estaba sin Internet! Mi programa quedó genial :D
Saludos!

Alien-Z


marish


    1.Se requiere hacer un programa para saludar clientes de un banco, la idea es que el usuario digite su nombre y el programa responda con un saludo incluyéndolo. Por ejemplo: Si el cliente (usuario) digita "Pedro" y luego enter, el programa deberá responder "Hola Pedro, bienvenido al Banco REMINGTON".



   2. Una empresa fabricante de tapas de acero, especializada en figuras planas regulares, requiere un programa que le permita calcular el área de corte de acuerdo a la solicitud de sus clientes. El cliente deberá indicar la forma de la figura de una de las siguientes opciones: • círculo, • cuadrado, • triángulo, • paralelogramo y luego dar las medidas del perímetro así: Para el círculo deberá dar la longitud del perímetro del círculo o el radio del mismo Para el cuadrado deberá dar la longitud de los cuatro lados que lo conforman Para el triángulo deberá dar la longitud de los tres lados que lo conforman Para el paralelogramo deberá dar la longitud de los cuatro lados que lo conforman.



    3.Un matemático requiere con urgencia un programa que permita determinar cuál es el número mayor, el promedio y cuál es el menor, de una lista de 4 números.

arthur

Tengo una duda...
Si quisiera intercambiar o transferir el saldo de una cuenta a otra como deberia de hacerlo??? :¬¬

rub'n

Cita de: marish en 29 Julio 2018, 04:46 AM
    1.Se requiere hacer un programa para saludar clientes de un banco, la idea es que el usuario digite su nombre y el programa responda con un saludo incluyéndolo. Por ejemplo: Si el cliente (usuario) digita "Pedro" y luego enter, el programa deberá responder "Hola Pedro, bienvenido al Banco REMINGTON".



   2. Una empresa fabricante de tapas de acero, especializada en figuras planas regulares, requiere un programa que le permita calcular el área de corte de acuerdo a la solicitud de sus clientes. El cliente deberá indicar la forma de la figura de una de las siguientes opciones: • círculo, • cuadrado, • triángulo, • paralelogramo y luego dar las medidas del perímetro así: Para el círculo deberá dar la longitud del perímetro del círculo o el radio del mismo Para el cuadrado deberá dar la longitud de los cuatro lados que lo conforman Para el triángulo deberá dar la longitud de los tres lados que lo conforman Para el paralelogramo deberá dar la longitud de los cuatro lados que lo conforman.



    3.Un matemático requiere con urgencia un programa que permita determinar cuál es el número mayor, el promedio y cuál es el menor, de una lista de 4 números.


wt hell, hommie, es un post muy viejo, y de paso pides que te hagan la tarea? por diosssss



Cita de: arthur en  6 Enero 2019, 03:58 AM
Tengo una duda...
Si quisiera intercambiar o transferir el saldo de una cuenta a otra como deberia de hacerlo??? :¬¬

y tu tampoco te escapas pon código que llevas y se te ayudara


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen