Рассмотрим следующий упрощенный пример:
public class Example {
public static void main(String[] args) {
int[] factors = {1, 2, 3};
ArrayList<Integer> f = new ArrayList(Arrays.asList(factors));
System.out.println(f);
}
}
В строке println это печатает что-то вроде «[[I @ 190d11]», что означает, что вы фактически создали ArrayList, который содержит массивы int .
Ваша IDE и компилятор должны предупреждать о непроверенных назначениях в этом коде. Вы всегда должны использовать new ArrayList<Integer>()
или new ArrayList<>()
вместо new ArrayList()
. Если бы вы использовали его, произошла бы ошибка компиляции из-за попытки передать List<int[]>
в конструктор.
Не существует автобокса от int[]
до Integer[]
, и в любом случае автобокс является только синтаксическим сахаром в компиляторе, поэтому в этом случае вам нужно сделать копию массива вручную:
public static int getTheNumber(int[] factors) {
List<Integer> f = new ArrayList<Integer>();
for (int factor : factors) {
f.add(factor); // after autoboxing the same as: f.add(Integer.valueOf(factor));
}
Collections.sort(f);
return f.get(0) * f.get(f.size() - 1);
}