0

私は配列を持っていて、それをほぼ均等に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うまく組み合わせてエレガントにする方法があるかどうかです。

ありがとうございました。

4

2 に答える 2

1

あなたは簡単に書くことができます:

int elements = data.length;
int mod = elements % 3;
int div = elements / 3;

int sizeLeft = div + (mod > 0 ? 1 : 0);
int sizeCenter = div;
int sizeRight = div + (mod > 1 ? 1 : 0);
于 2012-05-22T13:02:37.077 に答える
0

これを試して

        int len= data.Length;
        int pos = len / 3;
        int remaining = len % 3;

        int firstpos = pos + (remaining > 0 ? 1 : 0);
        int centerpos=pos;
        int lastpos = pos + (remaining / 2);
于 2012-05-22T13:18:39.427 に答える