Erro ao atribuir valores com o Scanner

6 respostas
BinhoAraujo

Boa noite pessoa,
estou com um pequeno problema com a classe Scanner, ja procurei mas nao encontrei nada falando sobre,
entao é o seguinte, quando vou atribuir os valores nos atributos usando o Scanner, ele passa direto!

Scanner dados = new Scanner(System.in);
                            
                            System.out.println("Informe o codigo: ");
                            int codigo = dados.nextInt();
                            System.out.println("Informe o tema: ");
                            String tema = dados.nextLine();
                            System.out.println("Informe o custo");
                            double custo = dados.nextDouble();
                            System.out.println("Informe a quantidade");
                            int qnt = dados.nextInt();
                            Date data = new Date();

Quando mando o valor de codigo, ele pula tema e passa direto para o custo;

Alguem pra dar essa força, desde já obrigado!

6 Respostas

Z

view plaincopy to clipboardprint?

Scanner dados = new Scanner(System.in);  
                               

                           System.out.println("Informe o tema: ");  
                           String tema = dados.nextLine();  

                           System.out.println("Informe o codigo: ");  
                           int codigo = dados.nextInt();  
                        
                           System.out.println("Informe o custo");  
                           double custo = dados.nextDouble();  

                           System.out.println("Informe a quantidade");  
                           int qnt = dados.nextInt();  

                           Date data = new Date();

tente nesta ordem e veja se funciona!
abraço

BinhoAraujo

Ok amigo, dps eu faço esse teste agora nao posso!

mas como a ordem pode influenciar no resultado!

Obrigado!

Zumbi!:
view plaincopy to clipboardprint?

Scanner dados = new Scanner(System.in);  
                               

                           System.out.println("Informe o tema: ");  
                           String tema = dados.nextLine();  

                           System.out.println("Informe o codigo: ");  
                           int codigo = dados.nextInt();  
                        
                           System.out.println("Informe o custo");  
                           double custo = dados.nextDouble();  

                           System.out.println("Informe a quantidade");  
                           int qnt = dados.nextInt();  

                           Date data = new Date();

tente nesta ordem e veja se funciona!
abraço

ribclauport

Post de onde foi retirada a citação:

Tem vários posts explicando este problema, na verdade os metodos nextInt, e outros next(s), não são apropriados para entradas de console, e sim para manipulação de arquivos…

Veja a explicação do “Viny” em conformidade com a primeira citação do “Bruno Laturner” nesse post:

Sendo assim, não é a ordem em que foi usado nextLine(), e sim uma particularidade resultante da funcionalidade do mesmo, como explicado pelo Bruno Laturner, para futuras consultas, ou mesmo , para ficar “aceitável”, segue abaixo o código:

Scanner dados = new Scanner(System.in); System.out.println("Informe o codigo: "); int codigo = Integer.parseInt(dados.nextLine()); System.out.println("Informe o tema: "); String tema = dados.nextLine(); System.out.println("Informe o custo"); double custo = Double.parseDouble(dados.nextLine()); System.out.println("Informe a quantidade"); int qnt = Integer.parseInt(dados.nextLine());

Espero ter ajudado.

E

O problema da classe Scanner é que ela replica o comportamento da função “scanf” do C.

Quem já mexeu nessa função sabe que ela tem esse comportamento inesperado, e que na prática você acaba usando uma combinação de gets + sscanf (a versão de scanf que lê de uma string).

BinhoAraujo

obrigado a todos,

e ribclauport vlw mesmo, agora sim entendi, muito boa a explicação!

abrax!

ribclauport

Na verdade foi o Viny e o Bruno e o entanglement, eu só repliquei os posts deles!
Créditos aos monstros sagrados do GUJ!

Criado 3 de junho de 2012
Ultima resposta 4 de jun. de 2012
Respostas 6
Participantes 4