Day06

Day06

案例

案例1:买飞机票

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ldd9HlXA-1668773841245)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116101055756.png)]

package com.itheima.demo;

import java.util.Scanner;

public class Demo01 {
    //用户购买机票时,机票原价会按照淡季、旺季,头等舱还是经济舱的情况进行相应的优惠,优惠方案如下:
    // 5-10月为旺季,头等舱9折,经济舱8.5折; 11月到来年4月为淡季,头等舱7折,经济舱6.5折,
    // 请开发程序计算出用户当前机票的优惠价。
    //接收数据:原价机票价,月份,座位类型
    //返回优惠机票价
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入原价机票价");
        double money = sc.nextDouble();
        System.out.println("请输入月份,(1-12数字)");
        int mouth = sc.nextInt();
        System.out.println("请输入座位类型(头等舱/经济舱)");
        String type = sc.next();
        double discountPrice = getDiscountPrice(money,mouth,type);
        System.out.println("优惠机票价: "+discountPrice);
    }

    public static double getDiscountPrice(double money, int mouth, String type) {
        if (mouth >= 5 && mouth <= 10) {
            switch (type) {
                case "头等舱":
                    money *= 0.9;
                    break;
                case "经济舱":
                    money *= 0.85;
                    break;
                default:
                    money = -1;//返回一个-1特殊值,说明不正确
                    System.out.println("座位类型输入有误");
            }
        } else if (mouth >= 11 && mouth <= 12 || mouth >= 1 && mouth <= 4) {
            switch (type) {
                case "头等舱":
                    money *= 0.7;
                    break;
                case "经济舱":
                    money *= 0.65;
                    break;
                default:
                    money = -1;//返回一个-1特殊值,说明不正确
                    System.out.println("座位类型输入有误");
            }
        }else {
            System.out.println("月份输入有误");
        }
        return money;
    }
}

案例2:验证码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZsvEnhO-1668773841246)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116101232863.png)]

package com.itheima.demo;

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

public class Demo02 {
    //开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母。
    public static void main(String[] args) {
        System.out.println(getCode(5));
        System.out.println(getCode(7));

    }
    public static String getCode(int num) {
        //1.定义一个空字符串
        String code = "";
        //random随机字符
        Random r = new Random();
        //2.for循环,生成随机随机字符
        for (int i = 0; i < num; i++) {
            //3.先生成随机数:0:大写字母   1:小写字母  2:数字
            int type = r.nextInt(3);
            //4.得到随机数后判断判断随机生成的是大写字母,小写字母,还是数字,值匹配switch
            //每个case里生成随机字符
            switch (type) {
                //生成随机大写字母,通过ASCII码
                //A:65  共26个字母  故Z:65+26-1=90
                //范围:65-90
                case 0:
                    char i1 = (char) (r.nextInt(26) + 65);//生成的int,但是需要字符  int -->char  强制转换
                    code += i1;//运算中有字符串,+为拼接
                    break;
                case 1:
                    //a:97  26  z:122
                    char i2 = (char) (r.nextInt(26) + 97);//生成的int,但是需要字符  int -->char  强制转换
                    code += i2;//运算中有字符串,+为拼接
                    break;
                case 2:
                    int i3 = r.nextInt(10);
                    code += i3;
                    break;
            }//因为只有这三种情况,一定会匹配其中一种故不需要写default;

        }
        return code;

    }
}

案例3:评委打分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiTtckL3-1668773841246)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116111526023.png)]

package com.itheima.demo;

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


public class Demo03 {
    //在唱歌比赛中,可能有多名评委要给选手打分,分数是[0 - 100]之间的整数。
    // 选手最后得分为:去掉最高分、最低分后剩余分数的平均分,
    // 请编写程序能够录入多名评委的分数,并算出选手的最终得分
    public static void main(String[] args) {
        System.out.println("选手的最终得分:"+getScore(5));

    }

    public static double getScore(int num) {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[num];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"位评委的分数(0-100的整数)");
//            int i1 = sc.nextInt();
//            arr[1] = i1;
            arr[i] = sc.nextInt();//注意简写方便!!!
        }
        int max = arr[0];
        int min = arr[0];
        int sum = 0;
        //三件事儿可以一个循环搞定!
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]>max){
                max = arr[i];
            }
            if (arr[i]<min){
                min = arr[i];
            }
            sum += arr[i];
        }
//        for (int i = 0; i < arr.length; i++) {
//            if (arr[i] > max) {
//                max = arr[i];
//            }
//        }
//
//        for (int i = 0; i < arr.length; i++) {
//            if (arr[i]<min){
//                min = arr[i];
//            }
//        }
//        for (int i = 0; i < arr.length; i++) {
//           sum += arr[i];
//        }
       double score = (sum-max-min)*1.0/(num-2); //不加*1.0,右边结果是int,会把小数部分舍弃
        return score;
    }
}

案例4:数字加密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIsClWnr-1668773841247)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116120121100.png)]

package com.itheima.demo;

public class Demo04 {
    //某系统的数字密码是一个四位数,如1983,为了安全,需要加密后再传输,
    // 加密规则是:对密码中的每位数,都加5,再对10求余,最后将所有数字顺序反转,得到一串加密后的新数,
    // 请设计出满足本需求的加密程序!
    //这个程序既可以加密也可以解密
    public static void main(String[] args) {

        System.out.println("加密后的新数"+encrypt(1983));
    }

    //encrypt加密 ,decrypt解密
    public static String encrypt(int num) {
        //1.将整数拆成数组
        int[] arr = new int[4];
        arr[0] = num / 1000;
        arr[1] = num / 100 % 10;
        arr[2] = num / 10  % 10;
        arr[3] = num  % 10;


        //2.对数组元素加密
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (arr[i]+5)%10;
        }
        //3.反转数组元素
        for (int i = 0,j =arr.length-1; i < j; i++,j--) {
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
        //4.拼接元素
        String pwd = "";
        for (int i = 0; i < arr.length; i++) {
            pwd += arr[i];
        }
        return pwd;
    }
}

案例5:拷贝数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vvo56Lb-1668773841247)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116123813960.png)]

package com.itheima.demo;

public class Demo05 {
    //请把一个整型数组,例如存了数据:11,22,33,拷贝成一个一模一样的新数组出来。
    public static void main(String[] args) {
        int[] arr = {11, 22, 3};
        int[] arr2 = newArray(arr);
        printArray(arr2);
    }

    public static void printArray(int[] arr2) {
        System.out.print("[");
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(i == arr2.length - 1 ? arr2[i] : arr2[i] + ",");//因为最后一个就不用逗号了,所以这样写
        }
        System.out.println("]");
    }

    //需要返回一个数组,数组:数据类型[]
    public static int[] newArray(int[] arr) {
        int[] arr2 = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arr2[i] = arr[i];

        }
        return arr2;
    }
}

案例6:找素数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgtKSRY7-1668773841248)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116150241936.png)]

关键点:标记符

package com.itheima.demo;

public class Demo06 {
    //找素数 101-200,输出全部
    //说明:除了1和它本身以外,不能被其他正整数整除,就叫素数。
    //比如:3、7就是素数,而9、21等等不是素数。
    public static void main(String[] args) {
        int count = getPrimeNumber(101, 200);
        System.out.println("101-200素数个数为:"+count);

    }

    public static int getPrimeNumber(int n, int m) {
        //定义一个空变量接素数个数
        int count = 0;

        //我们要计算一个数是否为,素数,那么就要判断除了1还有本身是否能被其他数整除
        //先通过for循环,把101-200的数都遍历出来;
        for (int i = n; i <= m; i++) {
            //使用一个标记,标记(假设)当前数为素数
            boolean flag = true;

            //循环遍历2到i-1的数,
            // 这里有一个注意点,减少我们的遍历量,就是遍历到当前数的一半,
            //若一个数不是素数,如:102 = 2*51,  111 = 2*55.5,一定有小于它一半的数可以除它
            for (int j = 2; j <= i / 2; j++) {

                if (i % j == 0) {
                    //说明有数可以整除它,那么之前的假设就不成立
                    flag = false;
                    //只要找到一个数可以整除它就说明它不是素数,就不需要再继续执行本循环体了,故用break
                    break;
                }//这里不可以用else,System.out.println();,因为这里只判断了2-i/2的一个数,不能说明它不是质素
                //比如:9,它不可以被2除,但是可以被3除,当 j= 2 时,不走if里面的,也不能说明9是素数

            }

            //这里不可以直接System.out.println(i是素数);因为,不管上面如何,这里遍历的每个i都会输出,不对
            //需要判断
            if (flag == true) {
                System.out.println(i);
                count++;
            }
        }
        return count;
    }
}

案例7:双色球

1.用户投注一组号码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYQZISq6-1668773841249)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116162532971.png)]

2.随机一组中奖号码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OEqWvIfn-1668773841250)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116173337268.png)]


3.判断中奖情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9P8alqvh-1668773841251)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221116173415706.png)]

package com.itheima.demo;

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

public class Demo08 {

    public static void main(String[] args) {
        int[] useSelectNumbers= useSelectNumbers();
//        printArray(useSelectNumbers);

        int[] creatLuckyNumbers = creatLuckyNumbers();
//        printArray(creatLuckyNumbers);

        judge(useSelectNumbers,creatLuckyNumbers);

    }
    //需求3:判断用户是否中奖
    public static void judge(int[] useSelectNumbers,int[] creatLuckyNumbers) {
        //1.定义两个变量进行红球,蓝球个数统计
        int red = 0;
        int blue = 0;

        //2.统计红球,遍历useSelectNumbers
        for (int i = 0; i < useSelectNumbers.length-1; i++) {
            //3.自己选的号码与中奖号码红色球一一对比,遍历creatLuckyNumbers
            for (int i1 = 0; i1 < creatLuckyNumbers.length; i1++) {
                if (useSelectNumbers[i] == useSelectNumbers[i1]) {
                    red++;
                    break;//因为红色球不允许重复,故只要匹配了,就跳出循环即可
                }
            }
        }
            blue = useSelectNumbers[6] == creatLuckyNumbers[6]  ?  ++blue : blue;//三元运算符  ++blue先加1,再运算

            System.out.println("中红球个数为:" + red);
            System.out.println("中红球个数为:" + blue);

            //4.判断是否中奖
            if (red == 1 && blue ==1){
                System.out.println("5元");
            }else if (red==3 && blue==1 || red==4){
                System.out.println("10元");
            }else if (red==4 && blue==1 || red==5) {
                System.out.println("200元");
            }else if (red==5 && blue==1 ){
                System.out.println("3000元");
            } else if (red==6 ) {
                System.out.println("500万元");
            }else if (red==6 && blue==1 ){
                System.out.println("1000万元");
            }else {
                System.out.println("没有中");
            }

        }


    //需求2:随机一组中奖号码出来
    public static int[] creatLuckyNumbers() {
        //1.动态初始化数组
        int[] numbers = new int[7];

        Random r = new Random();
        //2.遍历,获取随机数,红球
        for (int i = 0; i < numbers.length-1; i++) {
            while (true) {
                int red = r.nextInt(33)+1;
                //判断是否重复
                boolean exists = isExists(numbers, red);
                if (exists == false){
                    numbers[i] = red;
                    break;
                }else {

                }
            }
        }
        int blue = r.nextInt(16) + 1;
        numbers[6] = blue;
        return numbers;

    }

    //需求1:双色球用户投注一组号码
    //6个红球号码的范围是1-33之间,且不能重复;1个蓝球号码的范围在:1-16之间。
    public static int[] useSelectNumbers() {
        //1.动态初始化数组
        int[] numbers = new int[7];

        Scanner sc = new Scanner(System.in);
        //2.遍历数组,让用户选择6个红色球 ,因为红色与蓝色范围不一样
        for (int i = 0; i < numbers.length-1; i++) {



            while (true) {//选中在死循环内的代码,ctrl+alt+t
                // 3.接收用户输入的号码
                System.out.println("请输入第"+(i+1)+"个号码(1-33)");
                int red = sc.nextInt();
                //4.判断输入的号码是否在1-33这个范围
                if (red < 1 || red > 33) {
                    System.out.println("输入号码有误,请重新输入");//这里判断用户是否输入正确,不正确重新输入,可以使用死循环实现
                    continue;//如果输入有误,则结束本次循环,继续下一组循环
                }
                //不输出输入有误,说明输入正确
                //还需要判断重复,因为6个数不允许重复
                //这里调用方法去判断,需要有一个判断重复的方法
                boolean exists = isExists(numbers, red);
                if (exists == true) {
                    System.out.println("号码输入重复,请重新输入");
                }else {
                    numbers[i] = red;
                    break;
                }
            }
        }

        while (true) {
            System.out.println("请输入蓝球号码(1-16)");
            int blue = sc.nextInt();
            if ( blue<1 || blue>16){
                System.out.println("输入号码有误,请重新输入");
            }else {
                numbers[6] = blue;
                break;
            }
        }
        return numbers;
    }

    //判断元素是否重复的方法
    public static boolean isExists(int[] arr, int red) {
        for (int i = 0; i < arr.length; i++) {
            if (red == arr[i]) {
                return true;
            }
        }
        return false;
    }
    public static void printArray(int[] arr2) {
        System.out.print("[");
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(i == arr2.length - 1 ? arr2[i] : arr2[i] + ",");//因为最后一个就不用逗号了,所以这样写
        }
        System.out.println("]");
    }
}
blic static boolean isExists(int[] arr, int red) {
        for (int i = 0; i < arr.length; i++) {
            if (red == arr[i]) {
                return true;
            }
        }
        return false;
    }
    public static void printArray(int[] arr2) {
        System.out.print("[");
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(i == arr2.length - 1 ? arr2[i] : arr2[i] + ",");//因为最后一个就不用逗号了,所以这样写
        }
        System.out.println("]");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值