zoukankan      html  css  js  c++  java
  • JAVA的双色球 小程序

      还是挺简单的,功能过于强大。

    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    public class doubleRedBall {
        private static Scanner inputScanner;
        /**
         * 顺着思路写 就行
         * 
         * */
    
        public static void main(String[] args) {
            // 定义相关变量
            int[] userRedBall = new int[6]; //用户生成的红球号码
            int[] sysRedBall = new int[6];// 系统生成的红球号码
            int userBlueBall = 0;    //用户选择的蓝球
            int sysBlueBall = 0;    //系统生成的蓝球
            int redCount = 0,blueCount = 0;//用户选择正确的红球数和蓝球数。
            int[] redBall = new int[33];
            inputScanner = new Scanner(System.in);
            Random random = new Random();
            //需要随机生成6个在1-33之间不重复的数(算法)
            for(int i=0;i<redBall.length;i++) {
                redBall[i] = i+1;
            }
            //游戏开始,系统提示。
            System.out.println("定个小目标,先中它一个亿!");
            System.out.println("打算自选号码,还是首选号码? 
    请输入"机选"或"手选"。");
            Boolean answerRight = false;
            while (!answerRight) {
                String choose = inputScanner.next();
                answerRight = true; // 下次默认跳出while
                switch (choose) {
                case "机选":
                    computerSelection(redBall, userRedBall);
                    userBlueBall = random.nextInt(16) + 1;
                    break;
                case "手选":
                    System.out.println("请选择6个红球号码(1-33):");
                    for(int i=0;i<userRedBall.length;i++) {
                        System.out.println("输入第"+(i+1)+"个号码:");
                        userRedBall[i] = inputScanner.nextInt();
                        if(userRedBall[i]<1|userRedBall[i]>33) {
                            System.out.println("输入有误,请重新输入");
                            i--;
                        }
                    }
                    System.out.println("请选择1个蓝球号码(1-16):");
                    userBlueBall = inputScanner.nextInt();
                    
                    break;
                default:
                    System.out.println("输入有误!请输入"机选"或"手选"。");
                    answerRight = false; // 输入不合法,继续while。
                    break;
                }
            }// 至此 用户 球号确定
            //系统随机生成号码。
            computerSelection(redBall, sysRedBall);//虽然 redBall 的顺序变了 但是不影响乱序生成
            sysBlueBall = random.nextInt(16)+1;
            //至此  系统球号确定。
            for(int i=0;i<userRedBall.length;i++) {
                for(int j=0;j<sysRedBall.length;j++) {
                    if(userRedBall[i]==sysRedBall[j]) {
                        redCount++;
                    }
                }
            }
            if(userBlueBall==sysBlueBall) {
                blueCount++;
            }
            System.out.println("红球一致个数:"+redCount);
            System.out.println("蓝球一致个数:"+blueCount);
            //公布中奖号码
            System.out.println("本期中奖红球号码:");
            Arrays.sort(sysRedBall);
            System.out.println(Arrays.toString(sysRedBall));
            System.out.println("本期中奖蓝球号码:"+sysBlueBall);
            //公布用户号码
            System.out.println("您选择的红球号码:");
            Arrays.sort(userRedBall);
            System.out.println(Arrays.toString(userRedBall));
            System.out.println("您选择的蓝球号码:"+userBlueBall);
            
        }
        //用于在指定数列中 随机生成多个不重复的数的算法。
        /**
         * @param balls 给定的需要在其中选出6个元素的数组
         * @param redBall 存储选出的6个元素的数组
         * 传进来的 ball userRedBall 都会改变。
         */
        public static void computerSelection(int[] balls,int[] userRedBall) {
            
            Random random = new Random();
            int index = -1;
            for(int i=0;i<userRedBall.length;i++) {
                 index = random.nextInt(balls.length-1-i);
                 userRedBall[i] = balls[index];
                 
                 balls[index] = balls[index]^balls[balls.length-1-i];
                 balls[balls.length-1-i] = balls[index]^balls[balls.length-1-i];
                 balls[index] = balls[index]^balls[balls.length-1-i];
            }
            // 此时得到的 userRedBall 就是选出的六个不重复的红球。
        }
        /**
         * @param first
         * @param second
         * @return
         * 尽量优化速度,之后的结果 nlogn 的速度。
         */
        public static int compSame(int[] first,int[] second) { 
            int lenFirst = first.length,lenSecond = second.length;
            int sameNum=0;
            for(int i=0;i<lenFirst;i++) {
                if(Arrays.binarySearch(second, first[i])>=0&Arrays.binarySearch(second, first[i])<lenSecond) {
                    sameNum++;
                }
            }
            return sameNum;
            
        }
    }
    /**
     * 形参和实参的变化。
     * 如果基本类型和String  是存储在栈内存当中的,当被调函数被调用时形参申请空间,开始执行操作,在操作完毕的时候释放 形参申请的空间。这样的话  实参根本没有改变。
     * 如果操作对象是对象的话,形参接受栈内存 内的地址,然后去堆内存中进行操作,此时操作的是 堆内存中的数据,虽然地址没变 ,但是地址指向的空间内的 数据已经改变。 
     * 
     * 
     * */

    byte short  int 在计算的时候  会自动转换为  int 类型。

  • 相关阅读:
    思维发散的双刃剑
    一个请求过来都经过了什么?(Thrift版)
    业务开发转基础开发,这三种「高可用」架构你会么?
    程序常用的设计技巧
    美团分布式服务通信框架及服务治理系统OCTO
    《程序员修炼之道》解读
    面试官说:你真的不是不优秀只是不合适
    架构视角-文件的通用存储原理
    那些影响深远的弯路
    iOS sqlite ORM框架-LKDBHelper
  • 原文地址:https://www.cnblogs.com/A-FM/p/5617111.html
Copyright © 2011-2022 走看看