需求描述
定义一个存放5个数的数组,随机存入数字,要求打乱数组中所有数据的顺序。
初始尝试
1.错误代码
package day0919;
import java.util.Random;
public class test02 {
public static void main(String[] args) {
//打乱数组中的数据
//需求:定义一个数组,存入五个随机数。要求打乱数组中所有数据的顺序。
Random r=new Random();
int shuZu[]=new int[5];
for (int i = 0; i < shuZu.length; i++) {
int x=r.nextInt(101);
shuZu[i]=x;
}
for (int i = 0; i < shuZu.length; i++) {
System.out.println(shuZu[i]);
}
for (int i = 0; i < shuZu.length; i++) {
int x=r.nextInt(5);
while(shuZu[i]==shuZu[x]){
int a=r.nextInt(5);
x=a;
}
shuZu[i]=shuZu[x];
}
for (int i = 0; i < shuZu.length; i++) {
System.out.println(shuZu[i]);
}
}
}
2.运行结果
3.分析原因
当时思路为遍历数组,每一个数组中的数都随机从数组中抽取一个和原本数字不同的数,但是没有考虑到抽取完之后有可能出现重复的数字
修改代码
1.修改后完整代码
public static void main(String[] args) {
//打乱数组中的数据
//需求:定义一个数组,存入五个随机数。要求打乱数组中所有数据的顺序。
Random r=new Random();
int shuZu[]=new int[5];
for (int i = 0; i < shuZu.length; i++) {
int x=r.nextInt(101);
shuZu[i]=x;
}
for (int i = 0; i < shuZu.length; i++) {
System.out.println(shuZu[i]);
}
for (int i = 0; i < shuZu.length; i++) {
int x=r.nextInt(5);
while(shuZu[i]==shuZu[x]){
int a=r.nextInt(5);
x=a;
}
int t=shuZu[i];
shuZu[i]=shuZu[x];
shuZu[x]=t;
}
System.out.println("打乱后:");
for (int i = 0; i < shuZu.length; i++) {
System.out.println(shuZu[i]);
}
}
2.运行结果