本帖最后由 app297 于 2014-2-27 00:35 编辑
今天是在传智上课第5天了, 老师讲了一个双色球的,数组算法,但是回来后,自己把功能一扩展,
大部分时间会出现 空指针异常。偶尔程序会正常运行,希望大家能帮忙看看到底是 数组排序那一块什么地方出问题了。
源码我上传到附件,希望有人能下载帮我看一看
DualColoredBall.zip
(1.39 KB, 下载次数: 883)
代码里面有换行符。大家还是直接下载源码 帮我看看吧
- <P>/**
- 需求:在控制台模拟双色球开奖和 单一的 投注
- 思路:
- 1、先编写生成 双色球元素 和 自动摇号开奖的 号码红蓝组合
- 2、接收用户输入的 单式投注。(功能扩展,加入机选注下注)
- 3、对比结果。并开奖
- */
- import java.util.*;</P>
- <P>class DualColoredBall {
- public static void main(String[] args) {
- System.out.println("=========== 双色球下注界面 =======\n");
- String[] dcb = new String[7];
- Scanner sr = new Scanner(System.in);
- System.out.println("请输入01~33之间的6个红球(每次输入一个):");
- for (int x = 0; x < 6; x++) {
- System.out.print("第" + (x + 1) + "个红球:");
- String temp = sr.next();
- dcb[x] = temp;
- }
- // 排序之后,再和 开奖号码对比
- arraySort(dcb);
- // 加上篮球
- System.out.print("请输入篮球(01~16):");
- dcb[6] = sr.next();
- // 调用开奖号码
- String[] dcbOpen = dCBallOpen();</P>
- <P> System.out.print("\n开奖号码:" + Arrays.toString(dcbOpen));
- System.out.print("\n您的号码:" + Arrays.toString(dcb));
- }</P>
- <P> public static String[] dCBallOpen() {
- String[] dcb = { "01", "02", "03", "04", "05", "06", "07", "08", "09" };
- String[] dbc2 = Arrays.copyOf(dcb, 33); // 创建双色球 33个号码数组
- // 生成null的双色球数字
- for (int i = 9; i < dbc2.length; i++) {
- dbc2[i] = i + "";
- }
- // 随机生成开奖
- String[] newDbc = new String[7]; // 存储随机生成的6 + 1 红蓝球
- // 随机去重复。 就要想到 旗标对应法
- boolean[] flags = new boolean[33];
- Random r = new Random();
- for (int count = 0; count < 6; count++) {
- int index = r.nextInt(33);
- if (!flags[index]) {
- newDbc[count] = dbc2[index];
- flags[index] = true;
- }
- }
- // 先排序,再返回
- arraySort(newDbc);
- newDbc[6] = dbc2[r.nextInt(16)];// 添加蓝球 到末尾
- return newDbc;</P>
- <P> }</P>
- <P> /**
- * 数组 选择排序,从小到大。
- */
- public static void arraySort(String[] arr) {
- // 在处理的时候,把字符串元素转换成 int 然后才能比较
- // 选择排序,从第一个开始,挨个的同后面的对比
- for (int i = 0; i < arr.length - 2; i++) { // 因为自己不和自己比,还有就是只排序前5位,最后一位是篮球,不用排
- for (int j = i + 1; j < arr.length - 1; j++) {
- int num1 = Integer.parseInt(arr[i]); // 把该角标位置的字符串转成int类型
- int num2 = Integer.parseInt(arr[j]);
- if (num1 > num2) {
- String temp = arr[i];// 同理,交换数组位置
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- }
- }
- }
- </P>
复制代码 |