Problemas com leitura usando Scanner

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?

grato!

kra posta o código aí do pro…

Tu pode ter mais informações na API do JAVA entra aí…

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html

t+ :smiley:

[quote=ppontes]kra posta o código aí do pro…

Tu pode ter mais informações na API do JAVA entra aí…

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html

t+ :smiley: [/quote]
abaixo um codigo ilustrando o erro.

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:

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 &gt peso2) {
			System.out.printf ("%s, com %d kg%n", nome1, peso1);
		} else if (peso1 &lt 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=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 &gt peso2) {
			System.out.printf ("%s, com %d kg%n", nome1, peso1);
		} else if (peso1 &lt 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á!

[quote=icarocd][quote=ppontes]kra posta o código aí do pro…

Tu pode ter mais informações na API do JAVA entra aí…

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html

t+ :smiley: [/quote]
abaixo um codigo ilustrando o erro.

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); }}