我想将int数组中的零移动到末尾,我的计划是创建一个新数组,将非零数字按顺序放入新数组中,而另一个循环则将零放在其末尾数组 P.S i有一个可以计算零个数的int值,并且零个的最终位置将由数组的长度确定-count ++
我尝试将非零数字存储到临时数组中,并将零放在非零数字的原始位置(仅适用于数组末尾的非零数字)
public class movezeros {
public static void main(String[] args) {
int[] numbers = { 1, 2, 0, 4, 5, 0, 4, 0, 1, 3, 4 };
int[] array1 = new int[numbers.length];
int i;
int temp = 0;
int count = 0;
for (i = 0; i < numbers.length; i++) {
if (numbers[i] != 0) {
array1[i] = numbers[i];
}
if (numbers[i] == 0) {
count++;
temp = numbers[i];
array1[numbers.length - count++] = temp;
}
System.out.print(array1[i]);
}
}
}
我希望系统将array1的零移到末尾,但实际输出只是所有数字在其初始位置
答案 0 :(得分:0)
此行为您提供了一个新的零填充数组:
int[] array1 = new int[numbers.length];
这样做的时候
array1[i] = numbers[i];
-您将数字移到新数组中的相同索引处。因此,您仍然在移动的数字之间保留零,因此结果似乎是相同的数组。
相反,您需要在array1
中保留一个单独的索引,指向您尚未填写的下一个位置。这是您要放置numbers
中下一个非零元素的地方。
提示:由于新数组在创建时被零填充,因此您无需执行任何操作即可将零移到上方。
提示:使用System.out.println(Arrays.toString(array1));
打印整个新阵列。它将提供更具可读性的输出。
答案 1 :(得分:0)
您可以尝试以下方法:
import java.util.Arrays;
public class StackOverflow1 {
public static void main(String[] args) {
int[] numbers = { 1, 2, 0, 4, 5, 0, 4, 0, 1, 3, 4 };
int[] array1 = new int[numbers.length];
int i;
int temp;
int count = 0;
for (i = 0; i < numbers.length; i++) {
if ((numbers[i] != 0)) {
temp = numbers[count];
numbers[count] = numbers[i];
numbers[i] = temp;
count = count + 1;
}
}
System.out.println(Arrays.toString(numbers));
}
}
输出:[1、2、4、5、4、1、3、4、0、0、0]
答案 2 :(得分:-1)
对于正数数字,如果非零元素的顺序并不重要,则排序将为您完成:
Integer[] numbers = { 1, 2, 0, 4, 5, 0, 4, 0, 1, 3, 4 };
Arrays.sort(numbers, Collections.reverseOrder());
结果:[5,4,4,4,3,2,1,1,0,0,0]
编辑为Ole V.V. proposed,以保持非零元素的原始顺序,请使用:
Arrays.sort(numbers, Comparator.comparing(n -> n == 0));