[Resolvido] Leitura teclado

3 respostas
Pedro_Caldeira

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)

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);
		

	}

}

3 Respostas

Andre_Brito

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.

T

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()

Pedro_Caldeira

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

Resolvido

Criado 19 de junho de 2008
Ultima resposta 20 de jun. de 2008
Respostas 3
Participantes 3