El método apilar() ha de recibir un valor entre paréntesis.
Así está declarado:
public void apilar(int valor){
Pero tú al llamarlo no le estás dando ningún valor:
case 3:
pila.apilar();
break;
Es decir, le tienes que indicar el valor que quieres apilar.
Y se supone que tenemos solicitar al usuario dicho valor, algo como esto:
case 3:
System.out.print("Indique valor que quiere apilar: ");
pila.apilar(teclado.nextInt());
break;
En cuanto al método retirar(), el fallo principal es que no has separado con ; la instrucción System.out de la llamada al método:
case 4:
System.out.println("Ingrese el elemento a eliminar") pila.retirar();
break;
Falta el ; y mejor si separamos en dos líneas para mayor legibilidad:
case 4:
System.out.println("Ingrese el elemento a eliminar");
pila.retirar();
break;
Ahora no hay fallos de sintaxis, pero sí de lógica.
En el case 4, lanzas mensaje para que el usuario ingrese elemento a eliminar, pero no recoges por teclado ese elemento, así que el usuario no tiene posibilidad de teclear nada.
Pero es que además, el método retirar() no está preparado para recibir ningún argumento, así que aunque lo recogieras, no puedes dárselo al método.
El método retirar() que has escrito, lo que hace es retirar el primer nodo, no puedes indicarle un valor concreto para que lo retire:
//Elimina el elemento que se encuentra en el tope de la pila
public void retirar(){
if(!esVacio()){
//Asigna como primer nodo al siguiente de la pila
inicio= inicio.getSiguiente();
//Decremento de la variable del contador del tamaño de la pila
tamanio--;
}
}
Así que tienes que escribir un método nuevo que sí pueda recibir el valor que se ha de eliminar.
Lo que puedes hacer es
sobrecargar el método retirar() para que existan dos versiones:
- la que no recibe argumento y retira el primer nodo, que es la que ya tienes escrita
- la que si recibe argumento y retira el nodo que coincida con ese argumento.
Para
sobrecargar un método, simplemente has de volver a declararlo, indicando ahora el argumento que ha de recibir
//Elimina el elemento que se encuentra en el tope de la pila
public void retirar(){
if(!esVacio()){
//Asigna como primer nodo al siguiente de la pila
inicio= inicio.getSiguiente();
//Decremento de la variable del contador del tamaño de la pila
tamanio--;
}
}
//Sobrecarga del método retirar(), para que reciba un valor concreto para retirar
public void retirar(int valor) {
}
Ahora intenta escribir el código necesario para retirar el nodo que coincida con ese valor.
Cuando lo tengas, ya en el case 4 podrás pedir un valor al usuario y proporcionárselo al método sobrecargado:
case 4:
System.out.println("Ingrese el elemento a eliminar");
pila.retirar(teclado.nextInt());
break;