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!
Scannerdados=newScanner(System.in);System.out.println("Informe o codigo: ");intcodigo=dados.nextInt();System.out.println("Informe o tema: ");Stringtema=dados.nextLine();System.out.println("Informe o custo");doublecusto=dados.nextDouble();System.out.println("Informe a quantidade");intqnt=dados.nextInt();Datedata=newDate();
Quando mando o valor de codigo, ele pula tema e passa direto para o custo;
Scannerdados=newScanner(System.in);System.out.println("Informe o tema: ");Stringtema=dados.nextLine();System.out.println("Informe o codigo: ");intcodigo=dados.nextInt();System.out.println("Informe o custo");doublecusto=dados.nextDouble();System.out.println("Informe a quantidade");intqnt=dados.nextInt();Datedata=newDate();
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?
Scannerdados=newScanner(System.in);System.out.println("Informe o tema: ");Stringtema=dados.nextLine();System.out.println("Informe o codigo: ");intcodigo=dados.nextInt();System.out.println("Informe o custo");doublecusto=dados.nextDouble();System.out.println("Informe a quantidade");intqnt=dados.nextInt();Datedata=newDate();
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
entanglement
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!