Duvida no erro de execução

bom gente, estou fazendo um projeto pessoal de um caixa de supermercado, mercearia, qualquer coisa parecida.


package controller;

import model.Console;

public class Mercearia {

    private static final int LOGIN = 1;
    private static final int PRODUTOS = 2;
    private static final int CARRINHO = 3;
    private static final int CADASTRAR = 4;
    private static final int SAIR = 5;

    public static void main(String[] args){

        Mercearia merc = new Mercearia();
        int opcao = SAIR;

        boolean logado = false;

        //loop principal do programa
        do{
            
            merc.menu();

            opcao = Console.lerInt("Escolha uma opcao: ");
            
            //caso a variavel opcao seja igual a umas das opções
            //apresentadas no menu ele vai entrar no case e 
            //executar o código, senão ele executará o default 
            switch(opcao){
 
                case LOGIN:
                    merc.Login();
                    break;
                case PRODUTOS:
                    System.out.println("Em construção");
                    break;
                case CARRINHO:
                    System.out.println("Em construção");
                    break;
                case CADASTRAR:
                    System.out.println("Em construção");
                    break;
                case SAIR:
                    break;
                default:
                    System.out.println("Opção inválida. Escolha " +
                            "uma opção válida.");
            }
            
        }while(opcao != SAIR);

    }

    //metodo responsável por exibir o menu na tela
    public void menu(){
    
        System.out.println("menu da mercearia\n");
        System.out.println("1 - Login");
        System.out.println("2 - Cadastrar");
        System.out.println("2 - Buscar Produtos");
        System.out.println("3 - Alterar Carrinho");
        System.out.println("4 - sair");
    }

    //responsável pela a entrada do usuário no sistema
    public void Login(){

        System.out.println("Login em construção");
    }
}

Eu boto o programa para rodar, até ai tudo bem. Aparece o menu, quando tinha que aparecer, e a frase “Escolha uma opção”, tudo bem.
Agora quando eu escolho a primeira até a quarta na roda , mas também a JVM não acusa erro nenhum. Quando eu escolho a 5ª opção o programa roda, ou seja, finaliza.
Será que alguém poderia me ajudar?

Desde já agradecido.

Faltou o break.

...
                default:
                    System.out.println("Opção inválida. Escolha " + "uma opção válida.");
                 break;

Não está funcionando corretamente? Quando vc escolher a opção 5 que é SAIR o programa sai do loop e finaliza como o esperado.

A ultima opção não precisa de break, pois ela é a última.

Cara, eu botei o break e ficou na mesma, não mudou nada