送信された配列の最大の整数値である 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];
}
..しかし、よくわかりません..ここで何が起こっているのかを「想像する」のに苦労しています..しかし、常に機能しているわけではありません..(時々ですが).
EDIT も:配列{6,15,2,5,8,14,10,16,11,17,13,7,1,18,3,4,9,12}; 最大数として 17 を吐き出します。奇数長のバグを修正する必要があることはわかっていますが、最初にこの偶数長の配列を解決したいと思います..