Capturando string com espaços

Boa tarde pessoal! Estou fazendo um programa onde preciso capturar uma string considerando os espaços, ou seja, preciso capturar o nome completo da pessoa. Já fiz isso em outros programas usando o scan.nextLine() e funcionou beleza, porém neste programa está dando pala. Inicio o programa solicitando que o usuário entre com o nome da pessoa completa, mas o programa já passa para a próxima etapa solicitando o sexo, nem ao menos permite que a pessoa informe o nome. O que será que está havendo? Abaixo está a parte do código com problema e a impressão do console para vocês verem o que está sendo impresso:

System.out.println("Informe o nome completo com até <30 caracteres>:");
   String n = scan.nextLine();
   System.out.println("Informe o sexo: ");
   String s = scan.next();

#Impressão no console:

OPÇÃO 1: Cadastro de jazido perpétuo

Informe o nome completo com até <30 caracteres>:
Informe o sexo:

Se puderem me explicar desde já obrigado!

Esse scan é um objeto Scanner com entrada padrao? Se sim,
olha o teste que eu fiz do teu codigo:

public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Informe o nome completo com até <30 caracteres>:"); String n = scan.nextLine(); System.out.println("Informe o sexo: "); String s = scan.next(); System.out.print("Nome: "+n+"\nSexo: "+s+"\n"); }

Funcionou normal…voce pode postar o codigo que esta acima desse? O problema pode estar antes.

Pode ser que o nextLine() esteja consumindo o finalizador de linha do println() anterior. Talvez a implementação desses métodos seja engessada, de forma que diferenças de SO ou de console possa influenciar o resultado. Tente usar print() ao invés de println().

Que estranho… não sei o que está havendo com o meu, vou postar a parte que está acima como vc pediu!

switch(opcao){
case 1:
   System.out.println("\n");
   System.out.println("OPÇÃO 1: Cadastro de jazido perpétuo");
   System.out.println("-----------------------------------------------");
   System.out.println("Informe o nome completo com até <30 caracteres>: ");
   String n = scan.nextLine();
   System.out.println("Informe o sexo: ");
   String s = scan.next();

Não tinha postado antes, pq se trata de um programa para registrar sepultamentos kkkk Se precisar eu posto o restante blz?

HAUahUHSUsh sepultamento é?

Entao assim, pode realmente ser o que o rmendes08 disse. Nao vejo nada de mais no codigo…Aqui funcionou normal. Voce ja tentou debugar pra ver o que esse scan ta pegando? Pode ser que ajude. Ou entao tira o ln mesmo pra ver o que acontece.

É tenso né? É um programa que me pediram para fazer aqui na cidade! Bom, estou fazendo aproveitando que ainda estou de férias! Ah, vou testar aqui o que o mendes disse, creio que seja algo do tipo mesmo, vou colocar os next() e ver no que dá! Tb vou debugar kkk, qualquer coisa eu posto aqui blz? Ah e se tiverem mais sugestões são bem vindas!

Abraço e obrigado pela atenção

Carlos e Mendes, encontrei o problema… bom, pelo menos resolveu kkk! É o seguinte, estava usando um objeto Scanner “scan” para capturar todas as entradas do usuário, porém parece que ele estava conservando algo dos dados inseridos anteriormente, assim como o mendes havia dito. Então o que fiz foi criar outro objeto Scanner “scan1” para capturar a string do nome completo, dai o problema parou. Nunca precisei fazer isso, mas se está funcionando então de boa né?

Abraço e obrigado pela ajuda!

É cara esse negocio de pegar da entrada padrao e ficar lixo lah é chato mesmo, e as vezes acontece, as vezes nao. Quando eu estudava C ficava p… pq ele sempre guardava lixo. Mas no java eu nunca tinha tido esse tipo de problema. Mas no C tinha metodos pra limpar o scan, no java tbm deve ter, para que voce nao precise ficar criando outros objetos. Claro que pra esse seu caso nao vai comprometer em nada ter dois objetos scan, mas pra sistemas maiores deve ser melhor usar um metodo de limpeza de scan.

Té mais.

[quote=Danielrricci]Carlos e Mendes, encontrei o problema… bom, pelo menos resolveu kkk! É o seguinte, estava usando um objeto Scanner “scan” para capturar todas as entradas do usuário, porém parece que ele estava conservando algo dos dados inseridos anteriormente, assim como o mendes havia dito. Então o que fiz foi criar outro objeto Scanner “scan1” para capturar a string do nome completo, dai o problema parou. Nunca precisei fazer isso, mas se está funcionando então de boa né?

Abraço e obrigado pela ajuda![/quote]

rsrsrsrsrs … sem ofensa, mas essa é típica POG. Você atacou apenas o sintoma do problema, e não o problema em si. É como remédio pra baixar a febre. Você diminui a febre mas não mata o vírus. O que eu sugiro é você rever o fluxo dos menus e encontrar o ponto que deixa dados sobrarem no buffer, talvez seja o caso de simplificá-lo. Caso contrário, é o típico problema que vai te infernizar durante o resto do desenvolvimento. Quanto antes você resolver, melhor para sua saúde.

[quote=rmendes08][quote=Danielrricci]Carlos e Mendes, encontrei o problema… bom, pelo menos resolveu kkk! É o seguinte, estava usando um objeto Scanner “scan” para capturar todas as entradas do usuário, porém parece que ele estava conservando algo dos dados inseridos anteriormente, assim como o mendes havia dito. Então o que fiz foi criar outro objeto Scanner “scan1” para capturar a string do nome completo, dai o problema parou. Nunca precisei fazer isso, mas se está funcionando então de boa né?

Abraço e obrigado pela ajuda![/quote]

rsrsrsrsrs … sem ofensa, mas essa é típica POG. Você atacou apenas o sintoma do problema, e não o problema em si. É como remédio pra baixar a febre. Você diminui a febre mas não mata o vírus. O que eu sugiro é você rever o fluxo dos menus e encontrar o ponto que deixa dados sobrarem no buffer, talvez seja o caso de simplificá-lo. Caso contrário, é o típico problema que vai te infernizar durante o resto do desenvolvimento. Quanto antes você resolver, melhor para sua saúde.[/quote]

Olá Pessoal,

Encontrei o mesmo problema em um exercício que estava criando e percebi que a causa do erro é o buffer não estar limpo antes do inicio da captura.

Para quem tiver este problema, antes de iniciar a captura de dados utilize a seguinte linha:

scan.nextLine(); <<

[quote=Danielrricci]Boa tarde pessoal! Estou fazendo um programa onde preciso capturar uma string considerando os espaços, ou seja, preciso capturar o nome completo da pessoa. Já fiz isso em outros programas usando o scan.nextLine() e funcionou beleza, porém neste programa está dando pala. Inicio o programa solicitando que o usuário entre com o nome da pessoa completa, mas o programa já passa para a próxima etapa solicitando o sexo, nem ao menos permite que a pessoa informe o nome. O que será que está havendo? Abaixo está a parte do código com problema e a impressão do console para vocês verem o que está sendo impresso:

System.out.println("Informe o nome completo com até <30 caracteres>:");
   String n = scan.nextLine();
   System.out.println("Informe o sexo: ");
   String s = scan.next();

#Impressão no console:

OPÇÃO 1: Cadastro de jazido perpétuo

Informe o nome completo com até <30 caracteres>:
Informe o sexo:

Se puderem me explicar desde já obrigado! [/quote]


Olá Pessoal,

Encontrei o mesmo problema em um exercício que estava criando e percebi que a causa do erro é o buffer não estar limpo antes do inicio da captura.

Para quem tiver este problema, antes de iniciar a captura de dados utilize a seguinte linha:

scan.nextLine(); <<

Exemplo:

usar o .reset(); depois de cada leitura realizada que aí ele limpa a memória e não dá mais bronca.