@akela99

Как Java Scanner работает в этой ситуации?

Как Java Scanner работает в этой ситуации?

Есть задача.
Ввести несколько элементов для массива.
Ввести сколько сделать перестановок (swap).
Ввести какие индексы в массиве переставить.
Напечатать результат.
Пример
Input:
1 2 3 4 5 6
2
0 1
3 5
Output: 2 1 3 6 5 4

Проблема – считать 2 индекса для swap, т.к. scanner.nextInt() считывает только первую цифру. Тогда считываю как String, разбиваю на массив, передаю в метод swap элементы массива как аргументы.

Код выбрасывает при вводе индексов
Exception in thread "main" java.lang.NumberFormatException: For input string: ""

import java.util.*;
    class Main {
        public static void main(String[] args) {
          Scanner scanner = new Scanner(System.in);
          String input = scanner.nextLine();
          ArrayList<String> list = new ArrayList<>(Arrays.asList(input.split(" ")));
          int swapNum = scanner.nextInt();
           scanner.nextLine();
          for (int i = 0; i < swapNum; i++) {
              String[] swap = scanner.nextLine().split(" ");
              int first = Integer.parseInt(swap[0]);
              int second = Integer.parseInt(swap[1]);
              Collections.swap(list, first, second);
               
          }
          for (String item : list) {
                System.out.print(item + " ");
            }
        }   
    }

Я посмотрел в решение. Ответ:
for (int i = 0; i < swapNum; i++) {
   Collections.swap(list, scanner.nextInt(), scanner.nextInt());       
}


1 - Почему код выбрасывает Exception ? Как scanner считывает информацию ?
2 - Почему в решении scanner.nextInt() считывает обе цифры через пробел, а не только первую цифру ?

====
По 1 вопросу
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Перемудрили вы что-то в цикле. Там немного проще:
for (int i = 0; i < swapNum; i++) {
                var first = scanner.nextInt();
                var second = scanner.nextInt();
                Collections.swap(list, first, second);
            }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект