浏览 8009 次
锁定老帖子 主题:双色球程序java实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-29
最后修改:2008-11-19
package com.color.program; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class DoubleBall { // 用来保存产生的每注双色球号码 private List<int[]> ballList; // 保存一注号码的数组 private int[] ball; /** * 构造方法 * * @param number,产生号码的数量 */ public DoubleBall() { Scanner s = new Scanner(System.in); System.out.print("请输入产生随机号码数量:"); int number = s.nextInt(); this.init(); // 完成ballList的初始化 ballList = new ArrayList<int[]>(); for (int i = 0; i < number; i++) { // 初始化ball ball = new int[7]; // 产生一注号码 ball = this.createBall(ball); ball = this.sort(ball); // 将这注产生的号码添加到list之中 ballList.add(ball); } } /** * 产生双色球的七个号码 * * @param ball * @return */ public int[] createBall(int[] ball) { for (int i = 0; i < ball.length; i++) { // 默认最后一个号码保留给蓝色球 if (i < ball.length - 1) { // 如果是红色球,则验证每个产生的号码是否已经存在。 ball = this.validateBall(ball, i); } else { // 如果是蓝色球,直接产生1--16之间的随机数 ball[i] = (int) Math.round(Math.random() * 15 + 1); } } // 产生号码完毕,返回这注产生的号码。 return ball; } /** * 每次只产生一个红色号码,并验证此号码是否已经存在, 如果存在,重新产生号码,只到没有重复号码。 * * @param ball * @param index * 产生红色球数组的下标,即第几个号码。 * @return */ public int[] validateBall(int[] ball, int index) { // 产生一个1--33的随机数 int random = (int) Math.round(Math.random() * 32 + 1); while (true) { int i = 0; for (; i < index; i++) { // 如果存在重复数字 if (random == ball[i]) { // 重新产生号码 random = (int) Math.round(Math.random() * 32 + 1); // 并且跳出for循环,进入while循环 i = index + 1; } } // 如果验证完了所有号码,那把这个号码插入数组,并返回 if (i == index) { ball[index] = random; return ball; } } } /** * 显示产生的双色球号码 * */ public void displayBall() { System.out.println("============产生号码的详细信息如下============"); for (int[] ball : ballList) { for (int i = 0; i < ball.length; i++) { // 如果号码不足两位数,在前面添加"0"显示。 System.out.print(((ball[i] < 10) ? ("0" + ball[i]) : ball[i]) + "\t"); } System.out.println(); } } /** * 完成初始化,制定双色球号码的 开始和结束区域 * */ public void init() { } /** * 对号码进行排序,只对最后一个号码以前的 号码进行排序 * * @param ball * @return */ private int[] sort(int[] ball) { for (int i = 0; i < ball.length - 1; i++) { for (int j = 0; j < ball.length - i - 2; j++) { if (ball[j] > ball[j + 1]) { int t = ball[j]; ball[j] = ball[j + 1]; ball[j + 1] = t; } } } return ball; } public static void main(String[] args) { DoubleBall ball = new DoubleBall(); ball.displayBall(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-29
color4you 写道 // 如果存在重复数字 if (random == ball[i]) { // 重新产生号码 random = (int) Math.round(Math.random() * 32 + 1); // 并且跳出for循环,进入while循环 i = index + 1; } } 效率不高。 假如多次重复,或则始终重复呢?(当然对这样的小程序完全是没必要担心这个问题的) |
|
返回顶楼 | |
发表时间:2008-11-29
贴一个ruby实现的 其实蛮简单的
def create_num @nums = Array.new #先选择6个红球/33球 while @nums.length < 6 @num = rand(32) + 1 unless @nums.delete(@num) @nums << @num end end #后选择1个篮球/16球 @nums.sort << rand(15) + 1 end p create_num |
|
返回顶楼 | |
发表时间:2008-12-23
最后修改:2008-12-23
假如生成的两组号码是重复的呢?虽然概率很小,但也不是没有可能, 这个没有判断吧
|
|
返回顶楼 | |
发表时间:2009-08-12
boolean java.util.List.contains(Object o)
|
|
返回顶楼 | |
发表时间:2009-08-12
最后修改:2009-08-12
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Ball { private List<Integer> redBalls; private Integer blueBall; public Ball() { calculateRedBalls(); calculateBlueBall(); } private void calculateRedBalls() { List<Integer> balls = new ArrayList<Integer>(); for (int i = 1; i <= 33; i++) { balls.add(i); } Collections.shuffle(balls); redBalls = new ArrayList<Integer>(balls.subList(0, 6)); Collections.sort(redBalls); } private void calculateBlueBall() { blueBall = (int) (Math.random() * 16 + 1); } @Override public String toString() { return "red balls is " + redBalls + " and blue ball is " + blueBall; } public static void main(String[] args) { Ball ball = new Ball(); System.out.println(ball); } } |
|
返回顶楼 | |