Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将阵列等分为3部分_Java_Arrays_Split - Fatal编程技术网

Java 将阵列等分为3部分

Java 将阵列等分为3部分,java,arrays,split,Java,Arrays,Split,我有一个数组,我想把它平均分成3部分。我知道怎么做,但我也想处理数组中有2个元素的情况 在这种情况下,我希望center数组是零元素的空数组(center.length==0)(必须有零元素,而不仅仅是空数组) 以下是我所做的: int elements = data.length; int sizeLeft; int sizeCenter; int sizeRight; if (elements > 2) { if (elements % 3 == 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;
}
数据
是将被分成三部分的主数组:

我想问的是,是否有一种方法可以将两个
if
巧妙地结合在一起

谢谢。

您只需写下:

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);
试试这个

        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);

所以当您给出这个方法时,
System.arraycopy(数据,startCopy,array,0,size)作为数字0的大小,它实际上将创建一个零元素数组?是的,正如javadoc所说:,int,java.lang.Object,int,int),如果您愿意,您还可以使用Arrays.copyOf(int[],int!):)我真的很傻,没有早点看到这个,非常感谢