[Resolvido] Leitura teclado

O código abaixo não faz corretamente a leitura do teclado, eu tentei inicialmente usando a classe Scanner mas tá dando na mesma que essa aí. Eu desconfio que seja algo relativo ao buffer do teclado, tentei o System.out.flush() mas também não deu. Só sei que nada sei, aí vim aqui perguntar como resolver o problema pq tá algo fora da minha capacidade de imaginação.

Acontece o seguinte até a parte de pedir o valor tá ok, mas assim q eu dou enter ele roda o switch 3x no valor default e pára pedindo novamente outro valor.

Se precisar eu posso as outras classes aqui pra vcs darem uma analizada, mas não tem nenhum problema nelas, mas pra compilar, óbvio q é necessário x)

[code]import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class TesteBiblioteca {
private static void Menu(){
System.out.println(“1 - Adicionar livro”);
System.out.println(“2 - Dados de um livro”);
System.out.println(“3 - Todos os livros”);
System.out.println(“4 - Excluir livro”);
System.out.println(“5 - Fecha execução”);
}
private static void Imprime (Livros liv){
System.out.println (“Título:”+liv.getTitulo());
System.out.println ("Autor: "+liv.getAutor());
System.out.println ("Editora: "+liv.getEditora());
}
public static void main(String[] args) throws IOException {
Biblioteca biblioteca = new Biblioteca();
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
int opcao;
do {
Menu();
opcao = input.read();
switch (opcao){

		case 1:
			String titulo, autor, editora;
			System.out.println("Digite o nome do livro:");
			titulo = input.readLine();
			System.out.println("Digite o nome do autor:");
			autor = input.readLine();
			System.out.println("Digite o nome da editora:");
			editora = input.readLine();
			Livros aux = new Livros (titulo, autor, editora);
			if (biblioteca.addLivro(aux)==false)
				if (biblioteca.addLivro(aux.getTitulo(),aux.getAutor(),aux.getEditora())==false)
					System.out.println("Ocorreram erros ao adicionar o livro");
			break;
		case 2:
			String title;
			System.out.println("Digite o nome do livro");
			title = input.readLine();
			Livros aux2 = biblioteca.getLivro(title);
			if (aux2 !=null){
				Imprime(aux2);
			}
			else System.out.println ("O livro não existe");
			break;
		case 3:
			Livros[] aux3 = biblioteca.getListaLivros();
			for (int i=0; i<aux3.length;i++){
				Imprime(aux3[i]);
			}
			break;
		case 4:
			String rtitle;
			System.out.println("Digite o nome do livro a ser excluído");
			rtitle = input.readLine();
			if (biblioteca.removeLivro(rtitle)==false){
				if (biblioteca.removeLivro(biblioteca.getLivro(rtitle))==false)
					System.out.println("Ocorreu um erro na exlusão do livro");
			}
			break;
		case 5:
			System.out.println("Fechado execução");
			break;
		default:
			System.out.println ("Opção inválida");
		    break;
		}
		
	} while (opcao!=5);
	

}

}[/code]

Eu tive um problema com Scanner uma vez.

http://www.guj.com.br/posts/list/77982.java

Quem sabe pode ser isso. Qualquer coisa, dá um grito.

BufferedReader.read() lê um caracter do teclado, e retorna seu código ASCII. Por exemplo, se você digitar “1” e teclar ENTER, ele irá ser executado 2 vezes , e retornar 49 (o código ASCII para o dígito ‘1’) e mais um código para o ENTER (não sei se 10 ou 13).

Você tem de usar Scanner.nextInt()

Boa boa, o andré resolveu o problema e Thingol deu uma moral sobre o BufferedReader.

Resolvido