Menu em Java

13 respostas
J

Boa tarde!

Alguém aqui tem algum link que ensina como fazer um menu de opções em Java?

Por exemplo:

1- Nome
2 - email
4- telefone
5-sair

[]'s

13 Respostas

yhhik

http://download.oracle.com/javase/1.3/docs/api/javax/swing/JMenuBar.html

E

pesquisa por menu --PRIME FACES

Andre_Rosa

Swing? Console?

J

Console.
Alguém?

ViniGodoy

Se é em console, é só usar o System.out.println para imprimir o menu. Use o método nextLine() do scanner para ler a opção desejada.

Scanner in = new Scanner(System.in); int opcao = 0; while (opcao != 5) { System.out.println("Menu de opções:"); System.out.println("1 - Informar nome"); System.out.println("2 - Informar e-mail"); System.out.println("5 - Sair"); try { opcao = Integer.parseInt(in.nextLine()); processar(opcao); } catch (NumberFormatException e) { System.out.println("Opção inválida!"); opcao = -1; } }

Andre_Rosa

ViniGodoy:
Se é em console, é só usar o System.out.println para imprimir o menu. Use o método nextLine() do scanner para ler a opção desejada.

Scanner in = new Scanner(System.in); int opcao; while (opcao != 5) { System.out.println("Menu de opções:"); System.out.println("1 - Informar nome"); System.out.println("2 - Informar e-mail"); System.out.println("5 - Sair"); try { opcao = Integer.parseInt(in.nextLine()); processar(opcao); } catch (NumberFormatException e) { System.out.println("Opção inválida!"); opcao = -1; } }

Vini,
Creio que o uso do while não seja, no entanto, uma boa prática. Eu faria diferente:

Scanner in = new Scanner(System.in); System.out.print("Escolha uma opção:\n[1] opção 1\n[2] opção 2\n>> "); int opc = in.nextInt(); switch(opc){ case 1: //opção 1 break; case 2: //opção 2 break; default: //opção inválida break; }

ViniGodoy

Ué, e por que usar o while não é uma boa prática?
Sem ele o menu aparece uma única vez.

Uma outra opção equivalente seria usar o do…while, mas não muda muita coisa.

ViniGodoy

O nextInt() para ler do console que não é uma boa prática. Ele deixa no buffer o \n, e pode comprometer futuras leituras do Scanner.
Para ler do console, o único método que deve ser usado é o nextLine().

gustavo_mb

O instrutor Narciso da Caelum chegou a comentar que o switch em Java deve ser evitado. Ele não entrou em detalhes, mas parece que é algo em relação a quebra de encapsulamento ou uma prática não tão orientada a objetos.

Alguém sabe me dizer o por que devemos evitar o uso de switch em Java?

Andre_Rosa

Um colega meu, bastante experiente com C, sempre dizia para ter cuidado com o while, para o programa não comer a memória da máquina. Não sei bem se é o caso, pois esse loop dificilmente fecaria infinito (isto é, se ficaria) mas, no entanto, há mesmo necessidade disso? Se o usuário vê as opções, ele não tem porque digitar algo errado. Acho que o mais coerente seria jogar no default (no caso do switch) e abortar o aplicação.

ViniGodoy

Nossa, disso nunca ouvi falar. O while é uma estrutura de controle, não consome 1 bit sequer de memória.
Que eu me lembre, em assembly, ele é transformado apenas num jump condicional.

Mas vou procurar sobre o assunto.

Coloquei o código no while, pois ele pode querer ler o nome e, depois disso, apresentar o menu novamente para que o usuário escolha outra coisa, como o e-mail. A opção de sair deixa claro que as outras opções não saem do programa, o que indica que o menu será reapresentado.

Mesmo que o usuário digite tudo certo, quando voltar ao menu, se você ainda estiver usando o mesmo Scanner, pode ter erros de leitura de não usar o nextLine(). O próximo nextInt() pode tentar interpretar o \n e ter um comportamente inconsistente. Na prática, métodos como esse só servem para ler arquivos (embora haja opções melhores).

Agora, achei estranho você falar em confiar que o usuário não irá fazer nada errado. No meu mundo, esse tipo de usuário simplesmente não existe. heheheh

ViniGodoy

gustavo_mb:
O instrutor Narciso da Caelum chegou a comentar que o switch em Java deve ser evitado. Ele não entrou em detalhes, mas parece que é algo em relação a quebra de encapsulamento ou uma prática não tão orientada a objetos.

Alguém sabe me dizer o por que devemos evitar o uso de switch em Java?

Normalmente o switch indica a presença de código que pode ser substituído por polimorfismo. Mas esse é um assunto bastante avançado, para um menu em console. hehehehe

Aqui tem um exemplo:

Andre_Rosa

Vou procurar a respeito também. Ele me disse isso, e eu não pesquisei a respeito. Se falei besteira, pela perdão.
E obrigado por esclarecer sobre o nextInt(). Eu não sabia disso.

Criado 30 de outubro de 2011
Ultima resposta 30 de out. de 2011
Respostas 13
Participantes 6