私は配列を持っていて、それをほぼ均等に3つの部分に分割したいと思います。私はそれを行う方法を知っていますが、配列に2つの要素がある場合も処理したいと思います。
その場合、center
配列をゼロ要素の空の配列(center.length == 0
)にします(ヌル配列だけでなくゼロ要素が必要です)。
これが私がしたことです:
int elements = data.length;
int sizeLeft;
int sizeCenter;
int sizeRight;
if (elements > 2) {
if (elements % 3 == 0) {
sizeLeft = elements / 3;
sizeCenter = elements / 3;
sizeRight = elements / 3;
} else if (elements % 3 == 1) {
sizeLeft = (elements / 3) + 1;
sizeCenter = elements / 3;
sizeRight = elements / 3;
} else { //if (elements % 3 == 2)
sizeLeft = (elements / 3) + 1;
sizeCenter = elements / 3;
sizeRight = (elements / 3) + 1;
}
int[] left = makeArray(data, 0, sizeLeft);
int[] center = makeArray(data, sizeLeft, sizeCenter);
int[] right = makeArray(data, sizeLeft + sizeCenter, sizeRight);
} else if (elements == 2) {
int[] center = new int[]{};
int[] left = makeArray(data, 0, 1);
int[] right = makeArray(data, 1, 1);
}
makeArray
方法:
public static int[] makeArray(int[] data, int startCopy, int size) {
int[] array = new int[size];
System.arraycopy(data, startCopy, array, 0, size);
return array;
}
data
は、3つの部分に分割されるメインアレイです:left
center
およびright
。
私が聞きたいのは、2つifs
を1つにif
うまく組み合わせてエレガントにする方法があるかどうかです。
ありがとうございました。