Подтвердить что ты не робот

Ввод строки Java Scanner

Я пишу программу, которая использует класс Event, в котором есть экземпляр календаря и описание типа String. В методе создания события используется сканер для ввода месяца, дня, года, часа, минуты и описания. Проблема, с которой я столкнулась, заключается в том, что метод Scanner.next() возвращает только первое слово перед пробелом. Поэтому, если вход "Мой День рождения", описание этого экземпляра события просто "Мой".

Я провел некоторое исследование и обнаружил, что люди использовали Scanner.nextLine() для этой проблемы, но когда я пытаюсь это сделать, он просто пропускает прошлое, куда должен идти вход. Вот как выглядит часть моего кода:

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

И это результат, который я получаю:

Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012

Он пропускает пробел, чтобы ввести описание String, и в результате описание (которое изначально установлено в пустое пространство - "") никогда не изменяется.

Как я могу это исправить?

4b9b3361

Ответ 1

Когда вы читаете в дневном часовом месяце месяца с чем-то вроде nextInt(), он оставляет остальную часть строки в парсере/буфере (даже если он пуст), поэтому, когда вы вызываете nextLine(), вы читаете остальную часть это первая строка.

Я предлагаю вам вызвать scan.nextLine() перед тем, как напечатать следующее приглашение, чтобы отбросить остальную часть строки.

Ответ 2

Когда вы читаете в дневном часовом месяце месяца с чем-то вроде nextInt(), он оставляет остальную часть строки в парсере/буфере (даже если он пуст), поэтому, когда вы вызываете nextLine(), вы читаете остальную часть это первая строка.

Я предлагаю вам использовать scan.next() вместо scan.nextLine().

Ответ 3

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

Ответ 4

Если вы используете метод nextLine(), следующий сразу за методом nextInt(), nextInt() считывает целочисленные токены; из-за этого последний символ новой строки для этой строки целочисленного ввода все еще ставится в очередь во входном буфере, и следующая функция nextLine() будет читать остаток целой строки (которая является пустой). Таким образом, мы читаем, может прочитать пустое место, чтобы другая строка могла работать. Проверьте код ниже.

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int i = scan.nextInt();
        Double d = scan.nextDouble();
        String f = scan.nextLine();
        String s = scan.nextLine();


        // Write your code here.

        System.out.println("String: " + s);
        System.out.println("Double: " + d);
         System.out.println("Int: " + i);
    }
}

Ответ 5

используйте это, чтобы очистить предыдущий буфер клавиатуры перед сканированием строки это решит вашу проблему scanner.nextLine();//это для очистки буфера клавиатуры