int[] nums = nums(nums)
在一个给定的整数数组中,如果第一个和最后一个数组元素的值都是偶数,则nums交换第二个和倒数第二个数组元素的值,依此类推。
注意,输入数组可能为空。
示例代码示例:
... int[] array = new int[]{ 10,5,3,4 };....输出:
[4、5、3、10]
我的代码:
public class FirstProgram {
public static void main(String[] args) {
int[] myArray = new int[]{100, 2, 3, 45, 33, 8, 4, 54};
swapEven(myArray);
}
public static void swapEven(int[] array) {
// TODO: Implement this method.
int temp, firstNumIndex, secondNumIndex, counter = 1;
if (array != null) {
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 == 0) {
firstNumIndex = i;
if (array[array.length - counter] % 2 == 0) {
secondNumIndex = array.length - counter;
temp = array[firstNumIndex];
array[firstNumIndex] = array[secondNumIndex];
array[secondNumIndex] = temp;
}
}
counter++;
}
} else {
array = new int[]{};
System.out.println(Arrays.toString(array));
}
}
}
字符串
试图弄清楚为什么它给我的数组与输入相同。它不交换数组。我是否返回了一个错误的数组,我是否应该创建第二个数组来添加值然后返回?
4条答案
按热度按时间pgky5nke1#
你几乎已经得到了它!!一旦你交换了偶数值,你就在重新交换它们。所以只要在数组的一半上进行交换。你可以看到这一点,如果你把
字符串
在开始交换之前。要修复它,请将
for loop
更改为:型
这里有一个替代形式。
你只需要一个常规的for循环。
left
刚好穿过阵列的一半。left
的值将right
分配给当前最右边的位置。请注意,这对偶数和奇数长度数组都有效。
型
指纹
型
述的方法
型
**Note.**如果你需要反转一个数组,你可以通过忽略偶数值的检查来实现。
blmhpbnm2#
如果你在数组的整个长度上进行重复,所有的偶数元素将被交换两次(这将使它们全部返回到原始位置)。
相反,你应该在数组的一半上循环。你可以使用两个索引来跟踪前面和后面的位置,当它们相互通过时停止。
字符串
epggiuax3#
问题似乎在于数组为空时的初始化方式。而不是将新数组分配给参数,您应该处理输入数组为空的情况。您还可以简化交换逻辑。您可以这样做:
字符串
vddsk6oq4#
这里有一个例子。
你只需要遍历数组的一半。
使用 (n − 1)− i 访问相反的索引。
字符串
或者,使用 stream。
型
而且,如果您使用的是 List,则可以使用 Collections#swap 方法。
型
输出