Java复习笔记入门阶段06:方法

目录

1.方法概述

2.方法定义格式

2.1 方法常见问题

2.2 求和

2.3 判断奇数偶数

2.4 求最值

3.方法的内存原理

3.1 方法的调用流程,内存图解

4.方法的参数传递机制

4.1基本类型传递机制

4.2 引用类型传递

4.3 打印整形数组内容

4.4 数组中查询指定元素的索引

4.5 比较任意两个数组是否一样

5.方法重载

6.单独使用return关键字

7、案例演示

1.买飞机票

2.找素数

3.生成验证码

4.数组复制

5.评委打分

6.数字加密

7.模拟中奖系统


1.方法概述

  • 方法:

    • 一种语法结构,把一段代码封装成一个功能,方便重复使用;

  • 好处:

    • 提高代码复用性;

    • 让程序逻辑更清晰;

2.方法定义格式

完整格式:

修饰符 返回值类型 方法名(形参列表){
​
•   方法体代码(需要执行的功能代码)
​
•   return 返回值;
​
}

2.1 方法常见问题

  • 编写顺序无所谓;

  • 方法间是平级,不能嵌套定义;

  • void,无需return;其他设置类型需return相应类型;

  • 方法不调用,不执行,严格匹配参数情况;

  • 有返回值的方法,调用可以选择定义变量接收结果;

2.2 求和

/**
     * 计算1-n的和
     * @param n
     * @return
     */
    public static int sum(int n){
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum+=i;
        }
        return sum;
    }

2.3 判断奇数偶数

/**
     * 判断是奇数还是偶数
     * @param n
     * @return
     */
    public static int X(int n){
        int x;
        if (n%2==0){
            x=2;
            System.out.println(n+"是偶数");
        }else {
            x=1;
            System.out.println(n+"是偶数");
        }
        return x;
    }

2.4 求最值

/**
     * 求数组最大值
     * @param array
     * @return
     */
    public static int MaxArray(int[] array){
        int max = array[0];
        for (int i = 1; i <array.length ; i++) {
            if (max<array[i]){
                max = array[i];
            }
        }
        return max;
    }

3.方法的内存原理

3.1 方法的调用流程,内存图解

  • 方法,没有被调用的时候,在方法区的字节码文件中存放;

  • 方法,被调用时候,需要进入到栈内存中运行;

  1. 方法不调用时,存放在方法区;

  2. 方法main运行时,在栈内存开辟空间;

  3. 再调用add方法,再开辟空间,将传入值存在开辟的空间;

  4. 方法使用结束,从栈内存退栈;

4.方法的参数传递机制

4.1基本类型传递机制

  • Java参数传递机制:值传递(不同方法内,只是数值相同);

  • 注意:

    • 实参:方法内部定义变量

    • 形参:定义方法时,()中所声明的参数

 /**
     *    基本类型,值传递
     */
    public static void main(String[] args) {
        int a=10;
        chang(a);
        System.out.println(a);//10
    }
    public static int chang(int a){
        System.out.println(a);//10
        a=50;
        System.out.println(a);//50
        return a;
    }

4.2 引用类型传递

引用类型:传递地址,修改地址空间内的数据;

 /**
     *    引用类型,地址传递
     */
    public static void main(String[] args) {
        int[] a={10,2,6};
        chang(a);
        System.out.println(a[0]);//50
    }
    public static void chang(int[] a){
        System.out.println(a[0]);//10
        a[0]=50;
        System.out.println(a[0]);//50
    }

4.3 打印整形数组内容

/**
     *    引用类型,地址传递
     */
    public static void main(String[] args) {
        int[] a={10,2,6};
        print(a);
    }
    public static void print(int[] a){
        if (a!=null && a.length>0){
            System.out.println("该数组内容为:"+ Arrays.toString(a));
        }
    }

4.4 数组中查询指定元素的索引

/**
     *    数组中查询指定元素的索引
     */
    public static void main(String[] args) {
        int[] a={10,2,6};
        int b = 10;
        System.out.println(select(a, b));
    }
    public static int select(int[] a,int b){
        if (a!=null && a.length>0){
            for (int i = 0; i < a.length; i++) {
                if (a[i] == b){
                    return i;
                }
            }
        }
        return -1;
    }

4.5 比较任意两个数组是否一样

/**
     * 比较任意两个数组是否一样
     */
    public static void main(String[] args) {
        int[] a={10,2,6};
        int[] b={10,2,6};
        if (compare(a,b)){
            System.out.println("两个数组相等");
        }else {
            System.out.println("两个数组不等");
        }
    }
    public static boolean compare(int[] a,int[] b){
        if (a.length != b.length){
            return false;
        }
​
        for (int i = 0; i < a.length; i++) {
            if (a[i] != b[i]){
                return false;
                }
            }
        return true;
    }

5.方法重载

  • 方法重载:

    • 同一个类中,多个名称相同,但形参列表不同,形参类型不同,这些方法就是方法重载;

  • 重载识别技巧:

    • 同一个类,方法名称相同,形参列表不同,就是重载(无关修饰符,返回值类型)

    • 形参列表不同:形参个数,类型、顺序不同,不关心形参名称

 /**
     * 方法重载
     * @param args
     */
    public static void main(String[] args) {
        fire();
        fire("老A");
        fire("老A",666);
        Integer a = 666;
        System.out.println("嗨嗨"+fire("老A",a));
    }
    public static void fire(){
        fire("老E");
    }

    public static void fire(String location){
        fire(location,1);
    }

    public static void fire(String location,int number){
        System.out.println("给"+location+"的老铁送"+number+"个大火箭!");
    }

    //无法以返回值类型区分,可以以形参类型区分
    public static int fire(String location,Integer number){
        System.out.println("给"+location+"的老铁送"+number+"个大火箭!");
        return 666;
    }

6.单独使用return关键字

  • return:可以立即跳出并结束当前方法的执行

  • break:跳出并结束当前所在的循环

  • continue:跳过当次循环,进入下一次;

7、案例演示

1.买飞机票

/**
 * 计算飞机票价格
 */
public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入机票价格:");
        double price = scanner.nextDouble();
        System.out.println("请输入仓位类型(头等舱、经济舱):");
        String type =scanner.next();
//         scanner.nextLine();
        System.out.println("请输入乘机月份(数字):");
        int month = scanner.nextInt();

        sum(price,type,month);
    }

    //判断月份
    public static void sum(double price,String type,int month){
        if (4<month && month<11){
            type(price,type,0.9,0.85);
        }else if (month==11 || month==12 || (1<=month && month<=4)){
            type(price,type,0.7,0.65);
        }else {
            System.out.println("月份输入错误!无法计算票价");
        }
    }

    //舱类
    public static void type(double price,String type,double a,double b){
        switch (type){
            case "头等舱":
                price *= a;
                break;
            case "经济舱":
                price *= b;
                break;
            default:
                System.out.println("舱输入错误!无法计算票价");
                break;
        }
        System.out.println("机票的价格是:"+price);
    }
    
}

2.找素数

/**
 * 找素数:
 *      101-200间有多少素数,并输出所有素数;
 *      素数:除了1和他本身为,不能被其他整数整除
 */
public class Test2 {
    public static void main(String[] args) {
        int[] arr = new int[50];
        boolean flag = false;
        int n=0;
        
        for (int i = 101; i <201 ; i++) {
            //是否是素数
            flag=sushu(i);
            if (flag){
                //素数,加入数组
                arr[n]=i;
                n++;
            }
        }
        System.out.println("101-200有素数:"+n+"个"+arr.length);
        System.out.println(Arrays.toString(arr));
    }
    
    //判断素数素数
    public static boolean sushu(int i){
        for (int j = 2; j <i ; j++) {
            if (i%j == 0){
                //能整除,非素数
                return false;
            }
        }
        return true;
    }
}

3.生成验证码

/**
 * 5位验证码:
 *      可能是数字、大小写字母
 */
public class Test3 {
    public static void main(String[] args) {
        String code = createCode(5);
        System.out.println(code);
    }
    
    //生成n位验证码
    public static String createCode(int n){
        String code = "";
        Random random = new Random();
        for (int i = 0; i < n; i++) {
            int type = random.nextInt(3);//0-2
            //选验证码类型
            switch (type){
                case 0:
                    //大写字符 A65 Z65+26
                    char c = (char) (random.nextInt(26)+65);
                    code += c;
                    break;
                case 1:
                    //小写字符 a97  z 97+26
                    char cc = (char) (random.nextInt(26)+97);
                    code += cc;
                    break;
                case 2:
                    code += random.nextInt(10);
                    break;
            }
        }
        return code;
    }
}

4.数组复制

/**
 * 复制数组:
 *  数组元素赋值给新数组
 */
public class Test4 {
    public static void main(String[] args) {
        int[] arrOne = {10,20,30,40,50,66};
        int[] arrTwo = new int[arrOne.length];
        for (int i = 0; i < arrOne.length; i++) {
            arrTwo[i] = arrOne[i];
        }
        System.out.println(Arrays.toString(arrTwo));
    }
}

5.评委打分

/**
 * 评委打分:
 *      六位评分,去掉最高和最低,取平均
 */
public class Test5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入几位评委打分:");
        int num = scanner.nextInt();
        int[] users = new  int[num];
        for (int i = 0; i < num; i++) {
            System.out.println("请输入第"+(i+1)+"位评委的评分(1-10分)");
            users[i] = scanner.nextInt();
        }
        //评分从小到大
        order(users,num);

        //最终得分
        avg(users,num);
    }

    //冒泡排序,评分从小到大整理
    public static void order(int[] users,int num){
        for (int i = 0; i < num-1; i++) {
            for (int j = 0; j < num-i-1; j++) {
                if (users[j]>users[j+1]){
                    int temp = users[j+1];
                    users[j+1] = users[j];
                    users[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(users));
    }

    //取平均值
    public static void avg(int[] users,int num){
        double score = 0;
        for (int i = 1; i < num-1 ; i++) {
            score += users[i];
        }
        double avgScore = score/(num-2);
        System.out.println("选手最终得分:"+avgScore);
    }
    
}

6.数字加密

/**
 * 数字加密规则:
 *     得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)
 */
public class Test6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一串正整数字:");
        String num = scanner.next();
        int length = num.length();
        //快速获取int位数
        //int length1 = String.valueOf(number).length();
        int[] passOne = new  int[length];
        for (int i = 0; i < length; i++) {
            //取字符num每位char字符,转为String,再转int
            passOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
        }
        System.out.println(Arrays.toString(passOne));
        //+5%10
        for (int i = 0; i < length; i++) {
            passOne[i] = (passOne[i]+5)%10;
        }
        System.out.println(Arrays.toString(passOne));
        //取反
        for (int i = 0,j=length-1; i < j; i++,j--) {
             int temp = passOne[i];
             passOne[i] = passOne[j];
             passOne[j] = temp;
        }
        System.out.println(Arrays.toString(passOne));
    }

}

6.1数字解密


/**
 * 数字解密规则:
 *     得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)
 		原0-4 加密后是5-9
 		原5-9 加密后是0-4
 */
public class Test7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一串正整数字:");
        String num = scanner.next();
        int length = num.length();
        int[] passOne = new  int[length];

        for (int i = 0; i < length; i++) {
            //取字符num每位char字符,转为String,再转int
            passOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
        }
        System.out.println(Arrays.toString(passOne));

        //取反
        for (int i = 0,j=length-1; i < j; i++,j--) {
            int temp = passOne[i];
            passOne[i] = passOne[j];
            passOne[j] = temp;
        }
        System.out.println(Arrays.toString(passOne));

        //解密:分析变化规则
        for (int i = 0; i < length; i++) {
            if (0<=passOne[i] && passOne[i]<5){
                passOne[i] = passOne[i]+5;
            }else {
                passOne[i] = passOne[i]-5;
            }
        }
        System.out.println(Arrays.toString(passOne));

    }

}

7.模拟中奖系统

/**
 * 双色球系统:
 *     投注号码由6个红球号码和1个篮球号码组成
 *     红球号从1-33中选(不可重复);篮球号码从1-16中选
 */
public class Test8 {
    public static void main(String[] args) {
        int[] luckNumbers = createLuckNumbers();
        int[] userNumbers = userInputNumbers();
        judge(luckNumbers,userNumbers);
    }

    //生成中奖号码
    public static int[] createLuckNumbers(){
        Random random = new Random();
        int[] luckNumbers = new int[7];

        for (int i = 0; i < luckNumbers.length-1; i++) {
            while (true){
                int date = random.nextInt(33)+1;
                boolean flag = true;

                for (int j = 0; j <i ; j++) {
                    //出现重复值
                    if (luckNumbers[j] == date){
                        flag = false;
                        break;
                    }
                }
                //不重复的值加入
                if (flag){
                    luckNumbers[i] = date;
                    break;//结束while
                }
            }
        }
        luckNumbers[luckNumbers.length-1] = random.nextInt(16)+1;
//        System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));
        return luckNumbers;
    }

    //用户输入号码
    public static int[] userInputNumbers(){
        Random random = new Random();
        int[] userNumbers = new int[7];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入双色球号码前六位(1-33),最后一位(1-16):");

        while (true){
            System.out.println("请输入第1位号码:");
            int date = scanner.nextInt();
            if (0<date && date<34){
                userNumbers[0] = date;
                break;
            }else {
                System.out.println("有误:请输入(1-33)的数字:");
            }
        }

        for (int i = 1; i < userNumbers.length-1; i++) {
            while(true){
                System.out.println("请输入第"+(i+1)+"位号码:");
                int date = scanner.nextInt();
                if (0<date && date<34){
                    boolean flag = false;
                    for (int j = 0; j <i ; j++) {
                        //出现重复值
                        if (userNumbers[j] == date){
                            System.out.println("请不要输入重复数字:");
                            flag=true;
                            break;
                        }
                    }
                    if (flag){
                        continue;
                    }
                }else {
                    System.out.println("请输入(1-33)的数字:");
                    continue;
                }
                //不重复的值加入
                userNumbers[i] = date;
                break;
            }
        }

        while (true){
            System.out.println("请输入第7位号码:");
            int date = scanner.nextInt();
            if (0<date && date<17){
                userNumbers[userNumbers.length-1] = date;
                break;
            }else {
                System.out.println("请输入(1-16)的数字:");
            }
        }

//        System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));
        return userNumbers;
    }

    //判断中奖情况
    public static void judge(int[] luckNumbers,int[] userNumbers){
        System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));
        System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));

        boolean blue = false;
        if (luckNumbers[luckNumbers.length-1] == userNumbers[userNumbers.length-1]){
            blue = true;
            System.out.println("恭喜您命中了篮球");
        }else {
            System.out.println("很遗憾,您没有命中篮球");
        }

        int count = 0;
        for (int i = 0; i < luckNumbers.length-1; i++) {
            if (luckNumbers[i] == userNumbers[i]){
                count++;
            }
        }
        if (count>0){
            System.out.println("恭喜您命中了"+count+"个红球");
        }else {
            System.out.println("很遗憾,您没有命中红球");
        }
        if (blue){
            switch (count){
                case 6:
                    System.out.println("恭喜中了1000万元");
                    break;
                case 5:
                    System.out.println("恭喜中了3000元");
                    break;
                case 4:
                    System.out.println("恭喜中了200元");
                    break;
                case 3:
                case 2:
                    System.out.println("恭喜中了10元");
                    break;
                case 1:
                    System.out.println("恭喜中了5元");
                    break;
                default:
                    System.out.println("很遗憾,没中奖");
                    break;
            }
        }else {
            switch (count){
                case 6:
                    System.out.println("恭喜中了500万元");
                    break;
                case 5:
                    System.out.println("恭喜中了200元");
                    break;
                case 4:
                    System.out.println("恭喜中了10元");
                    break;
                default:
                    System.out.println("很遗憾,没中奖");
                    break;
            }
        }

    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值