Scanner пропускает строки

171
21 января 2019, 11:30

проблема заключается в том что при считывании данных с клавиатуры с помощью методов класса Scanner, он пропускает строки (Date и Notes). Насколько я понял передается символ '\n' или '\0' конца строки с предыдущего ввода.

public void add() {
    Magazine a = new journal();
    System.out.println("Add journal");
    Scanner sc = new Scanner(System.in);
    System.out.println("Titre of journal");
    String titre= sc.nextLine();
    a.setTitre(titre);
    System.out.println("Price journal");
    float prix=sc.nextFloat();
    a.setPrix(prix);
    //ВОТ ЭТУ
    System.out.println("Date of Magazine");
    date= sc.nextLine();
    a.setDate(date);
    System.out.println("Category of journal");
    int category = sc.nextInt(); 
    a.setCategory(category);
    //ВОТ ЭТУ
    System.out.println("Notes of journal");
    String notes = sc.nextLine(); 
    a.setNotes(notes);
    Bibliotheque.GetList().add(a);
}
Answer 1

Всё дело в том, что команды next(), nextFloat() и т.д. - они читают только токет, то есть последовательность символов, которые не являются управляющими. Поэтому когда вы пишите nextFloat() и потом nextLine(), то Scanner сначала прочитает Float, а потом в следующем запросе будет идти до конца строки, которая наступит прямо вот сразу.

Вот так это будет работать:

public void add() {
    System.out.println("Add journal");
    Scanner sc = new Scanner(System.in);
    System.out.println("Titre of journal");
    String titre= sc.nextLine();
    System.out.println("Price journal");
    float prix=sc.nextFloat();
    sc.nextLine();
    //ВОТ ЭТУ
    System.out.println("Date of Magazine");
    String date= sc.nextLine();
    System.out.println("Category of journal");
    int category = sc.nextInt();
    sc.nextLine();
    //ВОТ ЭТУ
    System.out.println("Notes of journal");
    String notes = sc.nextLine();
    System.out.println(titre);
    System.out.println(prix);
    System.out.println(date);
    System.out.println(category);
    System.out.println(notes);
}

Результат:

Add journal
Titre of journal
>> sdflkj sdkfsd sdf
Price journal
>> 123.1
Date of Magazine
>> 12.12.12
Category of journal
>> 2
Notes of journal
>> dsfs fsdf sdf jdskfjksdf 
sdflkj sdkfsd sdf
123.1
12.12.12
2
dsfs fsdf sdf jdskfjksdf 

Чтобы понять как это лучше работать, я бы советовал вам глянуть исходник функции nextInt(). Он довольно простой, но покажет как это работает.

READ ALSO
БЭМ использование классов-цветов

БЭМ использование классов-цветов

В документации написано следующее

174
БЭМ стили, которые не меняются

БЭМ стили, которые не меняются

Есть ли смысл в таком коде, если тег p и все его содержимое имеет два стиля - text-align:center; color: blue :

169