Java综合案例(考察基础语法)

一、找素数

1.从头到尾依次遍历

import java.util.Scanner;
public class JAVA
{
    public static void main(String[] args)
    {
        int count = 0;
        Scanner sc = new Scanner(System.in);
        int head = sc.nextInt();
        int tail = sc.nextInt();
        OUT:
        for(int i = head;i<=tail;i++)
        {
            if(i == 0||i == 1)
                continue OUT;
            for(int j = 2;j<i;j++)
            {
                if(i%j == 0&&i != 2)
                    continue OUT;
            }
            System.out.println(i);
            count++;
        }
        System.out.println("有"+count+"个质数");
    }
}

补充:OUT为循环标记,可以结合continue跳转到循环外部

2.从头遍历到尾的平方根

原理与上面类似

import java.util.Scanner;
public class JAVA
{
    public static void main(String[] args)
    {
        int count = 0;
        Scanner sc = new Scanner(System.in);
        int head = sc.nextInt();
        int tail = sc.nextInt();
        OUT:
        for(int i = head;i<=tail;i++)
        {
            if(i == 0||i == 1)
                continue OUT;
            for(int j = 2;j<Math.sqrt(i)+1;j++)
            {
                if(i%j == 0&&i != 2)
                    continue OUT;
            }
            System.out.println(i);
            count++;
        }
        System.out.println("有"+count+"个质数");
    }
}

补充:Math.sqrt(double a) 用于求一个数的平方根

           Math 属于 java.lang 包下,不需要导包

3.埃氏筛法

太难绷了,创建一个方法打质数表,然后依次打印输出

import java.util.Arrays;
import java.util.Scanner;
public class JAVA
{
    public static void main(String[] args)
    {
        int count = 0;
        Scanner sc = new Scanner(System.in);
        int head = sc.nextInt();
        int tail = sc.nextInt();
        int[] isprime = new int[tail+1];
        //将数组填充为1,以质数为1,合数为0
        Arrays.fill(isprime,1);
        checkisprime(isprime,tail);
        //遍历表后依次输出
        for(int i = head;i<=tail;i++)
        {
            if(isprime[i] == 1)
            {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("有"+count+"个质数");
    }
    //创建一个打质数表的方法
    public static void checkisprime(int[] isprime,int tail)
    {
        for(int i = 2;i<=tail;i++)
        {
            if(isprime[i] == 1)
            {
                if ((long) i * i < tail)
                {
                    for(int j = i*i;j <= tail;j+=i)
                    {
                        isprime[j] = 0;
                    }
                }
            }
        }
    }
}

1)创建好数组(需要注意数组大小),将数组中的元素全置1(质数为1,合数为0)

2)从2开始打表,2本身为质数,将范围内2的倍数全部置0(只需要从2的平方开始倍数置0)

3)继续遍历,3也是同理

4)遇到4停止,因为4不在是质数(被标记为0),跳过当次执行,直到遍历结束

5)打表结束,重新遍历表,依次输出数据

补充:Arrays.fill(数组,数据)    ----   将数组的元素填充为相应数据

           Arrays 在 java.util 包下,需要导包

4.线性筛法(欧拉筛)

真的难,以后写

二、验证码

验证码有设定的长度,随机生成数字,大小写字母组成

import java.util.Random;
import java.util.Scanner;
public class JAVA
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(createCode(n));
    }
    //生成验证码
    public static String createCode(int n)
    {
        String code = "";
        Random r = new Random();
        for(int i = 0;i<n;i++)
        {
            //0为数字,1为大写字母,2为小写字母
            int type = r.nextInt(3);
            switch (type)
            {
                case 0:
                    code += r.nextInt(9);
                    break;
                case 1:
                    // A为65,Z为65+25
                    code += (char)(r.nextInt(26)+65);
                    break;
                case 2:
                    // a为97,z为97+25
                    code += (char)(r.nextInt(26)+97);
                    break;
            }
        }
        return code;
    }
}

思路:1)先用伪随机数来决定每一位是数字或者大小写字母

           2)利用 A(65) 和 a(97) 的ASCII码值来强转为大小写字母

           3)利用 += 来把每一位数据连接到字符串上(字符串不能直接赋值修改)

三、打印乘法表

最简单的一集,考察函数嵌套

        for(int i = 1;i<=9;i++)
        {
            for(int j = 1;j<=i;j++)
            {
                System.out.print(j+"*"+i+"="+i*j+"\t");
            }
            System.out.println();
        }

四、双色球

最麻烦的一集,不难,主要考验代码逻辑,代码不是我写的(抄的)

1、投注:
(1)双色球投注区分为红色球号码区和蓝色球号码区,
(2)红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。
(3)投注时选择6个红色号码和1个蓝色球号码组成。
2、中奖
(1)一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同)
(2)二等奖:投注号码与当期开奖号码中的6个红色球号码相同
(3)三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同
(4)四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同
(5)五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同
(6)六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class JAVA {
    public static void main(String[] args) {
        //main()方法为主流程
        //初始化Scanner类型的变量input
        Scanner input = new Scanner (System.in);
        //1、生成菜单显示
        System.out.println("===================================");

        System.out.println("欢迎光临彩票中心");

        System.out.println("===========================================");
        //2、进入循环,判断用户输入的信息
        while(true) {
            //因为双色球的值类似于01,15之类的,所以初始化一个String类型的数组来存储选出来的结果
            String[] userNums;
            System.out.println("菜单功能");
            System.out.println("1——用户自选");
            System.out.println("2——机器帮选");
            System.out.println("0——退出程序");
            System.out.println("请用户进行选择操作:");
            //初始化一个int类型的变量userChooseNum用来存储用户的输入
            int userChooseNum = input.nextInt();
            //对用户输入的数字进行判断
            switch (userChooseNum) {
                case 1:
                    //用户进行自选
                    userNums = chooseNumsBySelf(input);
                    break;
                case 2:
                    //机器进行帮选
                    userNums = chooseNumsByMachine();
                    break;
                case 0:
                    //退出整个程序
                    System.out.println("您已退出程序,欢迎您的下次光临!");
                    System.exit(0);
                default:
                    //用户输入有误,提醒用户重新输入
                    System.out.println("您输入的数字有误,请您重新选择!");
                    //输入错误,退出本次循环,进入下次循环
                    continue;
            }
            //3、输出用户最终选择的结果
            System.out.println("您选择的双色球号码是:"+Arrays.toString(userNums));
            //4、通过随机数生成中奖号码(中奖号码的生成方式就是机器生成的方式)
            String[] luckyNums =  chooseNumsByMachine();
            System.out.println("本次中奖的双色球号码是: "+Arrays.toString(luckyNums));
            //5、进行用户双色球号码与中奖双色球号码的对比,判断用户是否中奖
            isWinningNums(userNums,luckyNums);
        }
    }


    /**
     * 用户进行自选功能方法
     * @return
     */
    public static String[] chooseNumsBySelf(Scanner input) {
        //红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。
        //因为双色球的号码都是类似于01,12之类的字符串,因此我们创建一个numsPool数组用来存储01~33的值
        String[] numsPool = {
                "01","02","03","04","05","06","07","08",
                "09","10","11","12","13","14","15","16",
                "17","18","19","20","21","22","23","24",
                "25","26","27","28","29","30","31","32","33"
        };
        //初始化boolean类型的数组numsPoolFlag,默认数值为false
        boolean[] numsPoolFlag = new boolean[33] ;
        //1、进行红球的号码获取
        //初始化长度为6的String类型的userNums数组用来存储用户选择的红色号码
        String[] userNums = new String[6];
        //循环数组进行值的输入
        for(int i = 0; i<userNums.length;i++) {
            int redNum = 0;
            while(true) {
                //提醒用户输入号码
                System.out.println("请您从1~33的数字中输入红球第【"+(i+1)+"】位号码:");
                redNum = input.nextInt();
                //对用户输入的号码进行判断
                if(redNum < 1||redNum > 33 ) {
                    //用户输入错误
                    System.out.println("您的输入有误,请您输入1~33中的有效数字!");
                    continue;
                }
                //此时的redNum表示用户输入的数字正确
                //为了使用户输入的数字不重复,进行标志位操作
                //用户所输的数字-1即为numsPoolFlag中所对应的值,默认数值为false即用户输入的数字没有重复
                if(numsPoolFlag[redNum-1]) {
                    //表示用户输入的数字重复,提醒用户重新输入
                    System.out.println("您输入的第【"+(i+1)+"】位号码重复了,请您重新输入!");
                    continue;
                }
                break;
            }
            //将选中的红色号码赋值给用户数组
            userNums[i] = numsPool[redNum-1];
            //将标志位更改为true
            numsPoolFlag[redNum-1] = true;
        }
        // 使用 Arrays.sort() 对现有的六个红球号码进行排序
        Arrays.sort(userNums);
        //2、蓝色球号码区由1-16共十六个号码组成
        //初始化int类型的blueNum作为蓝色球的号码
        int blueNum = 0;
        while(true) {
            //提醒用户输入号码
            System.out.println("请您从1~16的数字中输入1个蓝球的号码:");
            blueNum = input.nextInt();
            //对用户输入的号码进行判断
            if(blueNum < 1|| blueNum > 16 ) {
                //用户输入错误
                System.out.println("您的输入有误,请您输入1~16中的有效数字!");
                continue;
            }
            break;
        }
        //3、获得蓝球号码后进行红球号码和蓝球号码的拼合
        //复制userNums数组并将数组的长度设置为7
        userNums = Arrays.copyOf(userNums, userNums.length+1);
        //将userNums数组的最后一位设置为蓝球号码
        userNums[userNums.length-1] = numsPool[blueNum-1];
        return userNums;
    }
    /**
     * 机器为用户进行帮选的功能
     * @return
     */
    public static String[] chooseNumsByMachine() {
        //红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。
        //因为双色球的号码都是类似于01,12之类的字符串,因此我们创建一个numsPool数组用来存储01~33的值
        String[] numsPool = {
                "01","02","03","04","05","06","07","08",
                "09","10","11","12","13","14","15","16",
                "17","18","19","20","21","22","23","24",
                "25","26","27","28","29","30","31","32","33"
        };
        //初始化boolean类型的数组numsPoolFlag,默认数值为false
        boolean[] numsPoolFlag = new boolean[33] ;
        //1、进行红球的号码获取
        //初始化长度为6的String类型的userNums数组用来存储用户选择的红色号码
        String[] userNums = new String[6];
        Random random = new Random();
        //循环数组进行值的输入
        for(int i = 0; i<userNums.length;i++) {
            int redNum = 0;
            while(true) {
                redNum = random.nextInt(33);
                //为了使用户输入的数字不重复,进行标志位操作
                //用户所输的数字-1即为numsPoolFlag中所对应的值,默认数值为false即用户输入的数字没有重复
                if(numsPoolFlag[redNum]) {
                    //表示数字重复,重新生成随机数
                    continue;
                }
                break;
            }
            //将选中的红色号码赋值给用户数组
            userNums[i] = numsPool[redNum];
            //将标志位更改为true
            numsPoolFlag[redNum] = true;
        }
        // 使用 Arrays.sort() 对现有的六个红球号码进行排序
        Arrays.sort(userNums);
        //2、蓝色球号码区由1-16共十六个号码组成
        //初始化int类型的blueNum作为蓝色球的号码
        int blueNum = random.nextInt(16);
        //3、获得蓝球号码后进行红球号码和蓝球号码的拼合
        //复制userNums数组并将数组的长度设置为7
        userNums = Arrays.copyOf(userNums, 7);
        //将userNums数组的最后一位设置为蓝球号码
        userNums[userNums.length-1] = numsPool[blueNum];
        return userNums;
    }
    /**
     * 用户的双色球号码和幸运号码进行对比判断用户是否中奖
     * @param userNums
     * @param luckyNums
     */
    public static void isWinningNums(String[] userNums, String[] luckyNums) {
        /* (1)一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
         * (2)二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
         * (3)三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
         * (4)四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同,即中奖;
         * (5)五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同,即中奖;
         * (6)六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。
         */
        //初始化int类型的redSameCount用来存储红色球相同的数量
        int redSameCount = 0;
        //初始化int类型的blueSameCount用来存储蓝色球相同的数量
        int blueSameCount = 0;
        //1、判断红球相等数量
        for(int i = 0; i<userNums.length-1;i++) {
            for(int j =0; j<luckyNums.length-1;j++) {
                if(userNums[i].equals(luckyNums[j])) {
                    redSameCount++;
                }
            }
        }
        //2、判断蓝球相等数量
        if(userNums[userNums.length-1].equals(luckyNums[luckyNums.length-1])) {
            blueSameCount++;
        }
        //3、根据红色球和蓝色球的数量匹配奖项
        if(redSameCount == 6 && blueSameCount==1) {
            //一等奖
            System.out.println("恭喜您获得一等奖,奖项是5000万元!");
        }else if(redSameCount == 6) {
            //二等奖
            System.out.println("恭喜您获得二等奖,奖项是1000万元!");
        }else if(redSameCount == 5 && blueSameCount==1) {
            //三等奖
            System.out.println("恭喜您获得三等奖,奖项是500元!");
        }else if(redSameCount == 5 ||redSameCount == 4 && blueSameCount==1) {
            //四等奖
            System.out.println("恭喜您获得四等奖,奖项是200元!");
        }else if(redSameCount == 4 ||redSameCount == 3 && blueSameCount==1) {
            //五等奖
            System.out.println("恭喜您获得五等奖,奖项是10元!");
        }else if(blueSameCount==1) {
            //六等奖
            System.out.println("恭喜您获得六等奖,奖项是5元!");
        }else {
            //未中奖
            System.out.println("很遗憾,您本次未能中奖!!!");
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值