1

我有一个 ArrayList< int[] > 并想将其转换为一个 int[][]。结果数组对每个条目都有相同的 int[] ,即使它们是不同的(是的,我已经检查过!)。我在这里错过了一些简单的东西吗?int[][] 中数组的长度由 arr.length 给出

int[][] vals = new int[ list.size() ][ arr.length ];
list.toArray( vals );

编辑: 我已经意识到代码可以正常工作,所以这里有一个更大的问题出现的代码示例。permute() 按照它说的做,并在完成新的排列时排列给定数组中的整数,返回 true。

List< int[] > list = new ArrayList<>();
do {
    list.add( vals );
} while ( permute( vals ) ); // I print vals here and the permutations are all unique each time
int[][] permutations = new int[ list.size() ][];
list.toArray( permutations );
// If I print permutations now, all the arrays inside it are the same
4

3 回答 3

2

回答新问题:您没有显示 的​​声明vals,但假设它声明为int[]vals实际上是对数组的引用。所以每次你做你的list.add,你都会向列表中添加相同的引用。我假设permute(vals)更改了列表中的值,但它不会更改引用,这意味着在循环结束时,其中的每个项目list都是对具有相同值的相同数组的相同引用。您需要做的是制作数组的副本。尝试这个:

list.add( Arrays.copyOf (vals, vals.length) );
于 2013-10-08T23:01:16.093 回答
2
int[][] vals = new int[ list.size() ][ arr.length ];

for(int i = 0; i < list.size(); i++) {
   vals[i] = list.get(i);
}
于 2013-10-08T22:23:49.543 回答
0

仔细阅读文档http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28%29

你需要

vals = list.toArray(vals);

我不知道为什么它对你们中的一些人不起作用——它对我很有效

于 2013-10-08T22:26:13.573 回答