java 10个随机数排序_java随机数排序的问题

java随机数排序的问题

关注:68  答案:4  mip版

解决时间 2021-01-27 15:23

e6cb1a03ad541b3098697807b7bf1798.png

提问者侢遇噹姩揂

2021-01-27 08:24

public class RN {

public static void main(String[] args) {

System.out.println("初始的随机数是:");

int i = 0;

int j = 0;

int[] num = new int[10];

for(i = 0;i < num.length;i++) {

num[i] = (int) (Math.random()*1000);

System.out.println("num[" + i +"]" + num[i]);

}

System.out.println("排序后的随机数是:");

for(i = 0;i < num.length;i++) {

for(j = 0;j < num.length;j++) {

if(num[i] < num[j]) {

int m = num[j];

num[j] = num[i];

num[i] = m;

}

}

}

for(i = 0;i < num.length;i++) {

System.out.println("num[" + i +"]" + num[i]);

}

}

}

我想要结果如下:

初始的随机数是:

num[0]4

num[1]982

num[2]344

num[3]93

num[4]77

num[5]419

num[6]839

num[7]414

num[8]452

num[9]453

排序后的随机数是:

num[0]4

num[4]77

num[3]93

num[2]344

num[7]414

num[5]419

num[8]452

num[9]453

num[6]839

num[1]982

该怎么修改?

正解:

public class RN {

public static void main(String[] args) {

System.out.println("初始的随机数是:");

int i = 0;

int j = 0;

int a = 0;

int[] num = new int[10];

int[] num2 = new int[10];

for(i = 0;i < num.length;i++) {

num[i] = (int) (Math.random()*1000);

num2[i] = i;

System.out.println("num[" + i +"]" + num[i]);

}

System.out.println("排序后的随机数是:");

for(i = 0;i < num.length;i++) {

for(j = 0;j < num.length;j++) {

if(num[i] < num[j]) {

int m = num[j];

num[j] = num[i];

num[i] = m;

int n = num2[j];

num2[j] = num2[i];

num2[i] = n;

}

}

}

for(a = 0;a < num.length;a++) {

System.out.println("num[" + num2[a] +"]" + num[a]);

}

}

}

谢谢大家了!!!!

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家喜欢就甘愿

2021-01-27 09:47

已经实现了,不过是一个降序的。把双重循环中的 if(num[i] < num[j])

改一下就行,把就是升序的了。

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼我有我风格

2021-01-27 12:17

呵呵,你知道那个 random(47)是啥意思吗?这个是种子。

相同的种子会产生相同顺序的随机数,你的47这个种子,每次产生的第一个随机数,永远是 2,不会是别的。

所以,java的是伪随机数哦。

不过这也有一个好处,你连续生成10个随机数,

在运行一次,还是那10个数哦,顺序是完全相同的。

所以一般我们会使用 ramdon() 不带参数,这样就会使用

random(++seeduniquifier + system.nanotime());

也就是系统的纳秒作为种子,这个重复的可能性就及其小了。

总结:相同的种子,产生相同的随机数序列。

希望你明白了。

e6cb1a03ad541b3098697807b7bf1798.png

2楼可爱暴击

2021-01-27 11:12

public class RN {

public static void main(String[] args) {

System.out.println("初始的随机数是:");

int i = 0;

int j = 0;

int[] num = new int[10];

for(i = 0;i < num.length;i++) {

num[i] = (int) (Math.random()*1000);

System.out.println("num[" + i +"]" + num[i]);

}

System.out.println("排序后的随机数是:");

for(i = 0;i < num.length;i++) {

for(j = 0;j < i;j++) {//主要是这里,不是j < num.length,应该是j < i

if(num[i] < num[j]) {

int m = num[j];

num[j] = num[i];

num[i] = m;

}

}

}

for(i = 0;i < num.length;i++) {

System.out.println("num[" + i +"]" + num[i]);

}

}

}

e6cb1a03ad541b3098697807b7bf1798.png

3楼時光叫我忘了他

2021-01-27 10:27

你是循环遍历出数组的,那坑定是num[1].......num[n]啊,请使用数组的随机遍历方式

在开始遍历数组时加入 一下代码。

import java.util.Random;

import java.util.Vector;

public class test{

public static void main(String[] args) {

String[] strs = { "a", "b", "c", "d"};

int strsLength = strs.length;

Vectorv = new Vector();

Random r = new Random();

boolean flag = true;

while (flag) {

int i = r.nextInt(strsLength);

if (!v.contains(i))

v.add(i);

if (v.size() == strsLength)

flag = false;

}

for (int i = 0; i < strsLength; i++) {

System.out.println(strs[v.get(i)]);

}

}

}

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值