我正在尝试压缩一个对象数组,这些对象将有空项目穿插完整项目。我想把所有的完整元素按照它们开始的顺序放在开头,然后把空元素放在最后。
有问题的对象使用一个字符串字段“name”和一个 int 字段“weight”。空版本分别具有“无名”和 0。因此,该方法需要处理的类型的数组将包含以下内容:
- 弗雷德 | 4
- 鲍勃 | 3
- 没有名字 | 0
- 吉娜 | 9
- 没有名字 | 0
- 由纪 | 7
通过方法喂完后,数组应该是 Fred、Bob、Gina、Yuki,没有名字,没有名字。
我对第一步的想法是弄清楚哪些是满的,哪些不是,所以我想出了这个:
public void consolidate() {
boolean[] fullSlots = new boolean[spaces.length];
// pass 1: find empties
for (int i = 0; i < spaces.length; i++) {
fullSlots[i] = spaces[i].getName().equals("no name");
}
}
空格是对象数组,getName() 从对象中检索名称字段。
我不知道从这里去哪里。建议?
编辑:好的,这就是 Infested 的想法:
public void consolidate()
{
int numberOfEmpties = 0, spacesLength = spaces.length;
Chicken[] spaces2 = new Chicken[spacesLength];
for(int i = 0; i < spaces.length; i++)
{
spaces2[i] = new Chicken(spaces[i].getName(),
spaces[i].getWeight());
}
// pass 1: find empties
for (int i = 0, j = 0; i < spacesLength; i++)
{
if (spaces2[i].getName().equals("no name") == false)
{
spaces[j] = new Chicken(spaces2[i].getName(),
spaces2[i].getWeight());
j++;
}
else
{
numberOfEmpties++;
}
}
for (int i = spacesLength - 1; numberOfEmpties > 0 ; numberOfEmpties--, i--)
{
spaces[i] = new Chicken("no name", 0);
}
}
测试和工作。