Java案例:评委打分、数字加密、数据拷贝


案例1:评委打分

需求:在唱歌比赛中,可能有多名评委要给选手打分,分数是【0-100】之间的整数,选手最后得分为:去掉最高分、最低分后剩余分数平均分,请编写程序能够录入多名评委的分数,并计算出选手的最终得分

代码


import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        System.out.println("评委人数:");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println("平均数:" + getAverageScore(n));
    }

    public static double getAverageScore(int number){
        int [] scores = new int[number];

        Scanner sc = new Scanner(System.in);
        //记录评委分数
        for(int i = 0 ; i < scores.length ; i++){
            System.out.println("第" + ( i + 1 ) + "个评委打分");
            scores[i] = sc.nextInt();
        }

        //计算总和,找出最大值和最小值
        double sum = 0.0;
        int max = scores[0]; //求最大值
        int min = scores[0]; //求最小值
        for(int i = 0 ; i < scores.length ; i++){
            sum += scores[i];
            if(scores[i] >= max){
                max = scores[i];
            }
            if(scores[i] <= min){
                min = scores[i];
            }
        }

        return (sum-max-min) / (number - 2);
    }
}

运行结果

评委人数:
61个评委打分
1002个评委打分
903个评委打分
1004个评委打分
605个评委打分
806个评委打分
100
平均数:92.5

总结

1、定义一个动态初始化的数组,用于录入评委打分
2、提前定义三个变量用来记住数组中的最大值、最小值和总和
3、遍历数组中的每个数据,依次找出最大值、最小值和总和
4、遍历结束后,按照计算规则算出选手的最终得分

案例2:数字加密

需求:某系统的数字密码是一个四位数,如1234,为了安全,需要加密后在传输,加密规则是:对密码中的每位数都加5.再对10求余,最后将所有数字顺序反转,得到一串加密后的新数,请设计出满足本需求的加密程序

代码

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        System.out.println("输入一个四位数进行加密");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();

        System.out.println("加密后的结果是:" + encrypt(num));
    }

    public static String encrypt(int number){
        //数据拆分
        int[] numbers = split(number);

        //处理数据
        for(int i = 0 ; i < numbers.length ; i++){
            numbers[i] = (numbers[i] + 5) % 10;
        }

        //数据反转
        reverse(numbers);

        //加密数字拼接
        String data = "";
        for(int i = 0 ; i < numbers.length ; i++){
            data += numbers[i];
        }

        return data;

    }

    public static int[] split(int number){
        int[] numbers = new int [4];
        numbers[0] = number / 1000;
        numbers[1] = (number / 100) % 10;
        numbers[2] = (number / 10) % 10;
        numbers[3] = number % 10;
        return numbers;
    }

    public static int[] reverse(int[] numbers){
        for(int i = 0 , j = numbers.length - 1 ; i < j ; i++ , j--){
            int temp = numbers[j];
            numbers[j] = numbers[i];
            numbers[i] = temp;
        }
        return numbers;
    }


}

运行结果

输入一个四位数进行加密
1983
加密后的结果是:8346

总结

1、反转数组,就是对数组中的元素,按照前后位置,依次交换数据
2、一般会把多个事拆分成多个方法去完成,也就是独立功能能独立成一个方法

案例3:数据拷贝

需求:把一个整型数组,例如存了数据11,22,33,拷贝成一个一摸一样的新数组出来

代码

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        int[] arr1 = {11,22,33,44,55};
        int[] arr2 = copy(arr1);
        printArr(arr2);
    }

    public static int[] copy(int[] arr){
        int[] arr2 = new int[arr.length];
        for(int i = 0 ; i < arr.length ; i++){
            arr2[i] = arr[i];
        }
        return arr2;
    }

    public static void printArr(int [] arr){
        if(arr == null){
            System.out.println(arr);
            return;
        }else {
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
            }
            System.out.print("]");
        }
    }

}

运行结果

[11,22,33,44,55]

总结

数据拷贝:创建一个与原数组一摸一样的数组

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值