首页 > 解决方案 > 如何将数组元素分配到另一个数组中,而没有一个数组的元素超过另一个?

问题描述

我需要从一个数组中分配 x 个学生并将它们添加到 n 个数组中,但没有一个数组可以有超过 1 个,例如:17 个学生分成 3 个数组,前两个数组将容纳 6 个,最后一个将有 5 个

我试图这样做,但不一致:

double x = 17;
double n = 3;
double theSizeOfEachArray = x%n;
String[] array1;
String[] array2;
String[] array3;
if (theSizeOfEachArray ==0){
array1 =new String[x/n];
array2 =new String[x/n];
array3 =new String[x/n];
}
if (theSizeOfEachArray ==1)
array1 =new String[Math.ceil(x/n)];
array2 =new String[Math.floor(x/n)];
array3 =new String[Math.floor(x/n)];
if (theSizeOfEachArray ==2)
array1 =new String[Math.ceil(x/n)];
array2 =new String[Math.ceil(x/n)];
array3 =new String[Math.floor(x/n)];
....

仅当数组数量为 3 时才有效

标签: java

解决方案


尝试这样的事情:

        int x = 17;
        int n = 3;
        int theSizeOfEachArray = x%n;
        
        
        String[] array1 = new String[x / n + ((theSizeOfEachArray > 0) ? 1 : 0)];
        
        if(theSizeOfEachArray > 0)
            theSizeOfEachArray--;
        
        String[] array2 = new String[x / n + ((theSizeOfEachArray > 0) ? 1 : 0)];
        
        if(theSizeOfEachArray > 0)
            theSizeOfEachArray--;
        
        String[] array3 = new String[x / n + ((theSizeOfEachArray > 0) ? 1 : 0)];

我改用整数而不是双精度数,因为它们更容易处理。

基本上,在每次数组初始化时,我都会检查是否还有余数,如果有,则加 1。然后,如果需要,我会减少余数。在这种特殊情况下,我什至可以将数组初始化和递减压缩为一行代码:

        int x = 17;
        int n = 3;
        int theSizeOfEachArray = x%n;
        
        
        String[] array1 = new String[x / n + ((theSizeOfEachArray-- > 0) ? 1 : 0)];
        
        String[] array2 = new String[x / n + ((theSizeOfEachArray-- > 0) ? 1 : 0)];
        
        String[] array3 = new String[x / n + ((theSizeOfEachArray-- > 0) ? 1 : 0)];

((theSizeOfEachArray-- > 0) ? 1 : 0)是三元表达式。基本上,如果条件为真,那么“?”之间的“1” 并返回“:”。否则,“0”是。


推荐阅读