在java中从数组中删除元素
所以我在高中的AP计算机科学班,所以我不是很有经验。我有一个程序要做,它要求我从文件中读入数字,将这些数字放入数组,然后从数组中删除所有0
如果数字是:0,2,4,6,0,5,3,5。。。 我需要创建一个数组:[0,2,4,6,0,5,3,5] 然后删除0:[2,4,6,5,3,5]
我必须使用数组来执行此操作,不允许创建第二个数组来执行此操作。我在网上和JavaAPI上都找遍了,想找到一个可以从数组中删除元素的方法,但我就是找不到。如果有人有任何想法,我可以使用或指导我的方向,你的建议将不胜感激
这是一个逐字逐句的问题: 1.编写一个程序,读取文本文件(compact.txt)并将整数存储在数组中。您的讲师将提供此文本文件。 2.编写一个方法compact,从数组中删除所有零,保持元素的顺序不变。此函数中的所有局部变量都必须是标量。换句话说,您不可以使用第二个数组来解决问题。 3.不要仅通过打印数组中的非零值来解决问题。compact方法必须从数组中删除所有零
# 1 楼答案
另一编辑:
(我认为前面的答案仍然有意义,我将其保留在最后。此编辑主要用于针对家庭作业要求的建议)
基于这个问题,紧凑逻辑将0视为“无意义”的东西,需要“删除”。因此,在“收缩”数组之后,我们并不真正需要某种特殊的值。简单地将其保持为0将有所帮助
除了“将[i+1,end]复制到i”方法之外,还有另一种(更简单,可能更快)方法可以“删除”零
基本上,您需要的是遍历数组。如果遇到0,则找到该位置后的第一个非零值,并将该零与该非零值交换
在psuedo代码中看起来像这样:
然后,您可以选择返回一个实际收缩的数组副本,或者简单地返回“所谓的收缩”数组,其结尾为0
让你想一想:
首先,在Java中,数组的大小是固定的,所以不可能缩小数组的大小。因此,在不创建新数组的情况下,不可能拥有元素较少的结果数组
如果可以将未使用的元素作为一些特殊值(例如-ve或0等)保留在末尾,则从数组中删除位置
i
处的元素基本上意味着:将数组元素[i+1到end]复制到位置i,并用特殊的空值替换arr[end]
例如[1,3,5,7,9]
如果我想删除索引2,我需要做的是将元素3-4复制到位置2:
并用一些特殊值(例如本例中的-1)替换末端元件:
使用
System.arrayCopy()
可以轻松完成数组复制我刚刚看到了你问题的最新进展
我的大部分回答仍然有效,以下是关于您的问题的一些额外更新:
Arrays.copyOf(oldArray, newLength)
返回“收缩”数组的新副本李>以下是第3点的一段psuedo代码:
# 2 楼答案
我通常不喜欢做家庭作业,但我觉得写这篇文章很有趣,也不可能,就这样吧
这很像Christian的答案,但我使用整数而不是int,这样我可以将0设置为null而不是其他整数。我还避免了额外的循环,他必须在每个0上复制所有剩余值,而不是迭代数组一次,然后只迭代尾部一次以设置空值
输出
1 3 5 7 9 2 4 6 8 -1 null null null null null
从技术上讲,我猜您不能打印空值,因为这不是打印0# 3 楼答案
您可以尝试以下操作:因为您无法修改数组的长度,所以可以对其进行排列,以便将所有零放在数组的末尾,并使用值
-1
(这是可选的,只是为了指示它们是零)输出:
注意:这符合问题要求:
-1
)