iHe*_*eff 1 java arrays multidimensional-array
昨天我问了一个非常相似的问题,我有点搞砸了.
我需要将一个数组传递给一个方法,并且在该方法内部我需要交换行,如果是的话
1 2 3
3 2 1
2 1 3
它需要
3 2 1
1 2 3
3 1 2
使用我现在拥有的代码,它将最后一列正确地交换到第一个列点,然后将它放在应该是最后一列的列中.
3 1 2
1 3 2
3 2 1
此外,它需要保持空白,因为我需要修改原始数组,所以我不能将它设置为临时数组,但我可以使用临时整数来存储.
这是我现在的代码,有点工作
public static void reverseRows(int[][] inTwoDArray)
{
for (int row = 0; row < inTwoDArray.length; row++)
{
for (int col = 0; col < inTwoDArray[row].length; col++)
{
int tempHolder = inTwoDArray[row][col];
inTwoDArray[row][col] = inTwoDArray[row][inTwoDArray[0].length - 1];
inTwoDArray[row][inTwoDArray[0].length - 1] = tempHolder;
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒,我的头发已用完了!谢谢!
首先,如何反转单个1-D阵列:
for(int i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
Run Code Online (Sandbox Code Playgroud)
请注意,您必须停在一半的数组中,或者将它交换两次(它与您开始时相同).
然后把它放在另一个for循环中:
for(int j = 0; j < array.length; j++){
for(int i = 0; i < array[j].length / 2; i++) {
int temp = array[j][i];
array[j][i] = array[j][array[j].length - i - 1];
array[j][array[j].length - i - 1] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用一些库方法,例如ArrayUtils#reverse():
ArrayUtils.reverse(array);
Run Code Online (Sandbox Code Playgroud)
然后再次进入一个循环:
for(int i = 0; i < array.length; i++){
ArrayUtils.reverse(array[i]);
}
Run Code Online (Sandbox Code Playgroud)