Duvida Exercicio Iniciante Pilha

Olá pessoal, sou novo no mundo da programação, e também a primeira vez que posto aqui no forum. Estou tentando fazer um exercicio sobre pilhas, porem estou encontrando dificuldades.

O exercicio pede para que apresente um menu com 4 opções:

1 - Cadastrar Numero
2 - Mostrar numeros pares
3 - excluir numero
4 - Sair

Observações:
a-) Implementar usando pilha
b-) Quando for escolhida a opção 1, só parar de cadastrar numero a hora que o usuário pressionar a tecla f
c-) Mostrar opção invalidade do menu
d-) Mostrar mensagem se usuário tentar realizar uma opção invalida (Ex: excluir numero se a pilha estiver vazia)

A minha principal dificuldade no momento é atender a observação b-) e é para ela que solicito ajuda de vocês. Criei um contador dentro do case 1 apenas para testar se a pilha estava cadastrando os numero corretamente, mas a intenção é ficar lendo o numero a ser empilhado até o usuário pressionar a tecla “f”. Como eu poderia fazer isso? Outra duvida é fazer com que ao usuario pressionar a tecla “f”, ele não finalizasse o programa, mas sim voltasse para o menu.

Segue o que tenho do codigo até o momento:

package pilha;

import java.util.Scanner;

 
public class Pilha {

    public Object[] pilha;
    public int posicaoPilha;
    
    public Pilha(){
        this.posicaoPilha = -1;
        this.pilha = new Object [1000];
    }
    
    public boolean pilhaVazia(){
        if(this.posicaoPilha == -1){
            return true;
        }
        return false;
    }
    
    public int tamanho (){
        if (this.pilhaVazia()){
            return 0;
        }
        return this.posicaoPilha +1;
    }
    
    public Object exibeUltimoValor(){
        if(this.pilhaVazia()){
            return 0;
        }
        return this.posicaoPilha +1;
    }
    
    public Object desempilhar (){
        if (pilhaVazia()){
            return null;
        }
        return this.pilha[this.posicaoPilha--];
    }    
    
    public void empilhar (Object valor){
        if (this.posicaoPilha < this.pilha.length -1){
            this.pilha[++ posicaoPilha] = valor;
        }
        
    }   
 
    public static void main(String[] args) {
        
        int contador=0;
        int numero;
        int opcao;
        Pilha p = new Pilha();
        Scanner entrada = new Scanner (System.in);
        
        System.out.printf("Digite a opção desejada:\n" + "1 - Cadastrar Numero\n" + "2 - Mostrar numeros pares\n" + "3 - Excluir Numero\n" + "4 - Sair\n\n");
        opcao = entrada.nextInt();
      
        switch (opcao){
             case 1:
                 while (contador < 5) {  
            
                 System.out.printf("Digite o numero a ser cadastrado\n");
                 numero = entrada.nextInt();
                 
                 p.empilhar(numero);
                 contador++; 
                 }                 
                 break;
            
             case 2:
                 
        }    
                       
          System.out.println(("O tamanho da pilha é: "+ p.exibeUltimoValor()));
        
        
    }
    
}


Na especificacao do trabalho diz que você tem de ficar inserindo valores até o usuario fornecer o caracter ‘f’, sendo assim, ao inves de usa um contador no while, use um while(true) e vá capturando as entradas até o usuario digitar f, quando ele digitar a letra f use o comando break para sair do laço repetitivo… agora para capturar a entrada, basta utilizar o metodo next() de scanner ao inves de nextInt…logicamente você terá de verificar se o usuário digitou um numero ou não.

rafaelccarli, acho que poderias fazer dessa forma…

public static void main(String[] args) {
        int numero;
        int opcao;
        Pilha p = new Pilha();
        Scanner entrada = new Scanner(System.in);

        opcao = lerOpcao(entrada);

        switch (opcao) {
            case 1:
                while (true) {
                    System.out.printf("Digite o número a ser cadastrado ou 'F' para sair\n");
                    String flag = entrada.next();
                    if (validarEntrada(flag)) {
                        //aqui transforma o texto em int
                        numero = Integer.parseInt(flag);
                        p.empilhar(numero);
                    } else {
                        if (flag.equalsIgnoreCase("F")) {
                            break;
                        } else {
                            System.err.println("Opção Inválida!\n"
                                    + "Digite um número ou 'F' para finalizar.");
                        }
                    }

                }
                break;
            case 2://..

            case 3://...

            case 4://...

            default:
                System.err.println("Opção Inválida!");

        }

        System.out.println(("O tamanho da pilha é: " + p.exibeUltimoValor()));

    }

    public static boolean validarEntrada(String flag) {
        char[] array = flag.toCharArray();
        //verifica se algum caracter do flag é diferente de algum número
        for (int i = 0; i < array.length; i++) {
            if (array[i] != '1' && array[i] != '2' && array[i] != '3'
                    && array[i] != '4' && array[i] != '5' && array[i] != '6'
                    && array[i] != '7' && array[i] != '8' && array[i] != '9'
                    && array[i] != '0') {
                //retorna falso quando possue caracter diferente de número
                return false;
            }
        }
        return true;
    }

    //Exibe opções e lê a opção digitada pelo usuário
    public static int lerOpcao(Scanner read) {
        int opcao;
        System.out.println("1 - Cadastrar Número");
        System.out.println("2 - Mostrar números pares");
        System.out.println("3 - Excluir número");
        System.out.println("4 - Sair");
        opcao = read.nextInt();
        return opcao;
    }

Você recebe a leitura dos números a serem cadastrados armazenando em uma String pois o usuário também pode digitar “F”.
Testa se o texto que ele digitou contém apenas números com o “validarEntrada(String flag)”, se for só número transforma o texto em número, se não conter apenas números, testa se foi a letra “F”, se também não foi exibe a mensagem que digitou algo inválido…