我在交换列时遇到问题。我有int [n] [n] matrix.Next我有列表(大小为n!)和数组(长度为n),它包括数字1,2的所有排列。 ..,N([2,1,3,4,...,N] [1,4,3,2,...,N] ....等))。对于此列表中的每个排列,我想制作具有不同列顺序的特定矩阵。这是我的代码不起作用:
int[][] matrix={{1,2,3},{4,5,6},{7,8,9}};
Arraylist<int[][]> matrices=new Arraylist<>();
for (int[] permute : permutations)
{
int[][] newMatrix=matrix;
for (int i = 0; i < n; i++)
{
if (permute[i] == i + 1)
continue;
}
newMatrix=swapColumn(newMatrix, i, permute[i] - 1);
}
matrices.add(newMatrix.clone());
}
方法swapColumn正常工作。条件是由于交换相同的列。当我打印矩阵时,它打印n!*原始矩阵 谁能帮助我?
答案 0 :(得分:0)
这甚至无法编译,因为你在循环范围之外使用newMatrix=swapColumn(newMatrix, i, permute[i] - 1);
并且i没有被声明出循环
for (int i = 0; i < n; i++)
{
if (permute[i] == i + 1)
continue;
}`
第二件事:
函数swapColumn
它的作用是将列源复制到列目标,这样列目标的原始值就会丢失,所以当你需要它将它放在另一列中时你不会拥有它你所拥有的就是新受影响的价值
第三件事
matrices.add(newMatrix.clone())
;超出了置换循环的范围,所以它会引发编译错误,因为newMatix是在循环范围内声明的