我想要回到整数类型的混洗数组,所以我写了这段代码,但它不起作用......在这段代码中,每次Scase类的每个对象都需要新值...但是必须从5开始50100 ...
class Scase {
int label;
int value;
public static int arr[] = {5,50,100};
public static int[] toarr(List<Integer> list)
{
int[] ret = new int[list.size()];
for (int i = 0; i < ret.length; i++)
ret[i] = list.get(i);
return ret;
}
public static void main(String args[])
{
Scase obj[] = new Scase[1];
List<Integer> lst = new ArrayList<Integer>();
lst = Arrays.asList(arr);
Collections.shuffle(lst);
int ar[];
ar = toarr(lst);
for(int i = 0; i <= 2; i++) {
obj[i].value = ar[i];
}
System.out.println(obj[0].label + " " + obj[0].value);
System.out.println(obj[1].label + " " + obj[1].value);
System.out.println(obj[2].label + " " + obj[2].value);
}
}
答案 0 :(得分:0)
不幸的是,由于Java处理原始类型,装箱,数组和泛型的性质,我不相信确实有更好的方法。特别是:
List<T>.toArray
无法正常工作,因为没有从整数转换为int
你不能使用int
作为泛型的类型参数,所以它必须是一个特定于int的方法(或者使用反射来做恶劣的诡计)。
我相信有些库可以为所有原始类型提供这种方法的自动生成版本(即,为每种类型复制模板)。这很丑陋,但这就是我害怕的方式:(
即使在泛型到达Java之前Arrays类出现了,如果它今天被引入,它仍然必须包含所有可怕的重载(假设你想使用原始数组)。