Java Scanner ListArray ParseInt Попробовал справиться с закрытием потока System.in через строковые методы. Получил исключение

Ввод:

-574 -484 444 -217 978 -370 269 -9 189

Scanner input = new Scanner(System.in);
String sc = input.nextLine();
String[] numbers = sc.split(" ");
input.close();
List result = new ArrayList<>();
for (int x = 0; x < numbers.length; x++) {
    String item = numbers[x];
    if (result.contains(item)) {
        continue;
    }
    result.add(item);
}
int[] vals = new int[result.size()];
for(int x = 0; x<result.size(); x++) {
    vals[x] = Integer.parseInt(result.get(x));
}
System.out.println(vals);

Результат меня удивил ... ( ожидал, что заберёт строку, распарсит в целые и выдаст в массиве ... -574 -484 444 -217 978 -370 269 -9 189 [I@37bba400


Ответы (1 шт):

Автор решения: Michel_T.

Вопрос очень неясен, нужно детально описывать проблему и прикладывать ошибку. Попробую раскрыть из того что видно.

  1. List result = new ArrayList<>(); - это нетипизированный (raw-тип) список, поэтому result.get() вернёт Object, поэтому компилятор выдаст ошибку на Integer.parseInt(result.get(x)). Наилучший вариант здесь - сделать типизацию: List<String> result = new ArrayList<>();
  2. System.out.println(vals) выдаёт дефолтное строковое представление массива. Дефолтным строковым представлением массива является вот эта слабочитаемая абракадабра [I@37bba400, которая обозначает что это массив целых с хешем равным 0x37bba400; Для нормального представления в строке стоило бы использовать утилитный метод Arrays.toString: System.out.println(Arrays.toString(vals));
  3. Это не ошибка, но я бы советовал вместо явного закрытия стрима вызовом close(), использовать try-with-resources. Итого, после всех правок, код должен выглядеть как-то так:
        try (Scanner input = new Scanner(System.in)) {
            String sc = input.nextLine();
            String[] numbers = sc.split(" ");

            List<String> result = new ArrayList<>();
            for (int x = 0; x < numbers.length; x++) {
                String item = numbers[x];
                if (result.contains(item)) {
                    continue;
                }
                result.add(item);
            }
            int[] vals = new int[result.size()];
            for (int x = 0; x < result.size(); x++) {
                vals[x] = Integer.parseInt(result.get(x));
            }
            System.out.println(Arrays.toString(vals));
        }

Для введённой строки -574 -484 444 -217 978 -370 269 -9 189 вывод будет следующий:

[-574, -484, 444, -217, 978, -370, 269, -9, 189]

→ Ссылка