我正在尝试创建一个返回 int 的方法 - 发送数组中最大整数的值。我希望这种方法起作用的方式是在 for 循环中检查数组的第一个和最后一个元素,然后按它们的方式工作到中间。所以 i = 第一个整数,k = 最后一个整数。何时i = 0, k = n-1
(索引),i = 1, k = n-2
如果你赶上我的漂移。在每个循环中都需要检查if a[i]>a[k]
. 然后他们交换位置。然后我知道最大的数字在数组的前半部分,然后我希望它检查那一半,所以最终最大的 int 在索引 0 处。
我试过这样:
public static int maxOfArray(int[] a)
{
int length = a.length;
if(length<1)
throw new NoSuchElementException("Not at least one integer in array");
while (length > 1)
{
int k = length;
for(int i = 0; i < length/2; i++)
{
k--;
if(a[i]<a[k])
{
int j = a[i];
a[i] = a[k];
a[k] = j;
}
}
length /=2;
}
return a[0];
}
..但我真的不明白..我很难“想象”这里发生了什么..但它并不总是有效..(尽管有时)。
另编辑 :数组 {6,15,2,5,8,14,10,16,11,17,13,7,1,18,3,4,9,12}; 将吐出 17 作为最大的数字。我意识到我必须修复奇数长度的错误,但我想先解决这个偶数长度的数组..