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.
→ Ссылка
Вопрос очень неясен, нужно детально описывать проблему и прикладывать ошибку. Попробую раскрыть из того что видно.
List result = new ArrayList<>();- это нетипизированный (raw-тип) список, поэтому result.get() вернёт Object, поэтому компилятор выдаст ошибку наInteger.parseInt(result.get(x)). Наилучший вариант здесь - сделать типизацию:List<String> result = new ArrayList<>();System.out.println(vals)выдаёт дефолтное строковое представление массива. Дефолтным строковым представлением массива является вот эта слабочитаемая абракадабра [I@37bba400, которая обозначает что это массив целых с хешем равным 0x37bba400; Для нормального представления в строке стоило бы использовать утилитный метод Arrays.toString:System.out.println(Arrays.toString(vals));- Это не ошибка, но я бы советовал вместо явного закрытия стрима вызовом 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]