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 时才有效
解决方案
尝试这样的事情:
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”是。
推荐阅读
- ios - Swift:打印到任何类型的控制台可变参数
- amazon-web-services - 亚马逊EC2 | CodeDeploy [React] - 部署成功但未填充构建文件夹
- c# - 如何在 Visual Studio Cmdlet DLL 中支持不同的 Powershell 版本
- javascript - DomComplete 事件的事件侦听器未执行
- prolog - 如何在序言中加入规则并打印输出
- vbscript - CreateTextFile 中的 VBScript 权限被拒绝错误 800A0046 突然开始发生
- php - 获取所有小时的总和
- java - 简单的java拼写检查器/检查字典中是否存在单词
- imagemagick - 模拟A4打印结果
- html - 边距:0 自动无法在具有显示 flex 属性的嵌套 div 中工作