Erro ao atribuir valores com o Scanner

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!

[code] 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();

[/code]

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

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

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

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

mas como a ordem pode influenciar no resultado!

Obrigado!

[quote=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[/quote]

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.

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

obrigado a todos,

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

abrax!

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