Dúvida com a classe Scanner

Olá pessoal é o seguinte:
Se eu quero receber do usuário 3 textos utilizando a classe scanner eu faço o seguinte:

String p1 = " ";
String p2 = " ";
String p3 = " ";
Scanner entrada = new Scanner(System.in);
p1 = entrada.next();
Scanner entrada2 = new Scanner(System.in);
p2 = entrada.next();
Scanner entrada3 = new Scanner(System.in);
p3 = entrada.next();
System.out.println(p1 + " " + p2 + " " + p3); 

Se eu colocar o nextLine quando estiver recebendo a entrada 3, ele não recebe a entrada 3 e mostra as duas primeiras, agora se estiver NEXT nos 3, ou nextLine nos três, o programa recebe as 3 corretamente.
Minha pergunta é a seguinte: Alguém poderia me explicar a diferença entre os comandos o nextLine e o next?

Agradeço desde já,
Fernando.

Quando vc usa next vc guarda string de sem espaço, já com nextLine vc pega as strings com espaço e só pára a leitura quando o enter for pressionado.
Mas o nextLine apresenta alguns problemas, as vezes ele pula as entradas seguintes. Já postei uma duvida dessa aqui no GUJ, me falaram q é por causa do enter, q as leituras posteriores irão ler.

Eu estava com este problema ai enquanto não os testes do programa eram feitos por linha de comando usei um nextLine atras do outro:

System.out.println("Entre com o nome completo: ");
nome = input.nextLine();
nome = input.nextLine();

Pelo menos para a etapa de testes funcionou, ai depois que foi implementada a interface da aplicação retirei tudin.

E como você fez depois que retirou para continuar lendo os dados?
Pelo que eu entendi, se eu quiser que o usuário digite o nome dele completo, eu teria que usar o nextline por que ele capta os espaços. Caso eu tivesse capturando o nome com next, a variável que guarda o nome só capturaria o primeiro nome, é isso?

Grato,
Fernando

Isso…
Se vc estiver usando o next vc irá capturar o primeiro nome de entrada.
Eu tirei, mas a entrada agora era atraves de um JtextField =)
Não precisando mais da classe Scanner.

Mas na sua aplicação os dados serão inseridos atraves de linha de comando né?
Ai é complicado, pq repetir o nextLine duas vezes pode ser comparado como uma gambiarra.
Teria q arrumar outro jeito… dá uma pesquisadinha no forum, pois vc não foi o primeiro e nem será o último a ter essa duvida com a classe Scanner.

Até \o/

Não sei se te serve mais tu pode usar JoptionPane:

public class Teste {

	public Teste() {
		String nome = JOptionPane.showInputDialog("Digite o seu nome");
		String idade = JOptionPane.showInputDialog("Digite a sua idade");
		int idadeFutura = Integer.parseInt(idade) + 5;
		
		String msg = nome + ", daqui a cinco anos vc terá: " + idadeFutura + " anos!"; 
		
		System.out.println(msg);
		JOptionPane.showMessageDialog(null, msg);
	}
	
	public static void main(String[] args) {
		new Teste();
	}
}

Isso ivo costa, a solução para vc escapar do Scanner é usar interface gráfica =)

Obrigado pessoal! com a interface gráfica eu já havia conseguido. Pelo que estou observado, é melhor abandonar essa classe scanner e ficar na gráfica e depois que eu estiver mais avançado, e fazendo interfaces com o usuário, usar o jtextfield.

Obrigado pelos comentários.
Grato,

veja

flw!

Detalhe: no seu código, você só precisava declarar um objeto Scanner. entrada2 e entrada3 estão à toa.