我試圖壓縮一個對象的數組,這些對象將穿插着完整的項目。我想把所有的元素放在一開始就按照它們開始的順序排列,最後用空的元素。爪哇:排序1d的對象數組是否完整或不是
有問題的對象使用String字段,「name」和int字段「weight」。空的版本分別具有「無名」和0。因此,該方法需要處理的類型數組將包含類似如下內容:
- Fred | 4
- Bob | 3
- 沒有名字| 0
- Gina | 9
- 沒有名字| 0
- Yuki | 7
通過該方法餵養後,數組應該去弗雷德,鮑勃,吉娜,結城,沒有名字,沒有名字。
我對一步一個念頭就是剛剛弄清楚這充滿,哪些不是,所以我想出了這個:
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()獲取的名稱來自對象的字段。
我不確定該從哪裏出發。建議?
編輯:好的,這裏就是被感染想出了:
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);
}
}
測試和工作。
你在哪裏,你的排序字符串? – exexzian 2013-02-20 21:35:01
我不是。這個想法是將完整的對象排序到開始,並將對象清空到最後,而不改變完整對象的順序。 – StarSword 2013-02-20 21:38:16