Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一个具有空空间的数组中,如何将所有非空值合并在一起?_Java_Arrays_Consolidation - Fatal编程技术网

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

Java 在一个具有空空间的数组中,如何将所有非空值合并在一起?,java,arrays,consolidation,Java,Arrays,Consolidation,嘿,我有一个家庭作业,我对其中一种方法有意见。我想要的是提示,而不是实际的答案/代码 所以我有一个名为HorseBarn的类,它处理一系列的马(马就是这个类型)。我的问题是我在使用合并方法时遇到了问题 整合前阵列的外观: a、 b、c、d是马 |a |空| b |空| c | d| 整合后阵列的外观: |a | b | c | d |空|空| 所以我的逻辑是创建一个嵌套的for循环。第一个循环将搜索空值,一旦第一个循环找到空值,第二个循环将查找一匹马,然后与它交换。然后第二个循环结束并返回到第一

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

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

    }
公共作废合并()
{
int j=0;
for(int i=0;i
对于初学者来说,如果找到最后一个非null且仍有元素剩余,则应给出索引越界异常:

例如:
horses=|a | null | null | null |

对于
i=1
,由于马[1]->马[3]是空的,j首先被设置为1,然后以j=4结束(因为终止条件
j


然后,您将尝试将horse[1]与horse[4]交换,这会将数组索引抛出内部for循环中的界限

,只需找到下一个非空值的位置并在那里将其打断即可。 然后用空值替换它。
更好的时间效率代码。

您的代码乍一看似乎还可以,您如何判断它不起作用?为什么
循环的内部
为空?它后面的语句是否打算在循环体中?@DavidConrad,将其视为“下一个非空”setter(它查找下一个“非空”并将其设置为:)啊,我现在明白了。谢谢。@Totoro,但这不是if语句所做的吗?更好的是-将其分解为
交换(arr,I,j)
函数:-)@ReutSharabani这对索引越界有什么帮助?一个
交换
方法在概念上应该检查最小值(负数)和最大值,因此错误很容易出现。此代码的逻辑不能很好地从中反映出来,因此很难发现前面提到的错误。哦,我想你只是想让他将这两行代码包装到
交换(arr,I,j)
当它真的不需要时,此函数可以做不止一件事-完美的错误位置:)