21day-6:基础实例训练

活动地址:CSDN21天学习挑战赛

目录

案例1:买飞机票

案例2:找素数

案例3:开发验证码

案例4:数组元素的复制

案例5:评委打分案例

案例6:数字加密

案例7:抢红包


案例1:买飞机票

需求:

⚫ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。

⚫ 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

分析:

⚫ 定义一个方法可以进行键盘录入机票原价、月份和机舱类型。

⚫ 使用if判断月份是是旺季还是淡季,使用switch分支判断是头等舱还是经济舱。

⚫ 选择对应的折扣进行计算并返回计算的结果。

代码

public static void main(String[] args) {
        buyair();
    }
​
    public static void buyair(){
     System.out.print("请输入飞机原票价:");
        double d = in.nextDouble();
        System.out.print("请输入月份:");
        int month = in.nextInt();
        while(month>12||month<0){
            System.out.print("输入错误重新输入:");
            month = in.nextInt();
        }
        System.out.print("请输入你的飞机舱:(1/头等舱 2/经济舱)");
        int num = in.nextInt();
        while(num!=1&&num!=2){
            System.out.print("输入错误重新输入:");
            num = in.nextInt();
        }
        if(month>=5&&month<=10){
            switch (num){
                case 1:
                    d*=0.9;
                    break;
                case 2:
                    d*=0.85;
                    break;
            }
        }else{
            switch (num){
                case 1:
                    d*=0.7;
                    break;
                case 2:
                    d*=0.65;
                    break;
            }
        }
        System.out.println("你需要支付的飞机票价是:"+d);
​
    }

运行结果:

请输入飞机原票价:1000 请输入月份:2 请输入你的飞机舱:1/头等舱 2/经济舱1 你需要支付的飞机票价是:700.0

请输入飞机原票价:1000 请输入月份:14 输入错误重新输入3 请输入你的飞机舱:1/头等舱 2/经济舱3 输入错误重新输入1 你需要支付的飞机票价是:700.0

案例2:找素数

说明

素数:如果除了1和它本身以外,不能被其他正整数整除,就叫素数。

分析

⚫ 101-200之间的数据可以采用循环依次拿到; 每拿到一个数,判断该数是否是素数。

⚫ 判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,

public static void findprime(){
    System.out.print("在101到200中素数有:");
    for (int i=101;i<200;i++){
        boolean flag = false;
        for(int j=2;j<i/2;j++){
            if(i%j==0){
                flag = true;
                break;
            }
        }
        if(flag == false){
            System.out.print(i+" ");
        }
    }
}

运行结果:

在101到200中素数有:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

案例3:开发验证码

需求:

⚫ 定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

分析:

① 定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。

② 在方法内部使用for循环生成指定位数的随机字符,并连接起来。

③ 把连接好的随机字符作为一组验证码进行返回

   
 public static String code(int a){
        String code = "";
        Random r = new Random();
//        String code1 = "";
//        String in = "0123456789";
//        String c = "abcdefghijklmnopqrstuvwsyz";
//        String C = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//        for(int i=1;i<=5;i++){
//            int dr=r.nextInt(3);
//            switch (dr){
//                case 0:
//                    int j = r.nextInt(in.length());
//                    code+=in.charAt(j);
//                    break;
//                case 1:
//                    j = r.nextInt(c.length());
//                    code+=c.charAt(j);
//                    break;
//                case 2:
//                    j = r.nextInt(C.length());
//                    code+=C.charAt(j);
//                    break;
//            }
//        }
        String randString = "0123456789abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        for(int i=1;i<=a;i++){
            code+=randString.charAt(r.nextInt(randString.length()));
        }
        return code;
    }

俩个方法,下面是注释部分的的压缩版

带入参数5

运行结果:3yz5G

案例4:数组元素的复制

需求:

⚫ 把一个数组中的元素复制到另一个新数组中去。

分析:

⚫ 需要动态初始化一个数组,长度与原数组一样。

⚫ 遍历原数组的每个元素,依次赋值给新数组。

⚫ 输出两个数组的内容。

public static void copy(){
   char[] a = {'a','b','c','d','e','f','g'};
   char[] c = new char[a.length];
   for(int i=0;i<a.length;i++){
       c[i]=a[i];
   }
    System.out.println(a);
    System.out.println(c);
}

运行结果:

abcdefg abcdefg

案例5:评委打分案例

需求 :

在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最

高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。

分析:

① 把6个评委的分数录入到程序中去 ----> 使用数组 int[] scores = new int[6]

② 遍历数组中每个数据,进行累加求和,并找出最高分、最低分。

③ 按照分数的计算规则算出平均分

public static void score(){
    int[] scores = new int[6];
    int max=0,min=0,avg=0;
    for (int i = 0; i < scores.length; i++) {
        System.out.print("(分数范围0--100)请输入第"+(i+1)+"位评委的评分:");
        scores[i]=in.nextInt();
        while (scores[i]>100||scores[i]<0){
            System.out.print("分数范围错误(分数范围0--100)请第"+(i+1)+"位评委重新输入评分:");
            scores[i]=in.nextInt();
        }
    }
    max=min=avg=scores[0];
    for (int i = 1; i < scores.length; i++) {
        avg+=scores[i];
        if(scores[i]>max){
            max=scores[i];
        }
        if(scores[i]<min){
            min = scores[i];
        }
    }
    avg=(avg-max-min)/4;
    System.out.println("最高分"+max+"最低分"+min+"平均分"+avg);
}

运行结果:

(分数范围0--100)请输入第1位评委的评分:101 分数范围错误(分数范围0--100)请第1位评委重新输入评分:1 (分数范围0--100)请输入第2位评委的评分:2 (分数范围0--100)请输入第3位评委的评分:-3 分数范围错误(分数范围0--100)请第3位评委重新输入评分:3 (分数范围0--100)请输入第4位评委的评分:4 (分数范围0--100)请输入第5位评委的评分:5 (分数范围0--100)请输入第6位评委的评分:6 最高分6最低分1平均分3

案例6:数字加密

需求:

⚫ 某系统的数字密码,比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上

5 , 再对10求余,最后将所有数字反转,得到一串新数。

 

分析

⚫ 把每个数据存放到字符串中,遍历字符串,将每一个字符按照加密原则加密,得到加密后的字符串。

⚫ 将加密后的字符串逆序遍历,然后取字符加到原来的,或者新创建的字符串里面,如果用原来的,取从中间断开后面一半的数据。

public static void encryption(int a){
   String str = "";
    for (int i=0;i<(a+"").length();i++){
        int b = (a+"").charAt(i)-43;
        str+=b%=10;
    }
    for (int i = str.length()-1; i >=0; i--) {
        str+=str.charAt(i);
    }
    str=str.substring(str.length()/2,str.length());
    System.out.println(str);
}

方法带入参数1983

运行结果:8346

案例7:抢红包

需求:

一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,

打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)

例如: 888元的奖金被抽出

588元的奖金被抽出

10000元的奖金被抽出

1000元的奖金被抽出

2元的奖金被抽出

分析

⚫ 定义一个数组用于存储这些奖金金额。

⚫ 定义一个字符串用于记录已经抽到的金额。

⚫ 每次抽奖都随机一个索引,取出索引在字符串中寻找。抽中过从新抽一次。

public static void grab(){
   int[] a = {2, 588 , 888, 1000, 10000};
   String str="";
   while(str.length()!=a.length){
        int j = r.nextInt(a.length);
        if (str.indexOf(j+"")==-1){
            str+=j;
            System.out.println(a[j]+"元的奖金被抽出");
        }
    }
}

运行结果;

1000元的奖金被抽出 2元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 888元的奖金被抽出

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值