Как распределить элементы массива в другой массив, если ни один массив не содержит более 1 элемента, чем другой?

#java

#java

Вопрос:

мне нужно распределить 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

Ответ №1:

Попробуйте что-то вроде этого:

         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» равно.