JAVA基础 - 案例练习

一、前言

  前面学了点基础,可以通过一些小案例巩固下基础

二、实例

package com.hello.base;

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

public class CaseDemo {
    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 type = sc.next();

        double rs = calc(price,month,type);
        System.out.println("您当前购买机票的价格是:"+rs);

        //调用寻找素数
        su();
        System.out.print("\n");

        //调用生成验证码的方法
        String code = CreateCode(5);
        System.out.println("随机验证码:"+code);

        //调用元素复制方法
        int [] arrc1 = {11,22,44};
        int [] arrc2 = new int[arrc1.length];
        copy(arrc1,arrc2);//此时已完成数组复制,如果想打印出来具体的值,需要再写一个方法
        printArray(arrc1);
        printArray(arrc2);
        System.out.println("\n");

        //调用计算评委得分
        int [] arrs = new int[6];//定义一个动态初始化的数据,用于后期录入6个分数
        Scanner scs = new Scanner(System.in);
        for(int i=0;i<arrs.length;i++){
            System.out.println("请录入第"+(i+1)+"个分数");
            int scores = scs.nextInt();
            arrs[i] = scores;//把这个分数存入到数组对应的位置
        }
        calcscore(arrs);

    }
    //打印复制元素的值的方法
    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.print("]");
    }


    /*案例一:买机票
1、机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱
2、按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折
注:遇到判断值匹配的时候使用switch分支结构实现;遇到判断区间范围的时候选择if分支结构实现
 */
    public static double calc(double money,int month,String type) {
        //判断月份是淡季还是旺季
        if (month >= 5 && month <= 10) {
            //旺季
            switch (type) {
                case "经济舱":
                    money *= 0.85;
                    break;
                case "头等舱":
                    money *= 0.9;
                    break;
                default:
                    System.out.println("您输入的舱位不正确");
                    money = -1;//当前无法计算价格了
            }
        } else if (month == 11 || month == 12 || month >= 1 && month <= 4) {
            //淡季
            switch (type) {
                case "经济舱":
                    money *= 0.65;
                    break;
                case "头等舱":
                    money *= 0.7;
                    break;
                default:
                    System.out.println("您输入的舱位不正确");
                    money = -1;//当前无法计算价格了
            }
        } else {
            System.out.println("月份有问题");
            money = -1;
        }
        return money;
    }
    /*
    案例二:找素数(如果除了1和它本身以外,不能被其他正整数整除,就叫素数)
     */
    public static void su(){
        //定义一个循环,找到101-200之间的全部数据
        for(int i =101;i<=200;i++){
            //信号位:标记
            boolean flag = true;//一开始认为当前数据是素数
            //判断当前遍历的这个数是否是素数
            for(int j=2;j<i/2;j++){
                if(i%j==0){
                    flag=false;
                    break;
                }
            }
            //根据判断的结果选择是否输出这个数据,是素数则输出
            if(flag){
                System.out.print(i+"\t");
            }
        }
    }
    /*
    案例三:开发验证码:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母
    核心逻辑:
    1、定义一个string类型的变量存储验证码字符
    2、定义一个for循环,循环5次
    3、随机生成0|1|2的数据,依次代表当前位置要生成数字|大写字母|小写字母
    4、把0、1、2交给switch生成对应类型的随机字符,把字符交给string变量
    5、循环结束后,返回string类型的变量即是所求的验证码结果。
     */
    public static String CreateCode(int n){
        //定义一个字符串变量记录生成的随机字符
        String code="";
        Random r = new Random();
        //定义一个for循环,循环n次,依次生成随机字符
        for(int i=0;i<n;i++){
            //生成一个随机字符,英文大写 小写 数字(0 1 2)
            int type = r.nextInt(3);//0 1 2
            switch (type){
                case 0:
                    //大写字符(A 65 - Z 65+25) (0-25)+65
                    //注:A-Z对应的数字是65-90,生成随机数65-90的写法为nextInt(26)+65
                    //减加法 90-65=25,生成25个数即(0-26),括号里写26,外面+65,即随机数从65开始,至65+25=90结束
                    char ch = (char) (r.nextInt(26)+65);
                    code +=ch;
                    break;
                case 1:
                    //小写字符(a 97 - z 97+25) (0-25)+97
                    char ch1 = (char) (r.nextInt(26)+97);
                    code +=ch1;
                    break;
                case 2:
                    //数字字符
                    code += r.nextInt(10);//0-9
                    break;
            }
        }
        return code;
    }
    /*
    案例四:数组元素复制:把一个数组中的元素复制到另一个新数组去
    分析:1、需要动态初始化一个数组,长度与原数组一样;2、遍历原数组的每个元素,依次赋值给新数组;3、输出两个数组的内容
     */
    public static void copy(int arrc1[],int arrc2[]){
        //完成元素的复制
        for(int i=0;i<arrc1.length;i++){
            arrc2[i]=arrc1[i];
        }
    }
    /*
    案例五:评委打分:有6名评委给选手打分,分数范围是[0-100]之间的整数,选手的最后得分为去掉最高分、最低分后的4个评委的平均分,
    请完成上述过程并计算出选手的得分
    分析:1、把6个评委的分数录入到程序中去---->使用数组  int[] scores = new int[6];
    2、遍历数组中每个数据,进行累加求和,并找出最高分、最低分
    3、按照分数的计算规则算出平均分。
     */
    public static void calcscore(int[] arrs){
        //遍历数组中的每个数据,找出最高分、最低分、总分
        int max=arrs[0], min =arrs[0], sum=0;
        for (int i=0;i<arrs.length;i++){
            if(arrs[i]>max){
                max=arrs[i];//替换最大值变量存储的数据
            }
            if(arrs[i]<min){
                min=arrs[i];//替换最小值变量存储的数据
            }
        sum +=arrs[i];//  统计总分
        }
        System.out.println("最高分为:"+max);
        System.out.println("最低分为:"+min);
        double result = (sum-max-min)/(arrs.length-2);
        System.out.println("最终得分为:"+result);

    }

}

 

posted @ 2021-11-28 21:48  一加一  阅读(158)  评论(0编辑  收藏  举报