自学Java(day5),方法案例

本文是Java自学的第五天,涵盖了买飞机票的switch选择结构,找素数的逻辑实现,开发验证码的核心逻辑,数组元素复制的原理,评委打分的统计方法以及数字加密的数组反转技巧。通过实例详细讲解了各种编程应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自学Java(day5)

案例一:买飞机票

//    需求:
//    机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
//    机票最终优惠价格的计算方案如下:旺季(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 month = sc.nextInt();

    System.out.println("请输入仓位类型:");
    String type = sc.next();

    System.out.println(calc(money,month,type));
}
public static double calc(double money,int month,String type ){
    //判断用户输入数据的情况
    if(month >= 5 && month <= 10 ){
        //旺季
        switch (type){
            case "头等舱":
                money*=0.9;
                break;
            case "经济舱":
                money*=0.85;
                break;
            default:
                System.out.println("您输入的仓位有误!");
                money=-1;
                break;
        }
    }else if (month == 11 || month == 12 || month >=1 && month <=4){
        switch (type){
            case "头等舱":
                money*=0.7;
                break;
            case "经济舱":
                money*=0.65;
                break;
            default:
                System.out.println("您输入的仓位有误!");
                money=-1;
                break;
        }
    }else {
        System.out.println("您输入的月份有误!");
    }
    return money;
}
  1. 遇到判断值匹配的时选择什么结构实现?
    • 使用switch分支结构实现。
  2. 遇到判断区间范围的时候选择什么结构实现?
    • 使用if分支结构实现。

案例二:找素数

   //判断101-到200之间有多少素数,并输出
    //除了1和它本身以外,不能被其他正整数整除,就叫素数。
    //分析:
//    101-200之间的数据可以采用循环依次拿到; 每拿到一个数,判断该数是否是素数。
//    判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。
//    如果最终判定是素数,即可输出展示。
    public static void main(String[] args) {
        System.out.println("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");
            }
        }
    }

1.本次案例中是如何确定出该数是素数的,具体如何实现?

  • 定义了flag标记位

  • 遍历2到该数的一半的数据去判断是否有整除的数据,有则改变falg标记位的状态。

  • 最终通过flag的状态判断是否是素数。

案例三:开发验证码

//    需求:
//    定义方法实现随机产生一个指定位数的验证码,每位可能是数字、大写、小写字母
//    分析:
//    定义一个方法,生成验证码返回:返回值类型是String,需要形参接收位数。
//    在方法内部使用for循环依次生成每位随机字符,并连接起来。
//    把连接好的随机字符作为一组验证码返回。
public static void main(String[] args) {
    String code = createCode(5);
    System.out.println("请输入验证码:"+code);
}
//1.定义一个方法定义返回值类型,形参
    public static String createCode(int n){
        String code = "";
        Random r=new Random();
//2.定义一个for循环。循环n次,依次生成随机字符
        for (int i = 0; i < n; i++) {
//3.生成一个随机字符:英文大写,英文小写,数字——( 0,1,2)
           int type = r.nextInt(3);//0,1,2
            switch (type){
                case 0://大写字符(A65-Z(65+25)char ch = (char) r.nextInt(65,91);
                    code += ch;
                    break;
                case 1://小写字符(a97-z(97+25))
                    char ch1= (char) r.nextInt(97,122);
                    code += ch1;
                    break;
                case 2://数字
                    int ch2= r.nextInt(0,10);
                    code += ch2;
                    break;
            }
        }return code;
    }

1.随机验证码的核心实现逻辑是如何进行的?

​ ①定义一个String类型的变量存储验证码字符。

​ ②定义一个for循环,循环5次。

​ ③随机生成0,1,2的数据,依次代表当前位置要生成数字,大写字母,小写字母。

​ ④把0、1、2交给switch生成对应类型的随机字符,把字符交给String变量。

​ ⑤循环结束后,返回String类型的变量即是所求的验证码结果。

案例四:数组元素的复制

//    需求:
//    把一个数组中的元素复制到另一个新数组中去。
//    分析:
//    需要动态初始化一个数组,长度与原数组一样。
//    遍历原数组的每个元素,依次赋值给新数组。
//    输出两个数组的内容。
public static void main(String[] args) {
    int [] arr1 = {11,22,33,44,55};
    //int[] arr2=arr1;//这样只是把arr1的地址传给了arr2,并不是复制
    int [] arr2 =new int[arr1.length];
    copy(arr1,arr2);
    printArrary(arr1);
    printArrary(arr1);
}
public static void printArrary(int [] arr){
    System.out.print("[");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr.length - 1 == i ? 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];
    }
}

1.数组的拷贝是什么意思?

  • 需要创建新数组,把原来数组的元素赋值过来。

案例五:评委打分

//    需求 :
//    在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
//    分析:
//    把6个评委的分数录入到程序中去 ----> 使用数组
//    遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
//    按照分数的计算规则算出平均分。
public static void main(String[] args) {
    int [] scores = new int[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;

    for (int i = 0; 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 )/(scores.length-2);
    System.out.println("平均分是:"+result);
}

1.如何实现评委打分案例?

①定义一个动态初始化的数组用于存储分数数据。

②定义三个变量用于保存最大值、最小值和总和。

③遍历数组中的每个元素,依次进行统计。

④遍历结束后按照规则计算出结果即可。

案例六:数字加密

//    需求:
//    某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
//    分析
//    将每位数据存入到数组中去,遍历数组每位数据按照规则进行更改,把更改后的数据从新存入到数组中。
//    将数组的前后元素进行交换,数组中的最终元素就是加密后的结果。
public static void main(String[] args) {
    //1.定义一个数组,存储需要加密的数字
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入需要加密多少个数字:");
    int length =sc.nextInt();
    int [] arr=new int[length];
    //2.录入需要加密的数字
    for (int i = 0; i < arr.length; i++) {
        System.out.println("请输入第" + (i + 1) + "个需要加密的数字");
        int number = sc.nextInt();
        arr [i] = number;
    }
    //3.输出数组,查看一下
    printArray(arr);

    //4.对数组的数字进行加密
    for (int i = 0; i < arr.length; i++) {
        arr[i] = (arr[i]+5)%10;
    }

    //5.将数组的内容进行前后反转
    for (int i = 0,j = arr.length-1; i < j; i++,j--) {
        int temp = arr [i];
        arr [i]  = arr [j];
        arr [j]  = temp;
    }
    //输出数组查看
    printArray(arr);
}
public static void printArray(int [] arr){
    System.out.print("[");
    for (int i = 0; i < arr.length; i++) {
        System.out.print((arr.length - 1 == i ? arr[i] : arr[i] + ","));
    }
    System.out.println("]");
}

1.本次案例中是如何完成数组元素的反转的?

定义2个变量分别占数组的首尾位置。

一个变量往前走,一个变量往后走,同步交换双方位置处的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值