pessoal, quando eu faço um nextInt usando um objeto Scanner, e em seguida um nextLine com o mesmo, há erro porque a leitura só vai pegar um \n. Pra contornar isso eu estou usando um outro nextLine antes do que eu realmente quero… Tem como fazer isso sem essa gambiarra? Tipo em C que temos o fflush(stdin)… :roll:
aproveitando, onde obtenho mais informações sobre essas leituras a fim de tirar tais duvidas?
importjava.util.Scanner;publicclassClasse{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intvalor=scanner.nextInt();//scanner.nextLine(); //GAMBIARRA!Stringfrase=scanner.nextLine();//A LINHA ACIMA TEM UMA LEITURA PROBLEMATICA!?!System.out.println(valor+","+frase);}}
eu ja tinha lido a documentação da classe antes de perguntar! mas olhei aqui, novamente, e nao achei nada a respeito…
obs: estranhamente as classes de fluxo de saída tem o metodo flush, porem nao o vi para as classes de fluxo de entrada. :roll:
T
thingol
Chamar nextLine para terminar a leitura do resto da linha não é gambiarra, é assim mesmo (ugh).
Por exemplo:
importjava.util.*;classExercicio{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);System.out.print("Nome da primeira pessoa: ");Stringnome1=scan.nextLine();System.out.print("Peso em kg: ");intpeso1=scan.nextInt();scan.nextLine();System.out.print("Nome da segunda pessoa: ");Stringnome2=scan.nextLine();System.out.print("Peso em kg: ");intpeso2=scan.nextInt();scan.nextLine();System.out.println("O individuo mais pesado eh: ");if(peso1>peso2){System.out.printf("%s, com %d kg%n",nome1,peso1);}elseif(peso1<peso2){System.out.printf("%s, com %d kg%n",nome2,peso2);}else{System.out.printf("%s e %s tem o mesmo peso - %d kg%n",nome1,nome2,peso1);}}}
É feio mas é assim mesmo.
I
icarocd
thingol:
Chamar nextLine para terminar a leitura do resto da linha não é gambiarra, é assim mesmo (ugh).
Por exemplo:
importjava.util.*;classExercicio{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);System.out.print("Nome da primeira pessoa: ");Stringnome1=scan.nextLine();System.out.print("Peso em kg: ");intpeso1=scan.nextInt();scan.nextLine();System.out.print("Nome da segunda pessoa: ");Stringnome2=scan.nextLine();System.out.print("Peso em kg: ");intpeso2=scan.nextInt();scan.nextLine();System.out.println("O individuo mais pesado eh: ");if(peso1>peso2){System.out.printf("%s, com %d kg%n",nome1,peso1);}elseif(peso1<peso2){System.out.printf("%s, com %d kg%n",nome2,peso2);}else{System.out.printf("%s e %s tem o mesmo peso - %d kg%n",nome1,nome2,peso1);}}}
É feio mas é assim mesmo.
é uma baita gambiarra sim 8)
tanto que se você faz um next usando Scanner apos um nextInt nao dá problema, só com nextLine que isso acontece. :?
T
thingol
A classe “Scanner” tem um comportamento muito semelhante ao scanf que existe em C (argh - o scanf é notoriamente esquisito), portanto mesmo essa coisa de você fazer um “nextLine” depois de um “nextInt” é semelhante ao que você precisaria fazer usando só o “scanf”.
N
nakamura-jr
icarocd - eu utilizei seu cod para fazer um teste e deu certo!
eu queria saber como posso integrar meu projeto em um banco de dados como o MySql usando o Eclipse
aguardo respostas
grato desde já!
R
robertoafl
icarocd:
ppontes:
kra posta o código aí do pro…
Tu pode ter mais informações na API do JAVA entra aí…
importjava.util.Scanner;publicclassClasse{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intvalor=scanner.nextInt();//scanner.nextLine(); //GAMBIARRA!Stringfrase=scanner.nextLine();//A LINHA ACIMA TEM UMA LEITURA PROBLEMATICA!?!System.out.println(valor+","+frase);}}
eu ja tinha lido a documentação da classe antes de perguntar! mas olhei aqui, novamente, e não achei nada a respeito…
obs: estranhamente as classes de fluxo de saída tem o metodo flush, porem não o vi para as classes de fluxo de entrada. :roll:
public class Classe {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int valor = scanner.nextInt();
String frase = scanner.next(); //ALTERAÇÃO
System.out.println(valor + "," + frase);
}}