Java基础编程案例(专题一)

文章展示了五个用Java实现的功能案例,包括买飞机票的优惠计算、随机验证码生成、评委打分平均值计算、数字加密和数组拷贝。每个案例都包含问题分析、方法设计和代码实现。
摘要由CSDN通过智能技术生成

目录

将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们采用方法来编写所有案例。

案例一:买飞机票

案例二: 开发验证码

 案例三:评委打分

案例四: 数字加密

 案例五:数组拷贝


将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们采用方法来编写所有案例。

案例一:买飞机票

 分析:

1.阅读需求我们会发现,不同月份、不同原价、不同舱位类型优惠方案都不一样;所以,可以将原价、月份、舱位类型写成参数

2.最终结果是求当前用户的优惠票价,所以可以将优惠票价作为方法的返回值。

3.先使用if判断月份是旺季还是淡季,然后使用if分支判断是头等舱还是经济舱,计算票价。

代码:

package cn.itcast.practices;
/*
    需求:
        用户购买机票时,机票原价会按照淡季、旺季,
将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们也采用方法来编写。
 */
public class Test1 {
    public static void main(String[] args) {
        // 目标:完成买飞机票的案例。
        double result = calculate(1000,8,"经济舱");
        System.out.println("优惠价是:"+result);
    }

    public static double calculate(int price, int month, String type){
        //1.判断当前月份是淡季还是旺季
        //旺季
        if (month >= 5 && month <= 11) {
            //判断舱位类型
            if (type == "经济舱") {
                return price * 0.85;
            } else {
                return price * 0.9;
            }
            //淡季
        } else {
            if (type == "经济舱") {
                return price * 0.65;
            } else {
                return price * 0.7;
            }
        }
    }
}

运行:

案例二: 开发验证码

 分析:

1.要求生成指定位数的验证码,让调用者传递即可, 所以需要一个参数,用来表示验证码的位数。

2.考虑方法是否需要有返回值?该方法的结果,就是为了得到验证码,所以,返回值就是验证码;

3.定义一个空字符串用来接收随机出来的字符,使用字符'z'-'0'随机区间,进行条件分析

代码:

package cn.itcast.practices;

import java.util.Random;
 目标:完成生成随机验证码。
public class Test3 {
    public static void main(String[] args) {
        //调用方法
        String  result = createCode(5);
        System.out.println(result);
    }

    public static String createCode(int n) {
        //1.定义一个String类型的变量用于记住产生的每位随机字符
        String s = "";
        Random random = new Random();
        //2.按照方法接收的验证码位数n,循环n次
        for (int i = 0; i < n; i++) {
            //每次循环,产生一个字符,可以是数字字符、或者大小写字母字符,
            //使用字符在底层是ASCII码进行计算,最后强转为char类型
            char c = (char) (random.nextInt('z' - '0' + 1) + '0');
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
                s += c;             //中间还有用不到的字符需要排除
            }else {
                //如果随机到其中几个不在范围的字符,就重新随机直到符合
                i--;
            }
        }
        return s;
    }
}

运行:

 案例三:评委打分

分析:

1.到底多少个评委呢? 可以由调用者传递,所以,我们可以把评委的个数写成参数。

2.需求中,想要的最终结果是平均分,所以,返回值就是平均分;

3.(1)假设评委的个位为n个,那么就需要n个评委的分数,首先可以新建一个长度为n的数组,        用来存储每一个评委的分数
    (2)循环n次,使用Scanner键盘录入n个1~100范围内的整数,并把整数存储到数组中
    (3)求数组中元素的总和、最大值、最小值
    (4)最后再计算平均值; 平均值 = (和-最大值-最小值)/(数组.length-2);

代码:

package cn.itcast.practices;

import java.util.Scanner;

public class Test10 {
    public static void main(String[] args) {
        // 目标:完成评委打分案例。
        System.out.println("当前选手得分是:" + getAverageScore(6));
    }

    public static double getAverageScore(int n) {
        // 1、定义一个动态初始化的数组,负责后期存入评委的打分
        int[] scores = new int[n];
        //2、遍历数组的每个位置,依次录入评委的分数
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位评委打分");
            int number = scanner.nextInt();
            scores[i] = number;
        }
        // 3、从数组中计算出总分,找出最高分,最低分。
        int sum = 0; // 求总分用的变量
        int max = scores[0]; // 求最大值的
        int min = scores[0]; // 求最小值的。

        // 遍历数组找出这些数据的。
        for (int i = 0; i < scores.length; i++) {
            //求最大值
            if (max < scores[i]) {
                max = scores[i];
            }
            //求最小值
            if (min > scores[i]) {
                min = scores[i];
            }
            //求和
            sum += scores[i];
        }
        // 4、计算出平均分并返回
        return 1.0 * (sum - min - max) / (scores.length - 2);
    }

}

运行:

案例四: 数字加密

 分析:

1.首先,考虑方法是否需要接收数据处理?
            需要一个4位数,至于是哪一个数,让方法的调用者传递。
            所以,方法的参数,就是这个需要加密的四位数

2.接着,考虑方法是否需要有返回值?
            方法最终的结果是一个加密后的数据
            所以,返回值就表示为加密后的数据。

3.最后,再考虑方法内部的业务逻辑,这里的业务逻辑就是那一系列的加密运算
    1)先要把4位数整数拆分为,4个数字,用一个数组保存起来
    2)再将数组中的每一个元素加5,再对10取余
    3)最后将数组中的元素反转,

代码:

package cn.itcast.practices;

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        //创建随机数对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个四位数密码");
        int number = scanner.nextInt();
        //调用方法
        String result = jiaMI(number);
        System.out.println(result);

    }

    public static String jiaMI(int number) {
        //1.数字拆分放入数组
        int[] arr = {
                number / 1000 % 10,
                number / 100 % 10,
                number / 10 % 10,
                number % 10
        };
        //2.对每一位进行+5
        for (int i = 0; i < arr.length; i++) {
            arr[i] += 5;
            arr[i] %= 10;
        }

        //3.将数组反转
        int left = 0;
        int right = arr.length - 1;
        while (left < right) {
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
        //4.循环字符串相加
        String s = "";
        for (int i = 0; i < arr.length; i++) {
            s += arr[i];
        }

        return s;
    }
}
运行:

 案例五:数组拷贝

分析:

1.首先,考虑方法是否需要接收数据处理?
    该方法的目的是拷贝数组,拷贝哪一个数组呢? 需要调用者传递
    所以,参数应该是一个数组

2.接着,考虑方法是否需要有返回值?
    该方法最终想要得到一个新数组
    所以,返回值是拷贝得到的新数组

3.最后,考虑方法内部的业务逻辑?
    1)创建一个新的数组,新数组的长度和元素数组一样
    2)遍历原数组,将原数组中的元素赋值给新数组
    3)最终将新数组返回

代码:

package cn.itcast.practices;

public class Test11 {
    public static void main(String[] args) {
        // 目标:掌握数组拷贝。
        int[] arr = {11, 22, 33};
        int[] arr2 = copy(arr);
        printArray(arr2);

        // 注意:这个不是拷贝数组,叫把数组变量赋值给另一个数组变量。
        //        int[] arr3 = arr;
        //        arr3[1] = 666;
        //        System.out.println(arr[1]);

    }

    public static int[] copy(int[] arr) {
        // arr = [11, 22, 33]
        //        0    1   2

        // 1、创建一个长度一样的整型数组出来。
        int[] arr2 = new int[arr.length];
        // arr2 = [0, 0, 0]
        //         0  1  2

        // 2、把原数组的元素值对应位置赋值给新数组。
        for (int i = 0; i < arr.length; i++) {
            // i = 0 1 2
            arr2[i] = arr[i];
        }

        return 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("]");
    }
}

 运行:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一边上班一边学习666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值