Java - NETBEANS Por qué arroja valor de 0?

 
Vista:
Imágen de perfil de Luis Pablo
Val: 19
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

NETBEANS Por qué arroja valor de 0?

Publicado por Luis Pablo (9 intervenciones) el 09/11/2018 06:27:30
buenas! alguien podría ayudarme por favor? es una tarea y realmente me urge un poco :( es un trabajo de pilas, el problema es que al momento de querer sacar un valor este valor se arroja como 0, siendo que yo le puse cualquier otro número.
Este es mi código (Netbeans)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public static void main (String [] args){
    boolean bool=false;
    int x=0,tope=0, tam=0, ing;
 
    x = Integer.parseInt(JOptionPane.showInputDialog("1.-Crear Pila\n"
            + "2.-Tamaño Pila\n"
            + "3.- Ingresar Dato\n"
            + "4.- Sacar Dato\n"
            + "5.- Salir"));
 
    do{
          int [] arreglo = new int [tam];
 
        switch(x){
            case 1: //Crear Pila
                if(bool==false){
                    JOptionPane.showMessageDialog(null, "Pila creada");
                    bool = true;
                }
                else if(bool==true){
                    JOptionPane.showMessageDialog(null, "La pila ya existe");
                }
                x = Integer.parseInt(JOptionPane.showInputDialog("1.-Crear Pila\n"
                + "2.-Tamaño Pila\n"
                + "3.- Ingresar Dato\n"
                + "4.- Sacar Dato\n"
                + "5.- Salir"));
            break;
 
            case 2://Tamaño de pila
                if(bool==false){
                    JOptionPane.showMessageDialog(null, "La pila no existe");
                }
                else if(bool==true){
                    tam=Integer.parseInt(JOptionPane.showInputDialog("Ingresa el tamaño de la pila"));
                }
                x = Integer.parseInt(JOptionPane.showInputDialog("1.-Crear Pila\n"
                + "2.-Tamaño Pila\n"
                + "3.- Ingresar Dato\n"
                + "4.- Sacar Dato\n"
                + "5.- Salir"));
            break;
 
            case 3: //Ingresar dato
                if(bool==false){
                    JOptionPane.showMessageDialog(null, "La pila no existe");
                }
                else if(bool==true){
                    if(tope<tam){
                    ing = Integer.parseInt(JOptionPane.showInputDialog("Ingresa Dato"));
                    arreglo[tope] = ing;
                    tope=tope+1;
                    }
                }
                if(tope==tam){
                    JOptionPane.showMessageDialog(null, "La pila está llena");
                }
                x = Integer.parseInt(JOptionPane.showInputDialog("1.-Crear Pila\n"
                + "2.-Tamaño Pila\n"
                + "3.- Ingresar Dato\n"
                + "4.- Sacar Dato\n"
                + "5.- Salir"));
            break;
 
            case 4://Sacar dato
                if(bool==false){
                    JOptionPane.showMessageDialog(null, "La pila no existe");
                }
                else if(tope==0){
                        JOptionPane.showMessageDialog(null, "La pila está vacía");
                    }
                if(tope!=0){
                    tope=tope-1;
                    ing = arreglo[tope];
                    JOptionPane.showMessageDialog(null, ing);
                }
                x = Integer.parseInt(JOptionPane.showInputDialog("1.-Crear Pila\n"
                + "2.-Tamaño Pila\n"
                + "3.- Ingresar Dato\n"
                + "4.- Sacar Dato\n"
                + "5.- Salir"));
            break;
 
            case 5: //Salir
                System.exit(0);
        }
 
    } while(x!=5);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

NETBEANS Por qué arroja valor de 0?

Publicado por Kabuto (1381 intervenciones) el 11/11/2018 01:11:51
Hola.
El problema es que el arreglo lo declaras DENTRO del bucle:
1
2
do{
    int [] arreglo = new int [tam];

Esto implica que cada vez que se repite el bucle, estás creando un nuevo arreglo porque también se repite el new int[tam];
Y por lo tanto se borran todos los datos que habían almacenados antes. Por eso siempre obtienes un valor 0.

Así que has de declarar el arreglo FUERA del bucle:
1
2
3
4
5
6
int [] arreglo = new int[tam];//Arreglo hay que declararlo fuera del bucle.
 
do{
    //int [] arreglo = new int [tam]; //Si lo declaramos aqui, sus valores "reinician a 0" cada vez que se repite el bucle 
 
    switch(x){

Y ahora, hay que hacer un segundo cambio. Cuando establecemos el tamaño de la pila, no basta con cambiar el valor de tam.
Además, hay que reinstanciar el arreglo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
case 2://Tamaño de pila
    if(bool==false){
        JOptionPane.showMessageDialog(null, "La pila no existe");
    }
    else if(bool==true){
        tam=Integer.parseInt(JOptionPane.showInputDialog("Ingresa el tamaño de la pila"));
        //Para variar el tamaño de la "pila", hay que reinstanciar de nuevo el arreglo con el nuevo tamaño
        arreglo = new int[tam];
    }
    x = Integer.parseInt(JOptionPane.showInputDialog("1.-Crear Pila\n"
            + "2.-Tamaño Pila\n"
            + "3.- Ingresar Dato\n"
            + "4.- Sacar Dato\n"
            + "5.- Salir"));
    break;

Antes no tenías que reinstanciar aquí, precisamente porque estabas reinstanciando en cada iteracion del bucle cuando el arreglo estaba declarado DENTRO. Lo cuál como hemos dicho, implicaba el problema de perder los datos introducidos.

Ahora, con este cambio, solo reinstancias el arreglo cuando queremos establecer su tamaño.

Prueba, estos cambios, y verás como ahora sí funciona.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Luis Pablo
Val: 19
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

NETBEANS Por qué arroja valor de 0?

Publicado por Luis Pablo (9 intervenciones) el 14/11/2018 06:42:46
GRACIAS AMIGO muchas gracias de verdad, me ha servido, ahora ya veo donde está el problema jajaja 10 de 10 =)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar