1

Тема: Зчитування рядків

Добрий ранок.

Є поставлена задача, написати олімпіадну задачу, в деталі завдання вдаватися не буду, тому що хочу зробити сам, можливо потім, якщо буде повний ступор то поділюся думками.

Щодо заголовку теми... Як вже зрозуміло, я пишу на Java, в середовищі Eclipse.

Виникло таке питання: "Як зчитати дані рядкового типу з пропусками?".

Не так давно була практика по Java, де нам розповіли про такий клас, як Scanner. Цей клас зчитує майже все ідеально окрім одного моменту, зчитування рядка.

Приклади використання Scanner

Scanner scan = new Scanner(System.in);
int n = scan.nextInt(); // Зчитування цілого числа
String str = scan.next(); // Зчитування рядка без пропусків
String str_spaced = scan.nextLine(); // Зчитування рядка з пропусками

Примітка: scan.next() не може зчитати рядок такого формату: "слово1 слово2 слово3" і т.д., точніша кажучи відбудеться така ось штука, якщо вивести результат зчитування: "слово1".

Хто цього не знає, або якщо комусь цікаво, ось загальне рішення зчитування

Знайшов також таку ось штуковинку.

Так до чого я це все пишу? В мене виникло питання щодо метода .nextLine().
Використовую в такому контексті:

Код

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scan = new Scanner(System.in);
        
            System.out.print("Input count of rows: ");
            int n = scan.nextInt();
            String line = null;
        
            for (int i = 0; i < n; i++) {
                System.out.print("logans@logans:~$ ");
                line = scan.nextLine();
            }        
        }

В результаті отримую ось таку картину:

Результат

Input count of rows: 6
logans@logans:~$ logans@logans:~$ й
logans@logans:~$ ц
logans@logans:~$ у
logans@logans:~$ к
logans@logans:~$ е

Тобто на першій ітерації циклу, зчитує, здається "\n", а потім працює нормально.
Тому і звертаюся до вас по допомогу.

Якщо хтось зрозумів чи згадав, що це за завдання то я попрошу не світити його тут, можна запитати мене в пп.

Дякую за увагу, в мене все.  :)

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

2

Re: Зчитування рядків

Ну правильно - зчитує \n від першого введеного рядка 6\n.
Взагалі тут проблема в тому, що є кілька стилів роботи з вхідними даними - і nextLine втілює одну концепцію, next - іншу, а nextString/nextInt/netEtc - ще іншу. І при переході між стилями можливі артефакти. Тому просто додавайте nextLine() при переході від вводу за допомогою nextInt до вводу по nextLine.

Подякували: Logans1

3

Re: Зчитування рядків

koala написав:

Ну правильно - зчитує \n від першого введеного рядка 6\n.
Взагалі тут проблема в тому, що є кілька стилів роботи з вхідними даними - і nextLine втілює одну концепцію, next - іншу, а nextString/nextInt/netEtc - ще іншу. І при переході між стилями можливі артефакти. Тому просто додавайте nextLine() при переході від вводу за допомогою nextInt до вводу по nextLine.

Дякую, а можна якось конкретизувати за допомогою коду вашу останнє речення, якщо вам не важко? Я погано його зрозумів.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

4

Re: Зчитування рядків

System.out.print("Input count of rows: ");
int n = scan.nextInt();
String line = null;

scan.nextLine(); //перехід на наступний рядок

for (int i = 0; i < n; i++) {
  System.out.print("logans@logans:~$ ");
  line = scan.nextLine();
} 
Подякували: Logans1