Problema al crear objetos con método switch

Iniciado por Finishim, 13 Junio 2015, 02:49 AM

0 Miembros y 1 Visitante están viendo este tema.

Finishim

Hola gente, estoy haciendo un ejercicio en donde debo simular la recarga de un celular a través de una interfaz, tengo un menu con las opciones

1.- iniciar carga
2.- descontar saldo
3.- cargar saldo
4.- ver saldo actual

y dentro del case 1, (iniciar carga), debo asignarle una carga inicial, pero el problema es que cuando inicio la carga y luego quiero ver el saldo actual, este me muestra que la carga es 0, se me ocurre que debo tener un error al pasar el parámetro cargaInicial al objeto miCelular

aqui dejo lo que tengo echo, ojala alguien me eche una manito:

clase interfaz;

Código (java) [Seleccionar]
import java.util.Scanner;
public class Interfaz
{
   private Scanner leer = new Scanner(System.in);
   Celular miCelular = new Celular();
    public void main()
    {
       int opcionFunciones;
       int cargaInicial=0;
      do{
 
          System.out.println("1.- Configurar carga inicial");
          System.out.println("1.- Descontar saldo");
          System.out.println("3.- Cargar saldo");
          System.out.println("4.- Ver saldo actual");
          opcionFunciones = leer.nextInt();
          leer.nextLine();
          switch(opcionFunciones)
          {
             
              case 1:
             
                      do
                      {
                         System.out.println("Iniciar recarga");
                         System.out.println("Ingrese cantidad inicial de carga");
                         System.out.println("1.-  1000");
                         System.out.println("2.-  2000");
                         System.out.println("3.-  5000");
                         
                          int opcion = leer.nextInt();
                          leer.nextLine();
                          switch(opcion)
                          {
                            case 1: cargaInicial=1000;
                                    break;
                                   
                            case 2: cargaInicial=2000;
                                    break;
                           
                            case 3: cargaInicial=5000;
                                    break;
                           
                            default: System.out.println("Opcion invalida");
                                   
                          }         
                       
                      }while(cargaInicial==0);
                      miCelular.setSaldoInicial(cargaInicial);
                      break;
                     
              case 2:
                   
                    System.out.println("Ingrese saldo a descontar");
                    int dctoSaldo = leer.nextInt();
                    leer.nextLine();
                   
                    miCelular.Descontar(dctoSaldo);
                    break;
                         
              case 3:
                      System.out.println("Ingrese saldo a cargar");
                      int cargaSaldo = leer.nextInt();
                     
                      miCelular.Cargar(cargaSaldo);
                      break;
           
              case 4: System.out.println("Su saldo actual es: "+miCelular.getSaldoActual()+" pesos");
                      break;
             
              case 5: System.out.println("opcion invalida");
                     
                       
          }// Fin switch     
        }while(opcionFunciones<4);
     

   } // fin main
   
   
   



Clase celular:

Código (java) [Seleccionar]
public class Celular
{
    private int SaldoInicial;
    private int SaldoActual;
   
   public Celular()
   {
     SaldoInicial=0;
     SaldoActual=0;
   }
   
   public Celular(int SaldoInicial, int SaldoActual)
   {
     this.SaldoInicial=SaldoInicial;
     this.SaldoActual=SaldoActual;
   }
   
   public int getSaldoInicial()
   {
     return SaldoInicial;
   }
   
   public int getSaldoActual()
   {
     return SaldoActual;
   }
   
   public void setSaldoInicial(int SaldoInicial)
   {
     this.SaldoInicial=SaldoInicial;
   }
     
   public void Cargar(int cantidadCarga)
   {
      SaldoActual = SaldoActual+cantidadCarga;
   }
   
   public void Descontar(int descuentaSaldo)
   {
     SaldoActual = SaldoActual-descuentaSaldo;
   }
   
   
}

Usuario Invitado

En la opción 1, llamas al método setSaldoInicial, que solo asigna un saldo inicial, pero no hace nada con saldoActual, por lo que éste queda en 0. El saldoActual se modifica cuando se llama al método cargar.

PD: Léete el hilo buenas prácticas en Java, que está con chincheta. Los métodos siempre utilizan camlCase.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

Finishim

Cita de: Gus Garsaky en 13 Junio 2015, 15:33 PM
En la opción 1, llamas al método setSaldoInicial, que solo asigna un saldo inicial, pero no hace nada con saldoActual, por lo que éste queda en 0. El saldoActual se modifica cuando se llama al método cargar.

PD: Léete el hilo buenas prácticas en Java, que está con chincheta. Los métodos siempre utilizan camlCase.

Hola Gus, interesante la guia, comenzaré a leerla.

Ahora respecto al ejercicio tienes razó, no estaba haciendo nada con ese metodo, ahora lo que se me ocurrio fue en esa misma linea iniciar un objeto con el método constructor con parametros, asi

Código (java) [Seleccionar]

Celular miCelular = new Celular(cargaInicial,cargaInicial);
  break;


en donde el primer parametro corresponde a la carga inicial y el segundo a la carga actual, que vendría siendo la inicial a la vez, pero me sale un error en el case 2, al llamar al metodo Descontar

Código (java) [Seleccionar]
case 2:
                   
                    System.out.println("Ingrese saldo a descontar");
                    int dctoSaldo = leer.nextInt();
                    leer.nextLine();
                   
                    miCelular.Descontar(dctoSaldo);
                    break;


dice que la variable miCelular no ha sido inicializada

robertofd1995

Cita de: Finishim en 13 Junio 2015, 19:33 PM
Hola Gus, interesante la guia, comenzaré a leerla.

Ahora respecto al ejercicio tienes razó, no estaba haciendo nada con ese metodo, ahora lo que se me ocurrio fue en esa misma linea iniciar un objeto con el método constructor con parametros, asi

Código (java) [Seleccionar]

Celular miCelular = new Celular(cargaInicial,cargaInicial);
  break;


en donde el primer parametro corresponde a la carga inicial y el segundo a la carga actual, que vendría siendo la inicial a la vez, pero me sale un error en el case 2, al llamar al metodo Descontar

Código (java) [Seleccionar]
case 2:
                   
                    System.out.println("Ingrese saldo a descontar");
                    int dctoSaldo = leer.nextInt();
                    leer.nextLine();
                   
                    miCelular.Descontar(dctoSaldo);
                    break;


dice que la variable miCelular no ha sido inicializada

Arriba veo un break y abajo el case 2 , switch solo ejecuta una de las opciones por lo que si inicializas el objeto en un caso no lo estas inicializando en todos los demas , y si lo que estas pensando es ponerlo en el default , el default es el caso que se ejecuta en caso de que ninguna de las otras opciones se haya dado , no quiere decir que se ejecute por defecto.

Mira a ver si es ese tu problema.