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