案例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);
}
}
运行结果
评委人数:
6
第1个评委打分
100
第2个评委打分
90
第3个评委打分
100
第4个评委打分
60
第5个评委打分
80
第6个评委打分
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]
总结
数据拷贝:创建一个与原数组一摸一样的数组