在具有null空格的数组中,如何将所有非null值合并在一起?

时间:2014-06-06 19:55:55

标签: java arrays consolidation

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

所以我有一个名为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;
        }

    }

2 个答案:

答案 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替换它。 更好的时间效率代码。