【自学笔记】01Java基础-06编程思维训练

发布时间:2024年01月04日

记录学习Java基础中利用案例来训练编程思维,涉及知识点:变量、数组、运算符、程序流程控制、跳转关键字、方法声明与定义、参数值传递。


案例1 买飞机票

?需求:
??机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
??机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
?分析:
??1.键盘录入机票的原价,仓位类型,月份信息,调用方法返回机票最终的优惠价格。
??2.方法内部应该先使用if分支判断月份是是旺季还是淡季,然后使用switch分支判断是头等舱还是经济舱。
??3.选择对应的折扣进行计算并返回计算的结果,如果信息录入有误返回价位为-1元代表即可。
在这里插入图片描述


案例2 找素数(质数)

?需求:
??除了1和它本身以外,不能被其他正整数整除,就叫素数。
??判断100-200之间有多少个素数,并输出所有素数。
?分析:
??1.101-200之间的数据可以采用循环依次拿到; 每拿到一个数,判断该数是否是素数。
??2.判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。
??3.如果最终判定是素数,即可输出展示。

    public static void main(String[] args) {
        int count = 0;
        for (int i = 101; i <= 200; i++) { // 遍历101-200所有数
            if (isPrime(i)) { //如果true则输出该素数
                System.out.println(i); 
                count++;//累计个数+1
            }
        }
        System.out.println("100-200之间有 " + count + " 个素数。");
    }

    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        for (int i = 2; i <= num / 2; i++) { //从2开始除一直到该数的一半为止
            if (num % i == 0) {
                return false;//如果这个数能被某数整除(余数为0,则不是素数
            }
        }
        return true;
    }

案例3 生成随机验证码

?需求:
??定义方法实现随机产生一个指定位数的验证码,每位可能是数字、大写、小写字母。
?分析:
??1.定义一个方法,生成验证码返回:返回值类型是String,需要形参接收位数。
??2.在方法内部使用for循环依次生成每位随机字符,并连接起来。
??3.把连接好的随机字符作为一组验证码返回。
如果你没有学过StringBuilder,你可以直接使用字符串连接的方式生成验证码。但请注意,频繁地使用字符串连接操作在Java中会创建新的字符串对象,效率较低。尽管如此,以下是一个不使用StringBuilder的实现:

import java.util.Random;

public class Test {
    public static void main(String[] args) {
        String captcha = generateCaptcha(6);
        System.out.println("生成的验证码是: " + captcha);
    }

    public static String generateCaptcha(int length) {
        Random random = new Random();//声明一个随机数对象random
        String captcha = "";//声明String对象captcha(验证码)

        for (int i = 1; i <= length; i++) {
            int type = random.nextInt(3); //循环6次随机生成0、1、2来决定该位置验证码为数字/大写/小写字母

            switch (type) {
                case 0:
                    captcha += (char) (random.nextInt(10) + '0'); // 使用"(char)"强制转换为char类型格式数据,拼接数字
                    break;
                case 1:
                    captcha += (char) (random.nextInt(26) + 'A'); // 大写字母
                    break;
                case 2:
                    captcha += (char) (random.nextInt(26) + 'a'); // 小写字母
                    break;
            }
        }

        return captcha;
    }
}

案例4 复制数组元素

?需求:
??把一个数组中的元素复制到另一个新数组中去。
?分析:
??1.需要动态初始化一个数组,长度与原数组一样。
??2.遍历原数组的每个元素,依次赋值给新数组。
??3.输出两个数组的内容。

    public static void main(String[] args) {
        // 旧数组arrs1[]
        int[] arrs1 = {10, 20, 30, 40, 50};

        // 新建一个与旧数组长度相同的数组arrs2[]
        int[] arrs2 = new int[arrs1.length];

        // 遍历旧数组,将元素复制到新数组
        for (int i = 0; i < arrs1.length; i++) {
            arrs2[i] = arrs1[i];
        }

        // 输出旧数组和新数组的内容
        System.out.println("旧数组: " + Arrays.toString(arrs1));
        System.out.println("新数组: " + Arrays.toString(arrs2));
    }

案例5 评委打分

?需求:
??在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
?分析:
??1.把6个评委的分数录入到程序中去 ----> 使用数组
??2.遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
??3.按照分数的计算规则算出平均分。
以下是一个在Java中实现该需求的示例:

public class Test {
    public static void main(String[] args) {
        // 评委打分数组
        int[] scores = {85, 90, 78, 92, 88, 100};

        // 初始化最高分、最低分和总分数为数组的第一个元素
        int highestScore = scores[0];
        int lowestScore = scores[0];
        int totalScore = scores[0];

        for (int i = 1; i < scores.length; i++) {
            // 遍历全数组进行求和,顺便找出最高分和最低分
            if (scores[i] > highestScore) {
                highestScore = scores[i];
            }
            if (scores[i] < lowestScore) {
                lowestScore = scores[i];
            }
            totalScore += scores[i];
        }

        // 去掉最高分和最低分后计算平均分
        int Sum = totalScore - highestScore - lowestScore;
        int Count = scores.length-2;
        double averageScore = (double)Sum/Count;//int型整数做除法计算记得转换类型

        System.out.println("选手最后得分: " + averageScore);
    }
}

案例6 加密数字|数组顺序倒换(难度较高

?需求:
??某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数8346。
?分析:
??1.将每位数据存入到数组中去,遍历数组每位数据按照规则进行更改,把更改后的数据从新存入到数组中。
??2.将数组的前后元素进行交换,数组中的最终元素就是加密后的结果

文章来源:https://blog.csdn.net/weixin_55751186/article/details/135306030
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。