dúvida de looping

e ai gente, tudo beleza? aqui, estou fazendo um projeto para o meu curso, e eu estou com um problema, eu tenho o “looping pricipal” que dele vai para as outras classes do programa.

[code]package controller;

import model.Produto;

public class Mercearia {

private static final int LOGAR = 1;
private static final int CADASTRAR = 2;
private static final int COMPRA = 3;
private static final int ADM = 4;
private static final int SAIR = 5;

Produto prod;

Administracao admin;

public static void main(String [] args){

    Mercearia mer = new Mercearia();

    mer.menu();

    int opcao = Console.lerInt("escolha uma opção: ");

    //loop principal do programa
    do{

      switch(opcao){

          case LOGAR:
                  mer.logar();
               break;
          case CADASTRAR:
                  mer.cadastro();
               break;
          case COMPRA:
                 mer.comprar();
               break;
          case ADM:
                 mer.comprar();
               break;
          case SAIR:
                  System.out.println("saida do sistema");
               break;
          default:
                  System.out.println("Esta opção não existe, " +
                      "escolha um opção válida");

      }

    }while( opcao != SAIR );

}

public static void menu(){

    System.out.println("menu\n");
    System.out.println("1 - login");
    System.out.println("2 - cadastrar");
    System.out.println("3 - compra");
    System.out.println("4 - administração");
    System.out.println("5 - sair");

}

public void comprar(){

     int cod = Console.lerInt("Insira o código do produto");

     prod = new Produto(cod);

     int i = 1;

     String fim = Console.lerString( "" );

     //loop
      while( fim != "n" ){

        cod = Console.lerInt("Insira o código do produto");

        prod = new Produto(cod);

        i ++;

        fim = Console.lerString( "" );

     }
}

public void logar(){

String login = Console.lerString("lofin: ");
String senha = Console.lerString("senha: ");   

System.out.println("cadastro efetuado com sucesso");

}

public void cadastro(){

System.out.println("Em construção");


String nome = Console.lerString("Nome: ");
String login = Console.lerString("Login: ");
String senha = Console.lerString("senha: ");

}

public void administracao(){

admin.principal();

}

}[/code]

quando as outras classes param de ser executadas, elas são repeditas, e assim vai até eu sair do programa na marra, hehe.
Eu já olhei e olhei e não acho o que eu fiz de errado, será que alguém poderia me ajudar?

desde já muito grato

opcao != SAIR ???

Nao seria

(!opcao.equals(“SAIR”))

=====================

(opcao != 5)

No switch, no case SAIR seta a variavel opcao para sair.

case SAIR: System.out.println("saida do sistema"); opcao = SAIR; break;

[quote]opcao != SAIR ???

Nao seria

(!opcao.equals(“SAIR”))[/quote]

cara, o equals não é para comparar variáveis do tipo String, ou eu estou enganado?

Você está certo. O que está errado é que você não faz a leitura dentro do loop. Aí o programa nunca pergunta novamente o que o usuário quer fazer.

Passe a linha:

opcao = Console.lerInt("escolha uma opção: "); 

Para a linha 27. E deixe a linha 23 como:

int opcao;

Talvez fosse uma boa passar a chamada mer.menu() para dentro do loop também. Ou você terá que ter um usuário de muito boa memória.

muitíssimo obrigado, deu certo, valeu!!!