java基础的6个实训

java基础的6个实训

不死神兔

需求:

  • 有一对兔子,
  • 从出生后第3个月起每个月都生一对兔子,
  • 小兔子长到第三个月后每个月又生一对兔子,
  • 假如兔子都不死,问第二十个月的兔子对数为多少?

思路:

  1. 定义一个数组存储兔子对数
  2. 第一月、第二月都是已知,都是1,
  3. 找到规律用循环实现计算

代码:

public class Demo1 {
    public static void main(String[] args) {
        // 定义一个数组存储兔子对数
        int[] rabbitNum = new int[20];
        // 第一月、第二月都是已知,都是1
        rabbitNum[0] = 1;
        rabbitNum[1] = 1;

        /*
         * 思路:
         * rabbitNum[2] = rabbitNum[0]+rabbitNum[1];
         * rabbitNum[3] = rabbitNum[1]+rabbitNum[2];
         * rabbitNum[4] = rabbitNum[2]+rabbitNum[3];
         * ……
         * 第20月
         * rabbitNum[19] = rabbitNum[17]+rabbitNum[18];
         * */

        // 找到规律用循环实现计算
        for (int i = 2; i < rabbitNum.length; i++) {
            rabbitNum[i] = rabbitNum[i - 2] + rabbitNum[i - 1];
            // 检验
            System.out.println("第"+ (i + 1) +"月,兔子有"+ rabbitNum[i] +"只");
        }

    }
}

百钱百鸡

需求:

  • 我国古代数学家张丘建在《算经》一书中提出的数学问题:
  • 鸡翁一值钱五,
  • 鸡母一值钱三,
  • 鸡雏三值钱一。
  • 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

问题:

  • 公鸡一只5元,母鸡一只3元,雏鸡3只1元,
  • 一共花了100元买了100只,
  • 买了各几只

思路:

  • 假设公鸡x只,母鸡y只,雏鸡z只,
  • 一共100只
  • 满足x+y+z = 100;
  • 一共100元
  • 5x + 3y + z/3 = 100;

代码:

public class Demo2 {
    public static void main(String[] args) {
        /*
         * 由100元和100只得出:
         * 0 <= x <= 20
         * 0 <= y <= 33
         * 0 <= z <= 100
         * */

        for (int x = 0; x <= 20; x++) {
            for (int y = 0; y <= 33; y++) {
                int z = 100 - (x + y);
                // 判断小鸡数量为3的倍数并且钱数相加为100的情况
                if (z % 3 == 0 && 5 * x + 3 * y + z / 3 == 100) {
                    System.out.println("成立的只数:x:" + x + ",y:" + y + ",z:" + z);
                    System.out.println("-------------------------------------");
                }
            }
        }
    }
}

判断两个数组内容是否相同

代码:

public class Demo3 {
    public static void main(String[] args) {
        // 定义两个数组
        int[] nums1 = {1, 2, 3};
        int[] nums2 = {1, 2, 3};

        // 利用匿名实例化对象并调用方法的返回值进行判断
        if (new Demo3().compare(nums1, nums2)) {
            System.out.println("两个数组相同");
        } else {
            System.out.println("两个数组不相同");
        }
    }

    // 判断方法
    // 返回为boolean值,参数为需要比较的数组
    public boolean compare(int[] nums1, int[] nums2) {
        // 养成好习惯,返回布尔值时定义一个布尔值,初始化为true,用于返回
        boolean flag = true;
        // 判断两个数组的长度是否相同
        if (nums1.length == nums2.length) {
            // 判断数组内元素是否相等
            for (int i = 0; i < nums1.length; i++) {
                // 如果相同时返回true
                if (nums1[i] != nums2[i]){
                    flag = false;
                }
            }
        } else {
            flag = false;
        }

        return flag;
    }
}

查找

需求:

  • 已知一个数组arr = {19,28,37,46,50};
  • 键盘录入一个数据,
  • 查找该数据在数组中的索引,
  • 并在控制台输出找到的索引值。

代码:

import java.util.Scanner;

public class Demo4 {
    public static void main(String[] args) {
        // 打印匿名实例化对象并调用find()的返回值
        System.out.println(new Demo4().findIndex());
    }

    public int findIndex() {
        // 定义一个数组
        int[] arr = {19, 28, 37, 46, 50};
        // 定义一个索引值,默认为-1,用于返回
        int index = -1;

        System.out.println("请输入一个数:");
        // 实例化一个扫描器
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == input) {
                index = i;
            }
        }
		// 关闭资源
        scanner.close();
        return index;
    }
}

反转数组

代码:

import java.util.Arrays;

public class Demo5 {
    public static void main(String[] args) {
        // 定义一个需要反转的数组
        int[] arr = {19, 28, 37, 46, 50};

        // 打印匿名实例化对象并调用reverse()的返回值
        System.out.println(Arrays.toString(new Demo5().reverse(arr)));
    }

    public int[] reverse(int[] arr) {
        // 定义一个反转后的数组,长度为反转前的数组
        int[] newArray = new int[arr.length];

        for (int i = 0; i < arr.length; i++) {
            // 将旧数组从后向前赋给新数组
            newArray [i] = arr[arr.length - 1 - i];
        }

        // 返回新数组
        return newArray;
    }
}

评委打分

需求:

  • 在编程竞赛中,有6个评委为参赛的选手打分,
  • 分数为0-100的整数分。
  • 选手的最后得分为:
  • 去掉一个最高分和一个最低分后的4个评委平均值(不考虑小数部分)。

代码:

import java.util.Scanner;

public class Demo6 {
    public static void main(String[] args) {
        // 定义一个长度为6的数组
        int[] arr = new int[6];
        // 调用getArray()进行获取数值
        arr = new Demo6().getArray(arr);

        // 调用getScore()并打印返回值
        System.out.println(new Demo6().getScore(arr));

    }

    // 键盘录入方法
    public int[] getArray(int[] arr) {
        System.out.println("请输入6位评委的分数");
        // 实例化扫描器扫描输入
        Scanner scanner = new Scanner(System.in);
        // 用循环接收数据并赋值给数组
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        // 关闭资源
        scanner.close();
        return arr;
    }

    // 算分方法
    public int getScore(int[] arr) {
        // 在数组中找出最大值和最小值
        // 定义一个最大值
        int max = arr[0];
        // 定义一个最小值
        int min = arr[0];
        // 定义一个求和
        int sum = arr[0];

        // 遍历判断
        for (int i = 1; i < arr.length; i++) {
            // 使用Math类中的max()和min()
            max = Math.max(max, arr[i]);
            min = Math.min(min, arr[i]);
            sum += arr[i];
        }
        // 去掉最大值和最小值
        sum -= (max + min);
        // 返回和的平均值
        return sum / (arr.length - 2);
    }
}
posted @ 2022-02-04 17:30  CoderCatIce  阅读(95)  评论(0编辑  收藏  举报