Java - Duda EmptyStackException

 
Vista:

Duda EmptyStackException

Publicado por Sergio (2 intervenciones) el 21/06/2020 17:35:34
Hola, estaba haciendo un juego del solitario, tengo una variable llamada montonExterior que es un array de cuatro pilas (una pila para cada palo, 12 cartas por palo). Al finalizar el juego, cuando no me queden movimientos quería contar el número de cartas que hay en total en el montón exterior.
La baraja tiene ochos y nueves, hay 48 cartas.
Si coloco más de 24 cartas en el montón exterior quiero que salga el mensaje "ánimo", si no consigo más de 24, quiero imprimir el mensaje "Ha perdido".

Para ello hice el siguiente código:

1
2
3
4
5
6
7
8
9
10
int contador =0;
for (int i = 0; i < 4; i++) {
    while(!montonExterior[i].empty()){
        for (int j =0; j<12;j++){
 
            montonExterior[i].pop();
            contador++;
        }
    }
}

El anterior código me da una EmptyStackException en la línea de montonExterior[i].pop.

He solucionado el problema cambiando el código al siguiente:

1
2
3
4
5
6
7
8
9
10
int contador =0;
for (int i = 0; i < 4; i++) {
    do{
 
          if(!montonExterior[i].empty()){
          montonExterior[i].pop();
          contador++;
          }
    }while(!montonExterior[i].empty());
}


Alguien me podría decir por qué antes me daba el EmptyStackException? Muchas gracias.
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 Rodrigo
Val: 1.623
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Duda EmptyStackException

Publicado por Rodrigo (429 intervenciones) el 22/06/2020 00:23:11
No puedes hacer stack.pop() si stack esta empty,

Tu segundo programa chequea si esta empty antes de hacer pop.
El primero realiza 12 pops en el ciclo for y no chequea si estan empty cada vez, por lo que podrian haber menos de 12 elementos en el stack y producir la excepcion.
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

Duda EmptyStackException

Publicado por Sergio (2 intervenciones) el 22/06/2020 00:37:33
Muchas gracias! Ya lo acabo de ver más claro creo.

Entonces si en el primer programa cambio la línea 3 por la 4 y viceversa, debería funcionar no?
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
Imágen de perfil de Rodrigo
Val: 1.623
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Duda EmptyStackException

Publicado por Rodrigo (429 intervenciones) el 22/06/2020 06:25:26
En el primer programa puedes completamente eliminar la linea que contiene el for (lineas 4 y 8), si tu intencion es hacer pop de todos los elementos del stack. Te quedas con la logica de adentro del for (lineas 6 y 7), pero al interior del while.
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