您的位置:首页 > 编程语言 > Java开发

for循环的小练习之6个不重复数字的所有组合输出

2017-10-23 21:27 253 查看

for循环的小练习之6个不重复数字的所有组合输出

介绍

学习Java基础时做的小练习分享,请大家批评指正!

小练习

需求:输出数字1-6六个数字所有的不同排列组合.

分析:首先我们要明确有多少种组合,6位数的所有不同排列组合可用6!计算得出是720种.

代码:

public class Test {
public static void main(String[] args) {
int count = 0;//定义个计数器先~
ArrayList<int[]> arrList = new ArrayList<>();//我选择使用集合做,存入数组对象
Random r = new Random();
arrList.add(new int[]{1,2,3,4,5,6});//先加个123456的组合(这里也可以不加,为了稳妥我选择加了,这里加了之后下面要减少一个计算,即719个组合)
for (int m = 1; m < 720; m++){
int[] arr = new int[6];//6位数组合的数组
for (int i = 0; i < arr.length; i++) {//从这里我们先解决随机数方法产生不重复的6个数字,因为是随机的,所以组合也是随机的
boolean b = true;//定义标记
int num = r.nextInt(6)+1;//1-6的随机数
for (int j = 0; j < arr.length; j++) {
if (arr[j] == num) {//如果随机数产生后在遍历过程中有一样的数字的话
b = false;//不进入if
i--;//并且回到刚才的步骤重新来一次
break;
}
}
if (b) {
arr[i] = num;//如果没有进入上面的if则说明没有重复的,则添加到数组
}
}//至此产生不重复1-6数字数组
boolean flag = true;//定义第二个标记,此标记用于集合的添加
for (int i = 0; i < arrList.size(); i++) {
if (Arrays.equals(arrList.get(i), arr)) {//使用Arrays中的equals方法对两个数组进行比较,此比较若要相等需同时满足元素及元素顺序完全一致才会true
flag = false;//如果相等,则不进入下个if
}
}
if (flag) {//如果没有进入上面的if,说明这个数字排列数组之前没有过
arrList.add(arr);//则添加进集合
count++;//这个count用来验证是否添加了719个数组
System.out.println("添加成功"+count+"个");//同验证用
} else {
System.out.println("添加失败");//用于验证
m--;//如果没有添加成功,整个for重新来一次,见最上面
}
}//至此产生720个不重复排列数组

//用来看看是不是真的没有重复滴,要验证比较麻烦哈,有耐心的朋友可以真的去验证看看,逻辑没错应该是没问题的了.
System.out.println(arrList.size());
for (int i = 0; i < arrList.size(); i++) {
for (int j = 0; j < arrList.get(i).length; j++) {
System.out.print(arrList.get(i)[j]+" ");
}
System.out.println();
}
}
}
//PS:这种办法比较麻烦,希望有更好方法的朋友可以交流一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐