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?
import java.util.Scanner;
public class Classe
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int valor = scanner.nextInt();
//scanner.nextLine(); //GAMBIARRA!
String frase = 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:
[quote=thingol]Chamar nextLine para terminar a leitura do resto da linha não é gambiarra, é assim mesmo (ugh).
Por exemplo:
import java.util.*;
class Exercicio {
public static void main(String[] args) {
Scanner scan = new Scanner (System.in);
System.out.print ("Nome da primeira pessoa: ");
String nome1 = scan.nextLine();
System.out.print ("Peso em kg: ");
int peso1 = scan.nextInt(); scan.nextLine();
System.out.print ("Nome da segunda pessoa: ");
String nome2 = scan.nextLine();
System.out.print ("Peso em kg: ");
int peso2 = 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);
} else if (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.[/quote]
é 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. :?
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”.
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á!
import java.util.Scanner;
public class Classe
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int valor = scanner.nextInt();
//scanner.nextLine(); //GAMBIARRA!
String frase = 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: [/quote]
Pesquisei em http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html e não conseguir entender a diferença entre o scanner.nextLine(); e o scanner.next();
O código acima sem o nextLIne() não tem o funcionamento esperado, mas o código abaixo funciona corretamente apos ter sido modificado:
import java.util.Scanner;
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);
}}