-1

嘿,所以我有这个家庭作业,我对其中一种方法有疑问。我想要提示而不是实际的答案/代码。

所以我有一个名为 HorseBarn 的类,它与一组马(马是类型)混在一起。我的问题是我在使用 consolidate 方法时遇到了问题。

合并之前数组的样子: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;
        }

    }
4

2 回答 2

1

对于初学者来说,如果找到最后一个非 null 并且仍然有剩余元素,这应该给出一个索引越界异常:

前任:horses = | a | null | null | null |

因为i = 1,因为 horses[1] -> horses[3] 是空的,所以 j 首先被设置为 1,然后以 j = 4 结束(因为终止条件j < horses.length()

然后,您将尝试将 horses[1] 与 horses[4] 交换,这会使数组索引超出范围

于 2014-06-06T20:09:13.240 回答
0

在内部 for 循环中,只需找到下一个非空值的位置并将其中断。然后将其与您的 null 交换。更好的时间效率代码。

于 2014-06-06T20:15:54.620 回答