我一直在寻找一个for循环,该循环可以反转数组中的元素,但是我不太了解其中发生了什么。这是代码:
int middleIndex = (array.length) / 2;
for (int i = 0; i < middleIndex; i++) {
int temporaryVariable = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temporaryVariable;
}
int secondaryVariable = array [i]下面的两行到底是做什么的?究竟如何反转元素?
答案 0 :(得分:1)
通过将first
交换为last
元素,将second
交换为second_last
等,它有效地反转了数组的元素。这样,操作数为{{1 }}。
答案 1 :(得分:1)
int temporaryVariable = array[i];
之后的两行只是将第i个元素与最后一个元素中的第i个交换,我们将此循环运行一半的时间作为数组中元素的数量。
答案 2 :(得分:0)
此算法正在对存储在数组中的交换值进行N / 2次迭代。它从数组的开头(索引0)开始,一直到其一半(索引N / 2)。它将第一个元素(索引为0)与最后一个元素(索引为N-1-0)交换,然后将第二个元素(索引为0 + 1)与最后一个元素(索引为N-1-(0 + 1)交换)),等等。
答案 3 :(得分:0)
首先请记住,数组索引从0开始。
因此,最后一个元素的索引为array.length - 1
。
这3行将第一个项目与最后一个项目交换,然后将第二个项目与第2个从末尾交换,依此类推。temporaryVariable
用作存储以下值之一的临时位置:交换,这样它在被其他值覆盖时不会丢失。
在i
处获取值的副本:
int temporaryVariable = array[i];
从数组(i
)的末尾插入项array.length - 1 - i
,而不是它。
array[i] = array[array.length - 1 - i];
将临时存储的项目i
从末尾(i
插入array.length - 1 - i
。
array[array.length - 1 - i] = temporaryVariable;
当i
到达数组的中间时,循环停止。 (如果数组中的元素数量为奇数,则中间的元素将停留在原位置。)
答案 4 :(得分:0)
另一部分是返回第二大数字,但是由于某种原因,它返回了第三大数字,这确实很奇怪。
这是代码:
public static int returnSecondBiggest(int[] array) {
int largestElement = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > largestElement) {
largestElement = array[i];
}
}
int secondBiggest = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
if (array[i] > secondBiggest && array[i] != largestElement) {
secondBiggest = array[i];
}
}
return secondBiggest;
}
当代码应返回第二个时,它如何返回第三个?我很迷路。