java编程训练

编程训练

​ 案例一:买飞机票

需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

分析:键盘录入机票的原价,仓位类型,月份信息,调用方法返回机票最终的优惠价格。方法内部应该先使用if分支判断月份是是旺季还是淡季,然后使用switch分支判断是头等舱还是经济舱。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入机票的原价:");
        double price = sc.nextDouble();

        System.out.println("请输入月份:");
        int month = sc.nextInt();

        System.out.println("请输入舱位:");
        String space = sc.next();

        System.out.println(calc(price, month, space));
    
    
    
    //方法
    public static double calc(Double money, int moon, String position) {
        if (moon >= 5 && moon <= 10) {
            //旺季
            switch (position) {
                case "头等舱":
                    money *= 0.9;
                    break;
                case "经济舱":
                    money *= 0.85;
                    break;
                default:
                    System.out.println("您输入的舱位有误;请重新输入~~");
                    return -1;

                     }
            }else if (moon == 11 || moon == 12 || moon >= 1 && moon <= 4) {
                //淡季
                switch (position) {
                    case "头等舱":
                        money *= 0.7;
                        break;
                    case "经济舱":
                        money *= 0.65;
                        break;
                    default:
                        System.out.println("您输入的舱位有误;请重新输入~~");
                        return -1;
                }

                }else{
                    System.out.println("您输入的月份有误;请重新输入~~");
                    return -1;
                }
                return money;  //最终价格

            }
    
    
    //总结:1、遇到判断值匹配的时候选择什么结构实现?
               - 使用switch分支结构实现
      //      2、遇到判断区间范围的时候选择什么结构实现?
               - 选择if结构实现
          
               

案例二:找素数

需求:判断101-200之间有多少个素数,并输出所有素数。
说明:素数的定义是:如果除了1和它本身以外,不能被其他正整数整除,就叫素数。

分析:101-200之间的数据可以采用循环拿到;每拿到一个数;判断该数是否是素数。

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

package com.itheima.demo;

public class Test4 {
    public static void main(String[] args) {
        //找素数
        //1.定义一个循环  找到101~200之间的全部数据
        //信号位:标记



        for (int i = 101; i <= 200; i++) {

            boolean flag = true;   //一开始认为数据是素数
            //i = 101,102,103...200
            //2、判断当前遍历的这个数据是否是素数
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }

            }

            //3、根据判定的结果选择是否输出这个数据   是素数则输出
            if (flag) {
                System.out.print(i + " \t");
            }

        }

    }

}

案例三:开发验证码、

需求:定义方法随机产生一个五位的验证码,每位可能是数字、大写字母、小写字母。

分析:第一:定义一个方法、生成验证码返回:方法参数是位数、方法的返回值是String。

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

package com.itheima.demo;

import java.util.Random;

public class Test5 {
    public static void main(String[] args) {

        //6、调用获取验证码的方法得到一个随机的验证码
        String code = createCode(5);
        System.out.println("随机验证码:"+code);

    }
    /*
    * 1、定义一个方法返回一个验证码,是否需要返回值类型申明?String  是否需要申明形参   int n
    *
    * */
    public static   String createCode(int n ){
          //2、定义一个for循环,循环n次,依次生成随机字符
        //5、定义一个字符串变量记录生成的随机字符
        String code = "";


        //3、随机函数
        Random r = new Random();
        for (int i = 0; i <n ; i++) {
            //3、生成一个随机字符: 随机字符可能是英文大写、小写 数字(0 1 2)
            int type = r.nextInt(3); // 0 1 2   这个type表示的是当前这个位置生成的随机字符的类型

            //4、接下来做分支判断、判断当前这个位置到底应该生成一个什么类型的字符
              switch(type){
                  case 0:
                      //大写字符(大写字符的范围:65代表大A   而Z的范围是65+25) 因为字母是26个  而A已经占了一个  (0- 25)+65
                      char ch = (char) (r.nextInt(26)+65);
                      code +=ch;  //code = code+ch;
                      break;
                  case 1:
                      //小写字符(小写字符的范围:97代表大A   而z的范围是97+25) 因为字母是26个  而A已经占了一个  (0- 25)+97
                      char ch1 = (char) (r.nextInt(26)+97);
                      code +=ch1;  //code = code+ch;
                      break;
                  case 2:
                      //数字字符
                      code+=r.nextInt(10);  //0~9
                      break;
              }
        }
        return code;
    }

}



//随机验证码的核心实现逻辑是如何进行的?
第一:定义一个String类型的变量来存储验证码字符
第二:定义一个for循环,循环5次。
第三:随机生成0|1|2的数据、依次代表当前位置要生成数字|大写字母|小写字母。
第四:把0,1,2交给switch生成对应类型的随机字符,把字符交给String变量。
第五:循环结束后,返回String类型的变量即是所求的验证码结果。

案例四:数组元素的复制

需求:把一个数组中的元素复制到另一个新数组中。

分析:需要动态初始化一个数组,长度与原数组一样。然后遍历原数组的每个元素,依次赋值给新数组。最后输出两个数组的内容。

package com.itheima.demo;

public class Test6 {
    public static void main(String[] args) {
        int[] arr1 = {11,21,31,41};
        // int[] arr2 = {11,21,31,41}; 没有完成数组的复制

        int[] arr2 = new int[arr1.length];
        copy(arr1,arr2);
        
        printArray(arr1);
        printArray(arr2);
        

    }
    public static void printArray(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length-1?arr[i]:arr[i]+", ");
        }
        System.out.println("]");
    }
    
    public static void copy(int[] arr1,int[] arr2){
                //正式完成元素的复制
        for (int i = 0; i < arr1.length; i++) {
            arr2[i]=arr1[i];
        }
    }

}

案例五:评委打分

需求::在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最
高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。

分析:①把6个评委的分数录入到程序中去—>使用数组,
int[] scores = new int[6];
②遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
③按照分数的计算规则算出平均分。

package com.itheima.demo;

import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {
        //1、定义一个动态初始化数组,用于后期录入6个评委的分数

        int[] scores = new int[6];
        //2、录入6个评委的分数
                Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请您输入第"+(i+1)+"个评委的打分:");
            int score = sc.nextInt();
            //把这个分数存入到数组的对应位置处
            scores[i] = score;

        }
        int max = scores[0];
        int min = scores[0];
        int sum = 0;

        //3、遍历数组中的每个数据,找出最大值  最小值 总分
        for (int i = 1; i < scores.length; i++) {
            if (scores[i] > max){
                //替换最大值变量存储数据
                max = scores[i];
            }
            if (scores[i]<min){
                min=scores[i];
            }
            //统计总分
            sum+=scores[i];
            
        }
        System.out.println("最高分是:"+max);
        System.out.println("最低分是:"+min);
        //统计平均分
        double result = (sum - max - min)*1.0/(scores.length - 2);
        System.out.println("选手最终得分:"+result);

    }
}
//如何实现评委打分案例的?
1、定义一个动态初始化数组用于存储分数数据
    2、定义三个变量用于保存最大值、最小值和总和。
    3、遍历数组中的每个元素、依次进行统计
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值