【问题标题】:Java Split array or range into N chunksJava 将数组或范围拆分为 N 个块
【发布时间】:2017-09-22 02:52:45
【问题描述】:

我正在尝试将一个数组或数字范围从 0 到 N 拆分为 N/n 个块。

我目前正在制作一个包含 N 个元素的数组列表

    List<String> arrayList = new ArrayList<String>();
    for (int i = 0; i < N; i++) {
        arrayList.add(String.valueOf(i));
    }

    System.out.println(arrayList);


    int numOfChunks = (int)Math.ceil((double)arrayList.size() / numOfchunks);
    int[][] output = new int[numOfChunks][];

    for(int i = 0; i < numOfChunks; ++i) {
        int start1 = i * numOfChunks;
        int length = Math.min(arrayList.size() - start1, numOfChunks);

        int[] temp = new int[length];
        System.arraycopy(arrayList, start1, temp, 0, length);
        output[i] = temp;
    }
    System.out.println(output);

但是,我一直在这一行收到错误

    System.arraycopy(arrayList, start1, temp, 0, length);

我相信这是因为我使用的是数组列表。我尝试过使用常规数组,但出现 NegativeArraySizeException 错误。

【问题讨论】:

  • 如果你想复制一个ArrayList,使用new ArrayList( old.subList(start,start+length) );
  • 您错误地使用了变量numOfchunks?您在第 9 行的声明语句中使用变量?

标签: java arrays


【解决方案1】:

我相信您错误地使用了变量“numOfChunks”和“numOfchunks”。 最好重命名变量,这样更容易理解。

int numOfChunks = (int)Math.ceil((double)arrayList.size() / numOfchunks);
int[][] output = new int[numOfChunks][];

int numOfSubArrays= (int)Math.ceil((double)arrayList.size() / subArraySize);
int[][] output = new int[numOfSubArrays][];

for(int i = 0; i < numOfChunks; ++i) {
    int start1 = i * numOfChunks;
    int length = Math.min(arrayList.size() - start1, numOfChunks);

    int[] temp = new int[length];
    System.arraycopy(arrayList, start1, temp, 0, length);
    output[i] = temp;
}
System.out.println(output);

for(int i = 0; i < numOfSubArrays; ++i) {
    int arrayListPosition = i * subArraySize;
    int length = Math.min(arrayList.size() - arrayListPosition, subArraySize);

    int[] temp = new int[length];
    System.arraycopy(arrayList, arrayListPosition, temp, 0, length);
    output[i] = temp;
}
System.out.println(output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2020-02-28
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多