嘿所以我有这个家庭作业,而且我遇到了其中一种方法的问题。我想提示而不是实际答案/代码。
所以我有一个名为HorseBarn的课程,它与一系列马匹混在一起(马就是那种类型)。我的问题是我在整合方法上遇到了麻烦。
合并之前阵列的样子: a,b,c,d是马匹
| A |空| B |空| C | d |
合并后数组会是什么样子:
| A | B | C | d |空|空|
所以我的逻辑是做一个嵌套的for循环。第一个循环将搜索空值,一旦第一个循环找到空值,第二个循环将查找一个马,然后与它交换。然后第二个循环结束并返回第一个循环。所以这就是我现在拥有的,它不起作用(它只是终止)。我的逻辑是错误的还是我的语法造成了问题?
public void consolidate()
{
int j = 0;
for(int i = 0; i < spaces.length;i++)
{
if( spaces[i] == null)
{
for(j = i; j < spaces.length && spaces[j] == null; j++)
{
}
spaces[i] = spaces[j];
spaces[j] = null;
}
}
答案 0 :(得分:1)
对于初学者来说,如果找到最后一个非null并且仍有剩余元素,则应该给出一个索引超出范围的异常:
ex:horses = | a | null | null | null |
代表i = 1
,因为马[1] - &gt;马[3]为空,j首先设置为1然后以j = 4结束(因为终止条件j < horses.length()
)
然后你会尝试用马匹[1]交换马匹[4],这会使数组索引超出范围
答案 1 :(得分:0)
在内部for循环中,只需找到下一个非null值的位置并在那里将其分解。 然后用null替换它。 更好的时间效率代码。