I'm escrevendo um programa que utiliza uma classe de Eventos, que tem nele uma instância de um calendário, e uma descrição do tipo String. O método de criação de um evento utiliza um Scanner para tomar num mês, dia, ano, hora, minuto, e uma descrição. O problema I'm que tenho é que o método Scanner.next() só devolve a primeira palavra antes de um espaço. Assim, se a entrada for "My Birthday", a descrição dessa instância de um Evento é simplesmente "My".
Fiz alguma pesquisa e descobri que as pessoas usaram Scanner.nextLine() para esta edição, mas quando tento isto, simplesmente ultrapassa para onde a entrada deve ir. Eis o aspecto de uma secção do meu código:
System.out.print("Please enter the event description: ");
String input = scan.nextLine();
e.setDescription(input);
System.out.println("Event description" + e.description);
e.time.set(year, month-1, day, hour, min);
addEvent(e);
System.out.println("Event: "+ e.time.getTime());
E este é o resultado que eu recebo:
Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012
Salta do espaço para introduzir a descrição String, e como resultado, a descrição (que está inicialmente definida para um espaço em branco - " "), nunca é alterada.
Como posso resolver isto?
Quando lê no mês do ano minutos do dia/hora com algo como nextInt() deixa o resto da linha no parser/buffer (mesmo que esteja em branco) por isso quando liga para nextLine() está a ler o resto desta primeira linha.
Sugiro que chame scan.nextLine() antes de imprimir o seu próximo aviso para descartar o resto da linha.
Quando se lê no mês do ano minutos de dia/hora com algo como nextInt()
deixa o resto da linha no parser/buffer (mesmo que esteja em branco), por isso quando se chama nextLine()
está-se a ler o resto desta primeira linha.
Sugiro que utilize scan.next()
em vez de scan.nextLine()
.
Scanner ss = new Scanner(System.in);
System.out.print("Enter the your Name : ");
// Below Statement used for getting String including sentence
String s = ss.nextLine();
// Below Statement used for return the first word in the sentence
String s = ss.next();