0
我正在使用此代碼在java中的2維矩陣中翻轉一行。它看起來像這樣一個簡單的代碼,但由於某種原因,它不起作用。矩陣的rowN原是數組的值不變
112 42 83 119
成爲
119 83 83 119
我調試的代碼,並發現該tempMatrix2也正在發生變化。我不明白爲什麼。它在for循環中在我爲其賦值給矩陣[rowN] [i]的同一行中變化。 任何幫助表示讚賞。
static int[][] flipRow(int[][] matrix, int rowN, int n) {
int[] tempMatrix2 = matrix[rowN];
for (int i = 0; i < n; i++) {
matrix[rowN][i] = tempMatrix2[n-i-1];
}
return matrix;
}
'矩陣[rowN]'和'tempMatrix2'是同一個數組。修改其中一個會修改另一個。 – 4castle
當你做'int [] tempMatrix2 = matrix [rowN];'你正在爲堆上的同一個數組對象創建第二個*引用*。這就是爲什麼。爲了讓你的算法起作用,你需要做一個*拷貝*。但是有更簡單的方法可以在數組中僅翻轉一半,並將*值與另一半交換。 –
更容易的可能是'列表 reverser = Arrays.asList(matrix [rowN]); Collections.reverse(反向);矩陣[rowN] =反向;'。或切換到更多的功能範例,如[流](http://stackoverflow.com/questions/tagged/java-stream)或[kotlin](http://stackoverflow.com/questions/tagged/kotlin)。 –