这个转换有什么问题吗?
public int getTheNumber(int[] factors) {
ArrayList<Integer> f = new ArrayList(Arrays.asList(factors));
Collections.sort(f);
return f.get(0)*f.get(f.size()-1);
}
我在阅读了中找到的解决方案后做了这个从数组创建ArrayList。第二行(排序)getTheNumber(...)
导致以下异常:
线程“main”中的异常 java.lang.ClassCastException: [我无法转换为 java.lang.Comparable]
这里有什么问题吗?我确实意识到排序可以通过Arrays.sort()
,我只是对这个感到好奇。
让我们考虑以下简化示例:
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]”的内容,这意味着您实际上已经构造了一个包含 int 的 ArrayListarrays.
您的 IDE 和编译器应该警告该代码中未经检查的赋值。你应该总是使用new ArrayList<Integer>()
or new ArrayList<>()
代替new ArrayList()
。如果你使用了它,就会因为试图通过而出现编译错误List<int[]>
到构造函数。
没有自动装箱int[]
to 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)