java随机数排序的问题
关注:68 答案:4 mip版
解决时间 2021-01-27 15:23
提问者侢遇噹姩揂
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]);
}
}
}
谢谢大家了!!!!
最佳答案
二级知识专家喜欢就甘愿
2021-01-27 09:47
已经实现了,不过是一个降序的。把双重循环中的 if(num[i] < num[j])
改一下就行,把就是升序的了。
全部回答
1楼我有我风格
2021-01-27 12:17
呵呵,你知道那个 random(47)是啥意思吗?这个是种子。
相同的种子会产生相同顺序的随机数,你的47这个种子,每次产生的第一个随机数,永远是 2,不会是别的。
所以,java的是伪随机数哦。
不过这也有一个好处,你连续生成10个随机数,
在运行一次,还是那10个数哦,顺序是完全相同的。
所以一般我们会使用 ramdon() 不带参数,这样就会使用
random(++seeduniquifier + system.nanotime());
也就是系统的纳秒作为种子,这个重复的可能性就及其小了。
总结:相同的种子,产生相同的随机数序列。
希望你明白了。
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]);
}
}
}
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)]);
}
}
}
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看