Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Finishim en 13 Junio 2015, 02:49 am



Título: Problema al crear objetos con método switch
Publicado por: Finishim en 13 Junio 2015, 02:49 am
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
  1. import java.util.Scanner;
  2. public class Interfaz
  3. {
  4.   private Scanner leer = new Scanner(System.in);
  5.   Celular miCelular = new Celular();
  6.    public void main()
  7.    {
  8.       int opcionFunciones;
  9.       int cargaInicial=0;
  10.      do{
  11.  
  12.          System.out.println("1.- Configurar carga inicial");
  13.          System.out.println("1.- Descontar saldo");
  14.          System.out.println("3.- Cargar saldo");
  15.          System.out.println("4.- Ver saldo actual");
  16.          opcionFunciones = leer.nextInt();
  17.          leer.nextLine();
  18.          switch(opcionFunciones)
  19.          {
  20.  
  21.              case 1:
  22.  
  23.                      do
  24.                      {
  25.                         System.out.println("Iniciar recarga");
  26.                         System.out.println("Ingrese cantidad inicial de carga");
  27.                         System.out.println("1.-  1000");
  28.                         System.out.println("2.-  2000");
  29.                         System.out.println("3.-  5000");
  30.  
  31.                          int opcion = leer.nextInt();
  32.                          leer.nextLine();
  33.                          switch(opcion)
  34.                          {
  35.                            case 1: cargaInicial=1000;
  36.                                    break;
  37.  
  38.                            case 2: cargaInicial=2000;
  39.                                    break;
  40.  
  41.                            case 3: cargaInicial=5000;
  42.                                    break;
  43.  
  44.                            default: System.out.println("Opcion invalida");
  45.  
  46.                          }          
  47.  
  48.                      }while(cargaInicial==0);
  49.                      miCelular.setSaldoInicial(cargaInicial);
  50.                      break;
  51.  
  52.              case 2:
  53.  
  54.                    System.out.println("Ingrese saldo a descontar");
  55.                    int dctoSaldo = leer.nextInt();
  56.                    leer.nextLine();
  57.  
  58.                    miCelular.Descontar(dctoSaldo);
  59.                    break;
  60.  
  61.              case 3:
  62.                      System.out.println("Ingrese saldo a cargar");
  63.                      int cargaSaldo = leer.nextInt();
  64.  
  65.                      miCelular.Cargar(cargaSaldo);
  66.                      break;
  67.  
  68.              case 4: System.out.println("Su saldo actual es: "+miCelular.getSaldoActual()+" pesos");
  69.                      break;
  70.  
  71.              case 5: System.out.println("opcion invalida");
  72.  
  73.  
  74.          }// Fin switch    
  75.        }while(opcionFunciones<4);
  76.  
  77.  
  78.   } // fin main
  79.  
  80.  
  81.  
  82. }  


Clase celular:

Código
  1. public class Celular
  2. {
  3.    private int SaldoInicial;
  4.    private int SaldoActual;
  5.  
  6.   public Celular()
  7.   {
  8.     SaldoInicial=0;
  9.     SaldoActual=0;
  10.   }
  11.  
  12.   public Celular(int SaldoInicial, int SaldoActual)
  13.   {
  14.     this.SaldoInicial=SaldoInicial;
  15.     this.SaldoActual=SaldoActual;
  16.   }
  17.  
  18.   public int getSaldoInicial()
  19.   {
  20.     return SaldoInicial;
  21.   }
  22.  
  23.   public int getSaldoActual()
  24.   {
  25.     return SaldoActual;
  26.   }
  27.  
  28.   public void setSaldoInicial(int SaldoInicial)
  29.   {
  30.     this.SaldoInicial=SaldoInicial;
  31.   }
  32.  
  33.   public void Cargar(int cantidadCarga)
  34.   {
  35.      SaldoActual = SaldoActual+cantidadCarga;
  36.   }
  37.  
  38.   public void Descontar(int descuentaSaldo)
  39.   {
  40.     SaldoActual = SaldoActual-descuentaSaldo;
  41.   }
  42.  
  43.  
  44. }


Título: Re: Problema al crear objetos con método switch
Publicado por: Usuario Invitado 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.


Título: Re: Problema al crear objetos con método switch
Publicado por: Finishim en 13 Junio 2015, 19: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
  1. Celular miCelular = new Celular(cargaInicial,cargaInicial);
  2.  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
  1. case 2:
  2.  
  3.                    System.out.println("Ingrese saldo a descontar");
  4.                    int dctoSaldo = leer.nextInt();
  5.                    leer.nextLine();
  6.  
  7.                    miCelular.Descontar(dctoSaldo);
  8.                    break;

dice que la variable miCelular no ha sido inicializada


Título: Re: Problema al crear objetos con método switch
Publicado por: robertofd1995 en 14 Junio 2015, 11:57 am
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
  1. Celular miCelular = new Celular(cargaInicial,cargaInicial);
  2.  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
  1. case 2:
  2.  
  3.                    System.out.println("Ingrese saldo a descontar");
  4.                    int dctoSaldo = leer.nextInt();
  5.                    leer.nextLine();
  6.  
  7.                    miCelular.Descontar(dctoSaldo);
  8.                    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.