Java 在一个具有空空间的数组中,如何将所有非空值合并在一起?
嘿,我有一个家庭作业,我对其中一种方法有意见。我想要的是提示,而不是实际的答案/代码 所以我有一个名为HorseBarn的类,它处理一系列的马(马就是这个类型)。我的问题是我在使用合并方法时遇到了问题 整合前阵列的外观: a、 b、c、d是马 |a |空| b |空| c | d| 整合后阵列的外观: |a | b | c | d |空|空| 所以我的逻辑是创建一个嵌套的for循环。第一个循环将搜索空值,一旦第一个循环找到空值,第二个循环将查找一匹马,然后与它交换。然后第二个循环结束并返回到第一个循环。这就是我现在拥有的,但它不起作用(它只是终止)。是我的逻辑错误还是我的语法导致了问题Java 在一个具有空空间的数组中,如何将所有非空值合并在一起?,java,arrays,consolidation,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;
}
}
公共作废合并()
{
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)
当它真的不需要时,此函数可以做不止一件事-完美的错误位置:)