java方法案例

java方法案例

学点编程,培养编程思维,利用编程解决问题。
学习来源:黑马程序员java零基础
案例进行训练的目的:
在这里插入图片描述
在这里插入图片描述

案例1:评委打分

在这里插入图片描述

package com.itheima.Case;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        //评委打分机制,写一个计算评委打分的方法,需要求得计算总分,以及去掉最大和最小值的平均值
        System.out.println("当前选手的得分是:"+getAverageScore(6));
    }
    //需要用输入,多少位评委,以及各自的打分情况
    public static double getAverageScore(int number) {
        //1.定义一个动态初始化数组,负责后期录入评委的打分
        int[] scores = new int[number];//以6位评委为例
        //scores = [0,0,0,0,0,0]
        //遍历数组的每个位置,依次录入评委的打分(需要借助扫描器,放在循环外)
        Scanner sc = new Scanner(System.in);
        //下面一行的代码可以用快捷键进行生成:scores.fori
        for (int i = 0; i < scores.length; i++) {
            //i=0,1,2,3,4,5,第一个评委是第0+1
            System.out.println("请您录入第" + (i + 1) + "个评委的分数: ");
            int score = sc.nextInt();   //用scanner进行录入评委的分数
            scores[i] = score;   //将获取到的分数,存到动态数组中
        }


        //3.从数组中计算出总分,找出最高分,最低分
        int sum = 0;  //求总分用的变量
        int max = scores[0];
        int min = scores[0];  //都用数组的第一位作为最大值和最小值的初始值进行判断,更新

        //遍历数组,求解总数和最大值和最小值
        for (int i = 0; i < scores.length; i++) {
            int score = scores[i];
            //求和
            sum += score;
            //求最大值和最小值,利用每个元素和最大值和最小值进行比较。满足大于最大值,就交换
            //求最小值
            if (score < min) {
                min = score;
            }
            //求最大值
            if (score > max) {
                max = score;
            }
        }
        //4.计算平均值并进行输出,不用去加除了最大值和最小值以外的数值,直接用sum-max-min即可,巧劲
        return 1.0 * (sum - min - max) / (number - 2);//利用1.0的原因,目的在于平均值有可能是小数
    }
    }

运行的结果:
在这里插入图片描述

涉及的知识点:

利用循环遍历进行求和
利用当前位置的分数和max,min比较,进行交换
取巧:求平均分利用sum-min-max得到剩下的总分
number-2表示剩下的评委人数
1.0*结果,表示最终的结果是保留小数的
scanner录入当前评委的评分(),Scanner sc放在循环外面

在这里插入图片描述

案例2:购买飞机票打折

在这里插入图片描述

public class Test1 {
    public static void main(String[] args) {
      //目标:完成买飞机票的示例
      double price = calculate(1000,12,"头等舱");
        System.out.println("优惠价是: "+price);
    }
    //注意点1:方法里面不能套方法。2.String是大写的,括号是英文的
    public static double calculate(double price,int month,String type){
        //判断当前的月份是淡季还是旺季
        if(month>=5 && month <=10){
            //旺季
            //2.判断仓位的类型
            switch (type) {
                case "头等舱":
                    price *= 0.9;//等价于price=price*0.9
                    break;
                case "经济舱":
                    price *= 0.85;
                    break;
            }
            }
            else{
                //淡季
            switch (type) {
                case "头等舱":
                    price *= 0.7;//等价于price=price*0.7
                    break;
                case "经济舱":
                    price *= 0.65;
                    break;
            }
            }
            return price;

    }
}

注意if和switch的适用环境:
在这里插入图片描述

案例3:开发验证码

在这里插入图片描述

package com.itheima.Case;

import java.util.Random;

public class Test2 {
    public static void main(String[] args) {
        //需求:生成一个指定位数的验证码,每位可以是字母,和大小写字母

        System.out.println(creatCode(6));

    }
    public static String creatCode(int n){
        //1.定义用一个for循环来控制产生多少位的随机字符
        Random r = new Random();//生成随机数,一来使用switch分支来做判断,二来生成随机数
        //3.定义一个String类型的变量用于记住产生的每位随机字符
        String code = "";//字符串类型
        for (int i = 1; i <=n; i++) {
            //i = 1,2,3,. .. n
            //2.为每个位置生成一个随机字符,可能是数字和大小写字母
            //具体来怎么做呢:思想,随机生成一个0,1,2的随机数,用0表示输入的是数字,1表示的是随机大写字母,2表示的是小写字母
            int type = r.nextInt(3);//表示的就是生成0,1,2的随机数
            switch (type){
                case 0:
                    //表示生成了一个随机数字
                    code += r.nextInt(10);//生成0到9的随机数
                    break;
                case 1:
                    //表示生成的是一个随机大写字母,需要注意的是随机数只能产生数字,而不能生成字符,但是根据ASCII码,英文字符在计算机内部还是二进制进行存储的
                    //随机一个大写英文字符,A 65 Z 65+25,利用减加法,化为标准的65->0,即化为(0->25)+65
                    //需要利用char进行强制类型转换
                    char ch1 = (char)(r.nextInt(26)+65);
                    code += ch1;
                    break;
                case 2:
                    //表示生成的是一个随机的小写英文字符,范围在97->97+25,利用处理大写字母同样的方法进行处理
                    char ch2 = (char)(r.nextInt(26)+97);
                    code += ch2;
                    break;
            }

        }
        return code;
    }

}

生成结果图:
在这里插入图片描述

涉及的相关知识点:
1.利用加法(连接符)连接起来
2.Random是一个随机数(但大写字母,其实在底层就是对应的数字)
3.加减法,产生65-90之间的随机数(nextInt()
4.利用类型转换(char(数字)转化为字符
5.每循环(循环次数取决于验证码代码输入的个数)一次,根据生成的0->2,switch分支,并且用012来表示是数字,还是大小写字母
6.利用String code来存储验证码信息

在这里插入图片描述

案例:数字加密

在这里插入图片描述

返回类型string是可以有数字的,并且最终的数字需要进行拼接起来,因此返回值用string类型
关于拆分密码,有两种方法:一种是直接进行拆分,另一种是使用方法进行拆分(建议使用第二种,利于开发,也就是方法调用方法)
拆分之后的数据放在一个整型数组中
实现反转有两种方式:
一种:从后往前进行遍历,然后进行拼接起来
第二种:先进行反转数组,然后进行遍历,拼接起来(相当于双指针,用i指向数组的第一位的下标,j指向数组的最后一位的下标,值得注意的是数组下标是从0开始的,因此最后一个元素的下标其实是数组长度减1.
6 4 3 8
反转成8 3 4 6
推荐使用第二种方法的目的:回顾数组的相关重点算法,反转数组,如何交换对应的数组元素。
反转数组也作为一个方法,写好之后进行调用
package com.itheima.Case;
public class Test45 {
    public static void main(String[] args) {
        //需求:数字加密,和解密其实是同样的一个流程,其实调制和解调制都是同样的操作
        //对于数字每一个进行操作,涉及到对数字的拆分,关于数字的拆分,有两种方法,一种是直接拆,另一种是调用方法进行拆分
        //在实际的开发中,在一个方法中实现一种需求的难度大多是成指数式增长的,因此要学会用多个方法进行调用解决
        //假设某系统的数字密码是一个四位数,比如是1983,加密规则:对密码中的每位数都+5,再对10进行取余,然后进行反转,需要做的第一件事就是对数字进行拆分
        //技巧:快捷键,按住split点alt+回车进行创建新方法
        System.out.println("加密后的结果是" + encrypt(8346));
    }
    public static String encrypt(int number){
        //number = 1983;
        //1.将这个密码进行拆分成一个一个的数字,对每个数字进行加密
        int[] numbers = split(number);
        // numbers = [1,9,8,3];

        //2.遍历这个数组的每个数字,按个进行加密处理
        for (int i = 0; i < numbers.length; i++) {
            // i= 0,1,2,3
            //对每个元素进行加5,对10取余
//            numbers[i]+=5;
//            numbers[i]%=10;
            //合并写
            numbers[i]=(numbers[i]+5)%10;
        }
        //此时的numbers = [6,4,3,8];
        // 3.对元素进行反转,将反转这个功能作为一个独立的方法,
           revers(numbers);
        //4.将这些加密之后的数字拼接起来作为加密后的结果输出即可
        //先定义一个字符类型的变量,为存储后续的元素
        String data = "";
        //进行遍历将加密之后的每个数加在data中
        for (int i = 0; i < numbers.length; i++) {
            data += numbers[i];
        }
        return data;

        }
//对数组的每个元素进行提取
    public static int[] split(int number) {
        //以1983为例,如何获取到从前往后获得到各位呢,其实相当于怎么得到千,百,十,个位的数
        int[] numbers = new int[4];
        numbers[0] = number/1000;   //对1000进行除法,得到千位上的数
        numbers[1] = (number/100)%10;     //对100除法,得到19,需要对10取余就是9
        numbers[2] = (number/10)%10;
        numbers[3] = number%10;
        return numbers;


    }
    //进行对元素反转操作
    public static void revers(int[] numbers) {
        //反转数组,利用两个类似指针,i,j分别对应数组的第一个和最后一个元素,使用第一个元素和最后一个元素进行交换,后i++,j--然后呢接着进行交换
        //numbers = [6,4,3,8];--->8,3,4,6

        for(int i=0,j=numbers.length-1;i<j;i++,j--){
            //交换i和j位置处的值,此时需要借用到中间变量,具体怎么做呢
            //需要注意的是数组下标是从0开始,因此最后一个位置的下标为数组长度-1,循环终止条件就是i一旦出现在j的右边
            //1.把后一个位置的值交给一个临时变量先存起来
            int temp = numbers[j];
            numbers[j] = numbers[i];
            numbers[i] = temp;
        }
    }
}

实战跟着写代码,再次说明了亲自动手敲代码的重要性,在跟着笔记写代码的时候,遇到一个这样的事情,不是很理解,先放个眼,后续再更。
在使用快捷键alt+回车创建新方法时,没有create的选择,
在这里插入图片描述
在上面的main方法中创建,是没有的,但在其他方法里面这样做是可以的
在这里插入图片描述
但在main方法可以创建无输入的方法
就像这样的:
在这里插入图片描述
因此,个人理解是在新建方法的话,是新建一种没有输入的方法,其他快捷键创建新方法还是放在别的方法中进行使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值