练习四:复制数组
需求:
把一个数组中的元素复制到另一个新数组中去。
package com.angus.comprehensiveExercise; public class test4 { public static void main(String[] args) { //需求: // 把一个数组中的元素复制到另一个新数组中去。 int[] arr = {1,3,2}; int[] brr = new int[3]; for (int i = 0; i < arr.length; i++) { brr[i] = arr[i]; } for (int i = 0; i < brr.length; i++) { System.out.println(brr[i]); } System.out.println("^^"); } }
练习五:评委打分
需求 :
在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
package com.angus.comprehensiveExercise; import java.util.Scanner; public class test5 { public static void main(String[] args) { //需求 : // 在唱歌比赛中,有6名评委给选手打分, // 分数范围是[0 - 100]之间的整数。 // 选手的最后得分为:去掉最高分、最低分后的4个评委的平均分, // 请完成上述过程并计算出选手的得分。 //接收6个分数 int[] scoreArr = getScore(); for (int i = 0; i < scoreArr.length; i++) { System.out.println(scoreArr[i]); } //最大值 int max = getMax(scoreArr); //最小值 int min = getMin(scoreArr); //求和 int sum = getSum(scoreArr); //求平均值 int avg = (sum - max - min) / (scoreArr.length - 2); System.out.println("平均分为:" + avg); System.out.println("^^"); } //存6个分数 public static int[] getScore() { int[] scores = new int[6]; Scanner scanner = new Scanner(System.in); for (int i = 0; i < scores.length;) { System.out.println("请输入分数"); int score = scanner.nextInt(); if (score >= 0 && score <= 100) { scores[i]=score; i++; } else { System.out.println("输入不合法,请重新输入"); } } return scores; } public static int getMax(int[] scoreArr) { int max = scoreArr[0]; for (int i = 1; i < scoreArr.length; i++) { if (scoreArr[i] >= max) { max = scoreArr[i]; } } return max; } public static int getMin(int[] scoreArr) { int min = scoreArr[0]; for (int i = 1; i < scoreArr.length; i++) { if (scoreArr[i] <= min) { min = scoreArr[i]; } } return min; } public static int getSum(int[] scoreArr) { int sum = 0; for (int i = 0; i < scoreArr.length; i++) { sum = sum + scoreArr[i]; } return sum; } }
练习六:数字加密
需求:
某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
规则如下:
先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数。
package com.angus.comprehensiveExercise; public class test6 { public static void main(String[] args) { /* 某系统的数字密码(大于0)。 比如1983,采用加密方式进行传输, 规则如下: 每位数加上5 再对10求余, 最后将所有数字反转, 得到一串新数。*/ //1983 int arr[] = {1,9,8,3}; //加5 for (int i = 0; i < arr.length; i++) { arr[i] = arr[i] + 5;//6 14 13 8 } //模10 for (int i = 0; i < arr.length; i++) { arr[i] = arr[i] % 10;//6 4 3 8 } //反转 for (int i = 0,j = arr.length - 1; i < j; i++,j--) { int temp = arr[i];//8 3 4 6 arr[i] = arr[j]; arr[j] = temp; } //不能直接打印,先拼起来 //拼起来有两种拼, //第一种利用字符串拼接后就成了字符串,不能用于例如回文数的比较,但可以将数字与字母字符拼接起来, //第二种只能用于数字,但是可以用来跟数字比较 //第一种 String num = ""; for (int i = 0; i < arr.length; i++) { num = num + arr[i]; } System.out.println(num); //第二种 int num1 = 0; for (int i = 0; i < arr.length; i++) { num1 = num1 * 10 + arr[i]; } System.out.println(num1); System.out.println("^^"); } }
package com.angus.comprehensiveExercise; import java.util.Scanner; public class test6_6 { public static void main(String[] args) { //题目 //键盘录入然后加密 //把整数上的每一位都添加到数组当中 1983 //反向推导 Scanner scanner = new Scanner(System.in); System.out.println("输入加密数字"); int number = scanner.nextInt(); int temp = number; int count = 0; while (number != 0){ number = number / 10; count++; } int arr[] = new int[count]; for (int i = arr.length - 1; i >= 0; i--) { int ge = temp /1 %10; temp = temp / 10; arr[i] = ge; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); //验证结果 1 9 8 3 for (int i = 0; i < arr.length; i++) { arr[i] = arr[i] + 5; } //再对10求余 for (int i = 0; i < arr.length; i++) { arr[i] = arr[i] % 10; } //将所有数字反转 for (int i = 0, j = arr.length - 1; i < j; i++, j--) { int temp1 = arr[i]; arr[i] = arr[j]; arr[j] = temp1; } //8 3 4 6 --> 8346 //3.把数组里面的每一个数字进行拼接,变成加密之后的结果 int number1 = 0; for (int i = 0; i < arr.length; i++) { number1 = number1 * 10 + arr[i]; } System.out.println(number1); } }
练习七:数字解密
把上一题加密之后的数据进行解密
package com.angus.comprehensiveExercise; public class test7 { public static void main(String[] args) { //把上一题加密之后的数据进行解密 //每位数加上5 //再对10求余, //最后将所有数字反转, //得到一串新数。 //按照以上规则进行解密: //比如1983加密之后变成8346,解密之后变成1983 //定义数组 int arr[] = {8, 3, 4, 6}; //数组反转,需要两个指针 for (int i = 0,j = arr.length - 1; i < j; i++,j--) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //上对下 模10,那么分析上的范围: 0~9加5 -> 5~14 -> 分成5~9与10~14,所以0~4就+10,5~9就不变 for (int i = 0; i < arr.length; i++) { if(arr[i]>=0 && arr[i]<=4){ arr[i]=arr[i]+10; } } //-5 for (int i = 0; i < arr.length; i++) { arr[i]=arr[i]-5; } //拼接 String num = ""; for (int i = 0; i < arr.length; i++) { num = num + arr[i]; } System.out.println(num); System.out.println("^^"); } }
练习八:抽奖
需求:
一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 1000元的奖金被抽出 2元的奖金被抽出
package com.angus.comprehensiveExercise; import java.util.Random; public class test8 { public static void main(String[] args) { //需求: //一个大V直播抽奖,奖品是现金红包, //分别有{2, 588 , 888, 1000, 10000}五个奖金。 //请使用代码模拟抽奖,打印出每个奖项, //奖项的出现顺序要随机且不重复。 //打印效果如下:(随机顺序,不一定是下面的顺序) //888元的奖金被抽出 //588元的奖金被抽出 //10000元的奖金被抽出 //1000元的奖金被抽出 //2元的奖金被抽出 //把奖项打乱然后遍历 int[] arr = {2,588,888,1000,10000}; Random random = new Random(); for (int i = 0; i < arr.length; i++) { //获取随机索引 int ranIndex = random.nextInt(arr.length); //交换 int temp = arr[i]; arr[i] = arr[ranIndex]; arr[ranIndex] = temp; } //遍历 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }