所以我有一个数组,我需要获取所有空值(在这种情况下,我正在考虑所有空值-1 null)我需要将它们移动到数组的末尾,并且一旦将所有空值移动到最后,就按升序组织数组。数组是
int [] array = {23,2,34,345,6,1,45,78,-1,-1,-1,-1,61,-1}
我不确定我需要从哪里开始,我们将非常感谢任何帮助。
答案 0 :(得分:0)
如果我理解正确,你想要在数组末尾移动所有'-1'。您可以使用比较器。
Integer[] tab = {23,2,34,345,6,1,45,78,-1,-1,-1,-1,61,-1};
Arrays.sort(tab, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a == -1 ? 1 : b == -1 ? -1 : 0;
}
});
请注意,您必须将int数组包装在Integer数组中(如上例所示)才能使用比较器。
您可能需要查看比较器documentation。
答案 1 :(得分:0)
给定一个数组如:
int[] array = {23, 2, 34, 345, 6, 1, 45, 78, -1, -1, -1, -1, 61, -1}
你可以这样:
按非递减顺序对数组进行排序:检查Arrays.sort()
(docs here)方法。
[-1, -1, -1, -1, -1, 1, 2, 6, 23, 34, 45, 61, 78, 345]
查找排序数组中第一个大于-1
的元素:循环遍历array
元素,当找到一个元素{{ {1}},并保留其索引(让我们称之为array[i] > -1
)。
start
将大于start = 5
的元素复制到数组中的第一个位置:遍历数组,从-1
到0
, array.length - start
。
array[i] = array[i + start]
使用[1, 2, 6, 23, 34, 45, 61, 78, 345, 34, 45, 61, 78, 345]
填充数组的其余部分:使用-1
(docs here)将数组填入Arrays.fill(array, fromIndex, toIndex, val)
,从-1
到array.length - start
。
array.length
答案 2 :(得分:0)
你可以在Arrays.sort()中使用Collections.reverseOrder(),但是,Collections.reverseOrder()函数接受一个类对象,因此你需要将int数组作为Integer数组,其中Integer是一个包装类。以下代码适用于您,请看一下: -
Integer [] array = {23,2,34,345,6,1,45,78,-1,-1,-1,-1,61,-1};
Arrays.sort(array,Collections.reverseOrder());