黑马程序员技术交流社区

标题: 双色球模拟器 还是出现了重复 应该怎么改 [打印本页]

作者: 王子鹏    时间: 2016-5-24 09:06
标题: 双色球模拟器 还是出现了重复 应该怎么改
  1. /*
  2. * 分析 : 双色球的七个球数值均不大于34  是随机的 切6个球不重复
  3. *                         其中红色6个 蓝色1个
  4. *     步骤1:
  5. *                     定义红色六个  为了方便 定义一个长度为6的数组
  6. *                     定义蓝色球一个  
  7. *     步骤2:
  8. *                     采用随机的方式  获取七个颜色不同的值在1到34的整数
  9. *                    
  10. *     步骤3:
  11. *              设置排列方式使6个红球不重复
  12. *     步骤4:
  13. *                     输出7个球
  14. */

  15. public class 双色球模拟器 {

  16.         public static void main(String[] args) {
  17.                 int r[]= new int [6];        //定义一个长度为6的数组表示六个红球
  18.                 int b;                                                //  定义一个篮球

  19.                 // 随机出6个红球
  20.                 for(int j=0;j<6;j++){
  21.                         r[j] =(int) (Math.random()*33+1);
  22.                
  23.                         System.out.print(r[j]+"  ");
  24.                 }
  25.                 // 判定六个红球不重复
  26.         for(int j=1 ;j<6;j++){
  27.                 for (int k =0; k<j-1;k++){
  28.                         if(r[j]==r[k]){
  29.                                 r[j] =(int) (Math.random()*33+1);
  30.                                
  31.                         }
  32.                 }
  33.         }

  34.        
  35.                
  36.                 //随机出1个篮球
  37.         b=(int)(Math.random()*16+1);
  38.         for(int j=0 ;j<6;j++){
  39.                 if(b==r[j]){
  40.                        
  41.                         b=(int)(Math.random()*16+1);
  42.                        
  43.                        
  44.                 }
  45.         }
  46.                

  47.         }

  48. }
复制代码



作者: My_Android    时间: 2016-5-24 09:58
看不懂你嵌套的循环的意思。for (int k =0; k<j-1;k++) ;  第一次循环的时候不会执行循环里的内容。 第一次j =1
k=0 ; 0<0  怎么进得去判断?
作者: 王子鹏    时间: 2016-5-24 11:27
My_Android 发表于 2016-5-24 09:58
看不懂你嵌套的循环的意思。for (int k =0; k

那怎么改呢··
作者: TS-松子    时间: 2016-5-24 11:34
判断6个红球不重复的时候如果r[j]==r[k],再随机一个数,但是这个数没有经过判断,可能和之前的数重复,应该可以使用递归解决。
作者: 王子鹏    时间: 2016-5-24 16:35
TS-松子 发表于 2016-5-24 11:34
判断6个红球不重复的时候如果r[j]==r[k],再随机一个数,但是这个数没有经过判断,可能和之前的数重复,应 ...

明白了  谢谢  问题的关键在于随机出来的数可能还是重复
作者: 大牛1    时间: 2016-5-24 21:59
产生的随机数可能会相同?但是怎么解决呢?
作者: J_P    时间: 2016-5-24 22:17
还不算长的代码
作者: sasyun    时间: 2016-5-24 22:20
顶一个                             
作者: 王子鹏    时间: 2016-5-24 22:27
J_P 发表于 2016-5-24 22:17
还不算长的代码

恩恩 其中一段
作者: okchenyang44    时间: 2016-5-24 22:47
复习下  水一个  ..打酱油去复习下  水一个  ..打酱油去
作者: 逝水大魔王    时间: 2016-5-24 23:00
import java.util.ArrayList;

public class Int_arr {
        public static void main(String[] args) {
                /*
                 * 分析 : 双色球的七个球数值均不大于34 是随机的 切6个球不重复 . * 其中红色6个 蓝色1个 . * 步骤1: . *
                 * 定义蓝色球一个 . * 步骤2: . * 采用随机的方式 获取七个颜色不同的值在1到34的整数 . * 步骤3: . *
                 * 设置排列方式使6个红球不重复 . * 步骤4: . * 输出7个球
                 */
                ArrayList<Integer> red = new ArrayList<>(); // 定义一个集合
                // 创建无限循环,避免重复出现相同数值
                while(true) {
                        double d = (Math.random()*33 + 1);
                        //判断,如果集合中不包含该数值,就添加
                        if (!red.contains(d)) {
                                red.add((int)d);
                                //当球数是6个的时候跳出循环
                        if (red.size() == 6) {
                                break;
                        }
                }
        }
                //随机拿个蓝色球,个人建议之间red.add((int)(Math.random()*33 +1));
                int blue = (int)(Math.random()*33 +1);
                /*如果需要蓝色球和红色也不一样可以添加下面的while
                 * while (true) {
                        if (!red.contains(blue)) {
                                red.add(blue);
                                break;
                        }
                }*/
                red.add(blue);
                //便立集合输出
                for (Integer print : red) {
                        System.out.print(print+",");
                }
        }
}
//希望可以帮到你哦,集合的方法比较多,好做
作者: 王子鹏    时间: 2016-5-27 15:58
逝水大魔王 发表于 2016-5-24 23:00
import java.util.ArrayList;

public class Int_arr {

对啊  被你这么一弄  简单多了  我怎么就没想到集合··




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2