1

В цикле for() мне нужно делать вводы строк с консоли и добавлять их в массив. По непонятным мне причинам первая итерация проходит, запихивая в массив пустую строку. До этого я хочу с консоли ввести размер этого массива. Если я это делаю в main() и передаю в функцию размер, то всё в порядке, но я хочу делать это внутри функции. Подскажите в чём причина, что после ввода размера с помощью in.nextInt() считывается пустая строка с помощью in.nextLine() ?

public static void Salads() {
    Scanner in = new Scanner(System.in);
    System.out.print("Введи количество салатов - ");
    int quantity = in.nextInt();
    String [] salads = new String [quantity];

    for(int i=0; i < quantity; ++i) {
        System.out.println("размер i в цикле = " + i);
        System.out.print("Введи название салата - ");
        salads[i] = in.nextLine();
        System.out.println("первый [0] элеменет в массиве салаты = " + salads[0]);
    }

Множество println это я для себя делал, как маркеры

insolor
  • 49,104
Alabala
  • 11
  • 2

1 Answers1

1

Попробуйте так:

int quantity = in.nextInt();in.nextLine();

Если вы ввели, например 5, то на самом деле там будет еще символ перевода строки, например "5\n", кроме того, .nextInt считает "5", а символ перевода останется, его как раз и получите при вызове nextLine

gil9red
  • 77,085
  • Благодарю, а его как-то можно обнулить не вызывая дополнительно nextLine(); после вызова nextInt() ? – Alabala May 26 '20 at 12:00
  • Если я вас правильно понял, то можно, но нужно вместо nextInt сразу вызывать nextLine и приводить полученную строку в число: https://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#valueOf(java.lang.String) – gil9red May 27 '20 at 07:46