我在随机int生成的数组上使用Java array.sort。
结果应该是一个有序数组,但是我得到了0和一些随机生成的数字。
这是我的代码:
public class test {
public static void main(String[] args) {
int[] list = new int[10];
Random rand = new Random();
for (int i = 0; i < list.length; i++) {
list[i] = rand.nextInt(100);
Arrays.sort(list);
System.out.println(list[i]);
}
}
}
预期的出站应该是10个随机整数的排序数组,但intead总是将前5个数字设为0。
有人可以帮忙吗?
答案 0 :(得分:4)
似乎您在每次迭代中都对整个数组进行排序。设置值后,尝试对数组进行排序和打印。
public class test {
public static void main(String[] args) {
int[] list = new int[10];
Random rand = new Random();
for (int i = 0; i < list.length; i++) {
list[i] = rand.nextInt(100);
}
Arrays.sort(list);
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
}
}
如果您调试应用程序,则可以看到每次获得5 0的原因。
int[] list = new int[10];
产生[0,0,0,0,0,0,0,0,0,0]的数组,在打印之前对数组进行排序。因此,前5个(list[0]
,list[1]
,list[2]
...)将是0
,而list[6]
list[7]
..将是rand.nextInt(100)
答案 1 :(得分:1)
问题是您在用随机数填充数组时对数组进行排序。
之所以不起作用,是因为int数组的元素的初始值为0,并且当您首次对其进行初始化时,数组将如下所示:
[0, 0, 0, 0, 0, ...]
然后在循环的第一轮中,假设随机数生成5,并且第一个元素初始化为5。数组现在看起来像这样:
[5, 0, 0, 0, 0, ...]
然后在循环继续之前对列表进行排序,这意味着将第一个元素中的5发送到列表的末尾,并且将第一个元素替换为0,如下所示:
[0, 0, 0, ... 0, 5]
解决此问题的方法是在使用随机数填充数组后对数组进行排序,如下所示:
public class test {
public static void main(String[] args) {
int[] list = new int[10];
Random rand = new Random();
for (int i = 0; i < list.length; i++) {
list[i] = rand.nextInt(100);
}
Arrays.sort(list);
System.out.println(Arrays.toString(list));
}
}
希望这对您有帮助!