加载中...

第六节 方法

知识点

方法

题目1

定义一个方法,该方法能够找出两个小数中的较小值并返回。在主方法中调用方法进行测试。

训练提示

  1. 根据方法的功能描述,方法的参数应该是两个小数。
  2. 要返回两个小数的较小值,所以返回值类型也是小数类型。

解题方案

操作步骤

  1. 定义方法getMin(),方法的参数是double a ,double b。
  2. 在方法中对两个数字进行判断,返回较小值。
  3. 在主方法中调用getMin()方法并接受返回值。
  4. 在主方法中打印结果。

参考代码

public class Test1 {
    public static void main(String[] args) {
        System.out.println(getMin(2.1,3.7));
    }

    public static double getMin(double a, double b) {
        double min = a < b ? a : b;
        return min;
    }
}

题目2

定义一个方法,该方法能够找出三个整数中的最大值并返回。在主方法中调用方法测试执行。

训练提示

  1. 根据题意,方法中需要使用三个整数,所以方法参数应该是三个整数类型。
  2. 方法需要有返回值,返回值的类型也是整数类型。

解题方案

操作步骤

  1. 定义方法getMax(),方法的参数是三个int类型变量a,b,c,方法的返回值是int类型。
  2. 在方法中使用多分支if...else...或者三元运算符判断出最大值并返回。
  3. 在主方法中调用getMax()方法并接受返回值。
  4. 在主方法中打印结果。

参考代码

public class Test1 {
    public static void main(String[] args) {
        System.out.println(getMax(3,17,10));
    }

    public static int getMax(int a, int b, int c) {
       int temp = a > b ? a : b;
       int max = temp > c ? temp : c ;
       return max;
    }
}



public class Test2 {
    public static void main(String[] args) {
        System.out.println(getMax(3, 17, 10));
    }

    public static int getMax(int a, int b, int c) {
        if (a > b) {
            //a 大
            //拿着大的跟第三个数再比较
            if(a > c){
                return a;
            }else{
                return c;
            }
        }else{
            //b 大
            if(b > c){
                return b;
            }else{
                return c;
            }
        }

    }
}

题目3

在主方法中通过键盘录入三个整数。定义一个方法,方法接收三个整数变量,在方法中从大到小依次打印三个变量。执行效果如下:

请输入第一个整数:10
请输入第二个整数:30
请输入第三个整数:20
从大到小的顺序是: 30 20 10 

训练提示

  1. 方法需要接受三个整数,那么方法的形式参数如何定义?
  2. 方法没有返回值的需求,返回值类型是什么?

解题方案

操作步骤

  1. 使用键盘录入分别录入三个整数。

  2. 定义method方法,方法的参数是三个int类型,方法的返回值类型是void。

    2.1. 定义整数变量max用于存储最大值,定义min变量用于存储最小值。

    2.2. 使用if..else..多分支判断语句或者三元运算符计算三个整数中的最大值并赋值给max。

    2.3. 使用if..else..多分支判断语句或者三元运算符计算三个整数中的最小值并赋值给min。

    2.4. 定义变量mid代表中间数,三个整数的和减去max,再减去min,就是中间数的值。

    2.5. 依次打印最大值,中间值和最小值。

  3. 在主方法中调用method方法,传入参数。

参考答案

public class Test5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数");
        int num1 = sc.nextInt();
        System.out.println("请输入第二个数");
        int num2 = sc.nextInt();
        System.out.println("请输入第三个数");
        int num3 = sc.nextInt();
		
        //获取最大值
        int max = getMax(num1, num2, num3);
        //获取最小值
        int min = getMin(num1, num2, num3);
        //获取中间值
        int mid = (num1 + num2 + num3) - max - min;

        System.out.println(max + " " + mid + " " + min);
    }

    public static int getMax(int a, int b, int c) {
        int temp = a > b ? a : b;
        int max = temp > c ? temp : c;
        return max;
    }

    public static int getMin(int a, int b, int c) {
        int temp = a < b ? a : b;
        int min = temp < c ? temp : c;
        return min;
    }
}

题目4

数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试。

训练提示

  1. 方法的功能是得到一个小数的绝对值,参数应该是一个小数类型。
  2. 绝对值需要被返回,返回值类型应该也是小数类型。

解题方案

操作步骤

  1. 定义一个小数变量num。

  2. 定义获取绝对值的方法,方法的参数是一个double类型,返回值类型是double。

  3. 在方法内部使用if..else..判断。

    3.1. 如果是负数则对负数取反并返回。

    3.2. 如果不是负数则直接返回数字本身。

  4. 在主方法中调用绝对值方法,传入参数num,并接受返回值。

  5. 打印返回的结果。

参考答案

package test;

public class test6 {
    public static void main(String[] args) {
        // 定义一个小数变量num
        double num = -1.2;
        System.out.println(abs(num));

    }

    public static double abs(double num) {
        if (num < 0) {
            return -num;
        } else {
            return num;
        }
    }
}


题目5

键盘录入一个正整数

定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回

在main方法中打印该数字是几位数

演示格式如下:
(1)演示一:
请输入一个整数:1234
控制台输出:1234是4位数字
(2)演示二:
请输入一个整数:34567
控制台输出:34567是5位数字

训练提示

  1. 方法的功能是求有多少位,所以参数是一个,就是要计算的数据。
  2. 题目说要返回,所以方法必须有返回值。

解题方案

操作步骤

  1. 键盘录入一个正整数

  2. 定义获取位数的方法,方法的参数是一个int类型,返回值类型是int。

  3. 在方法内部使用循环获取有多少位

    可以不断的除以10,当结果为0时,循环结束。
    除以10的次数,就是数字的位数。

    举例:

    ​ 123 除以第一次10之后为:12

    ​ 除以第二次10之后为:1

    ​ 除以第三次10之后为:0

    ​ 表示123是三位数

  4. 在主方法中调用方法,传入参数,并接受返回值。

  5. 打印返回的结果。

参考答案

package test;

import java.util.Scanner;

public class test7 {
    public static void main(String[] args) {
        System.out.println("请输入一个整数:");
        // 键盘录入一个正整数
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int count = count(num);
        System.out.println(num + "是" + count + "位数字");

    }

    public static int count(int num) {
        int count = 0;
        while (num != 0) {
            count++;
            num /= 10;
        }
        return count;
    }
}


题目6

需求:

​ 定义一个方法equals(int[] arr1,int[] arr2).

功能:

​ 比较两个数组是否相等(长度和内容均相等则认为两个数组是相同的)

参考答案

package test;

public class test8 {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4};
        int[] arr2 = {1, 2, 3, 4};
        boolean flag = equals(arr1, arr2);
        System.out.println(flag);

    }

    public static boolean equals(int[] arr1,int[] arr2) {
        int len1 = arr1.length;
        int len2 = arr2.length;
        if (len1 == len2) {
            for (int i = 0; i < len1; i++)
                if (arr1[i] != arr2[i]) {
                    return false;
                }
        } else {
            return false;
        }
        return true;
    }
}


题目7:

需求:

​ 定义一个方法fill(int[] arr,int value)

功能:

​ 将数组arr中的所有元素的值改为value

参考答案

package test;

public class test9 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        int value = 3;
        int[] arr1 = fill(arr, value);
        System.out.print("{");
        int i = 0;
        for (; i < arr1.length - 1; i++) {
            System.out.print(arr1[i] + ", ");
        }
        System.out.print(arr1[i]);
        System.out.println("}");
    }

    public static int[] fill(int[] arr, int value) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = value;
        }
        return arr;
    }
}


题目8:(较难)

需求:

​ 定义一个方法fill(int[] arr,int fromIndex,int toIndex,int value)

功能:

​ 将数组arr中的元素从索引fromIndex开始到toIndex(不包含toIndex)对应的值改为value

参考答案

package test;

public class test10 {
    public static void main(String[] args) {
        // 1.定义原始数组
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        // 2.调用方法拷贝数据
        int[] copyArr = fill(arr, 3, 7, 5);
        // 遍历copyArr
        for (int i = 0; i < copyArr.length; i++){
            System.out.print(copyArr[i] + " ");
        }

    }
    
    public static int[] fill(int[] arr,int fromIndex,int toIndex,int value) {// 3~7(3 4 5 6)
        for (int i = fromIndex; i < toIndex; i++) {
            arr[i] = value;
        }
        return arr;
    }
}


题目9:(较难)

需求:

​ 定义一个方法copyOf(int[] arr, int newLength)

功能:

​ 将数组arr中的newLength个元素拷贝到新数组中,并将新数组返回,从索引为0开始

参考答案

package test;

public class test11 {
    public static void main(String[] args) {
        // 1.定义原始数组
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        // 2.调用方法拷贝数据
        int[] copyArr = copyOf(arr, 3);
        // 遍历copyArr
        for (int i = 0; i < copyArr.length; i++){
            System.out.print(copyArr[i] + " ");
        }
    }

    public static int[] copyOf(int[] arr, int newLength) {
        int[] newArr = new int[newLength];
        for (int i = 0; i < newLength; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }
}


题目10:(较难)

需求:

​ 定义一个方法copyOfRange(int[] arr,int from, int to)

功能:

​ 将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新数组中,

​ 并将新数组返回。

参考答案

public class test5 {
    public static void main(String[] args) {
        // 1.定义原始数组
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};

        // 2.调用方法拷贝数据
        int[] copyArr = copyOfRange(arr, 3, 7);

        // 遍历copyArr
        for (int i = 0; i < copyArr.length; i++){
            System.out.print(copyArr[i] + " ");
        }

    }

    // 将数组arr中从索引from(包含from)开始。
    // 到索引to结束(不包含to)的元素复制到新数组中。
    public static int[] copyOfRange(int[] arr, int from, int to) {// 3~7(3 4 5 6)
        // 1.定义数组
        int[] newArr = new int[to - from];

        // 2.把原始数组arr中的from到to上对应的元素,直接拷贝到newArr中

        // 伪造所引思想
        int index = 0;
        for(int i = from; i < to; i++) {
            // 格式:数组名[索引] = 数据值;
            newArr[index] = arr[i];
            index++;
        }

        // 3.把新数组返回
        return newArr;
    }
}

题目11(很难)

一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)

888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出

训练提示

  1. 奖项要随机出现,但奖金不是连续的数字,不能被随机产生。能随机产生的只有数组的索引了,可以使用随机索引来代表随机元素。因为索引和元素是一一对应的,
  2. 哪些奖被抽过了,哪些奖没有被抽过,要定义一个数组来存放已经被抽过的奖项。
  3. 每个奖项只能被抽出一次,要写一个方法来控制奖项不重复。

解题方案

​ 使用数组存放多个奖金,再使用另一个数组存放已经被抽过的奖金,使用方法来判断某个奖金是否已经被抽取过。

操作步骤

  1. 定义奖金的数组arr。
  2. 定义数组brr准备存放已经被抽过的奖金,两个数组长度相同。
  3. 定义一个变量index,用户代表数组brr的索引。
  4. 定义方法,判断数组中是否存在某数字,存在返回true,不存在返回false。
  5. 写一个while循环,如果index<arr.length则说明奖项没有被抽完继续抽取。
  6. 在循环中使用随机数产生一个随机索引i。
  7. 使用步骤4的方法判断brr数组中是否包含arr[i]奖金。
  8. 如果不包含,则打印arr[i]奖金,并且把它放入brr数组中代表已经被抽取过,同时index加一。

参考答案

解法一:

package com.itheima.test;

import java.util.Random;

public class Test9 {
    public static void main(String[] args) {
        /* 需求:
        一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
        请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
        打印效果如下:(随机顺序,不一定是下面的顺序)
            888元的奖金被抽出
            588元的奖金被抽出
            10000元的奖金被抽出
            1000元的奖金被抽出
            2元的奖金被抽出
        */


        //分析:
        //1.定义数组表示奖池
        int[] arr = {2, 588, 888, 1000, 10000};
        //2.定义新数组用于存储抽奖的结果
        int[] newArr = new int[arr.length];
        //3.抽奖
        Random r = new Random();
        //因为有5个奖项,所以这里要循环5次
        for (int i = 0; i < 5; ) {
            //获取随机索引
            int randomIndex = r.nextInt(arr.length);
            //获取奖项
            int prize = arr[randomIndex];
            //判断当前的奖项是否存在,如果存在则重新抽取,如果不存在,就表示是有效奖项
            boolean flag = contains(newArr, prize);
            if(!flag){
                //把当前抽取到的奖项添加到newArr当中
                newArr[i] = prize;
                //添加完毕之后,移动索引
                i++;
            }
        }
        //4.遍历newArr
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }


    }

    //判断prize在数组当中是否存在
    //存在:true
    //不存在:false
    public static boolean contains(int[] arr,int prize){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == prize){
                return true;
            }
        }
        return false;
    }


}

解法二:

package com.itheima.test;

import java.util.Random;

public class Test10 {
    public static void main(String[] args) {
       /* 需求:
        一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
        请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
        打印效果如下:(随机顺序,不一定是下面的顺序)
            888元的奖金被抽出
            588元的奖金被抽出
            10000元的奖金被抽出
            1000元的奖金被抽出
            2元的奖金被抽出
        */

        //1.把奖池里面的所有奖项打乱顺序
        int[] arr = {2, 588, 888, 1000, 10000};
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            //获取随机索引
            int randomIndex = r.nextInt(arr.length);
            //拿着i跟随机索引randomIndex上的值进行交换
            int temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;
        }
        //2.遍历奖池,从0索引开始获取每一个奖项
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }


    }
}
posted @ 2023-07-16 10:02  zhajiangmian  阅读(131)  评论(0编辑  收藏  举报