Java基础(第六期):
对前五期的综合练习
文章目录
- 综合练习巩固JAVA基础
- 第六期
-
- [一、逢 7 跳过](#一、逢 7 跳过)
- 二、数组元素求和
- 三、判断两个数组元素是否相同
- 四、查找元素在数组中的索引
- 五、数组元素反转
- 六、评委打分
- 七、随机产生验证码
综合练习巩固JAVA基础
第六期
一、逢 7 跳过
需求:
朋友聚会的时候可能会玩一个游戏:逢七过
规则是:从任意一个数字开始报数,当你要报的数字包含了 7 或者 是 7 的倍数时都要说: 过。
为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1- - 100 之间的满足逢七过的数据。
java
package com.liujintao.seven;
public class EventSevenTimes {
public static void main(String[] args) {
// 动态初始化我们的数组内容(注意取值范围,实际值要小1)
int[] arr = new int[100 + 1];
satisfy(arr);
}
public static void satisfy (int[] arr) {
// 使用遍历操作,进行赋值 1 - 100;
for (int i = 1; i < arr.length; i++) {
arr[i] = i;
// 进行判断:符合条件的就打印他的值,不符和则跳过
if (arr[i] == 7 || arr[i] % 7 == 0 || arr[i] % 10 == 7) {
System.out.println(arr[i] + ": 过");
}
}
}
}
二、数组元素求和
需求:
有这样一个数组:元素是:{68, 27, 95, 88, 171, 996, 51, 210}
求出该数组中满足要求的元素和
要求是: 求和的元素各位和十位都不能是 7 ,并且只能是偶数
java
package com.liujintao.sum;
public class ArraySum {
public static void main(String[] args) {
int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};
int result = getSum(arr);
System.out.println("满足条件的元素和为:" + result);
}
public static int getSum (int[] arr) {
// 要求:元素各位和十位不能是7 ,且只能是偶数
int sum = 0;
for (int i= 0; i <arr.length; i++) {
if (arr[i] != 7 && arr[i] % 10 != 7 && arr[i] % 2 == 0) {
sum += arr[i];
}
}
return sum;
}
}
三、判断两个数组元素是否相同
需求:
1. 定义一个方法,用于比较两个数组是否相同
1. 需求:长度,内容,顺序完全相同
java
package com.liujintao.compare;
public class SameArray {
public static void main (String[] args) {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};
boolean result = CompareSame(arr1, arr2);
System.out.println(result);
}
/**
* 通过返回值,为调用者解决问题!
* @param arr1
* @param arr2
*/
public static boolean CompareSame (int[] arr1, int[] arr2) {
// 判断长度是否相同
if (arr1.length != arr2.length) {
return false;
}
System.out.println("上面判断不成立,则下面执行");
// 如果上面条件不成立,则长度和顺序相同,遍历任意一个数组,都能达到同样次数的遍历
for (int i = 0 ; i < arr1.length; i++) {
// 判断两个数组相同下标的元素是否相同
if (arr1[i] != arr2[i]) {
return false;
}
}
// 上面的判断都没有进入,则表示相同。
return true;
}
}
四、查找元素在数组中的索引
需求:
-
设计一个方法,查找元素在数组中的索引位置
-
已知一个数组 arr = {19, 28, 37, 46, 50};
-
键盘录入一个数据,查找该数据在数组中的索引
-
并在控制台输出找到的索引值。如果找不到,则输出 -1。
java
package com.liujintao.index;
import java.util.Scanner;
public class ArrayIndex {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
int result = getArrayIndex(arr);
System.out.println(result);
}
/**
* 该方法的目的是完成数组索引的查找
*/
public static int getArrayIndex(int[] arr) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数组元素");
int indexNum = sc.nextInt();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == indexNum) {
return i;
}
}
return -1;
}
}
考虑多元素的情况:
java
package com.liujintao.index;
import java.util.Scanner;
public class ArrayIndex {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50, 28, 28, 19};
int[] result = getArrayIndex(arr);
// 如果返回的数组为 0 ,表示没有 返回-1, 如果有长度,则返回数组值(索引号)
if (result.length == 0) {
System.out.println(-1);
} else {
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
/**
* 该方法的目的是完成数组索引的查找
*/
public static int[] getArrayIndex(int[] arr) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数组元素:");
// 1、统计相同数组元素的个数
int indexNum = sc.nextInt();
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == indexNum) {
count++;
}
}
// 2、创建新数组,遍历查找相同的元素,存入新数组中
int[] indexArr = new int[count];
int a = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == indexNum) {
// a :表示的是新数组的下标索引
indexArr[a] = i;
a++;
}
}
// 3、将新数组返回给调用者
return indexArr;
}
}
五、数组元素反转
需求:
已知一个数组,arr = {11, 22, 33, 44, 55};使用程序实现把数组中的元素交换位置。
交换后的数组为 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。
java
package com.liujintao.reversal;
public class ReversalArray {
public static void main(String[] args) {
// 你想要键盘录入数组也是可以的
int[] arr = {11, 22, 33, 44, 55};
int[] result = handleReversalArray(arr);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
/**
* 手写冒泡排序方法
*/
public static int[] handleReversalArray(int[] arr) {
int i = 0;
int j = arr.length - 1;
while (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
return arr;
}
}
使用for循环的实现方式一、
java
package com.liujintao.reversal;
/*
使用for循环实现逆置数组
*/
public class ReversalArray2 {
public static void main(String[] args) {
// 你想要键盘录入数组也是可以的
int[] arr = {11, 22, 33, 44, 55};
int[] result = handleReversalArray(arr);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
/**
* 使用for循环实现逆置的API
*/
public static int[] handleReversalArray (int[] arr) {
// 和 while 一样,先设置好下标
int start = 0;
int end = arr.length - 1;
for (; start < end; start++, end--) {
int temp = arr[ start];
arr[start] = arr[end];
arr[end] = temp;
}
return arr;
}
}
六、评委打分
需求:
在编程竞赛中,有 6 个评委为参赛选手打分,分数为 0 - 100 的整数分。
选手的最后得分为:去掉一个最高分和一个最低分后 的 4个评委的平均值。
- 注意程序的节流
java
package com.liujintao.judge;
import java.util.Scanner;
public class JudgeScore {
public static void main(String[] args) {
double result = handleScore();
System.out.println("去掉最高分和最低分,最终得分为;" + result);
}
/**
* 获取评委打分的功能方法
*/
public static double handleScore () {
Scanner sc = new Scanner(System.in);
int[] arr = new int[6];
// 1、 获取分数
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入分数:");
int score = sc.nextInt();
// 判断数据是否合理
if (score >= 0 && score <= 100) {
arr[i] = score;
} else {
System.out.println("您输入的分数不合理, 请检查!");
i--;
}
}
// 1、调用max方法
int max = handleMax(arr);
// 2、调用min方法
int min = handleMin(arr);
// 3、最终将平均值返回出去
return getAverage(arr, max, min);
}
/**
* 求和的方法
* @param arr
* @param max
* @param min
* @return
*/
private static double getAverage(int[] arr, int max, int min) {
int sum = 0;
double average = 0;
// 遍历求和
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
sum = sum - max - min;
average = (double)sum / (arr.length - 2);
return average;
}
/**
* 求最大值方法
* @param arr
* @return
*/
public static int handleMax (int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
/**
* 求最小值方法
*/
public static int handleMin (int[] arr) {
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
}
}
return min;
}
}
七、随机产生验证码
java
package com.liujintao.random;
import java.util.Random;
import java.util.Scanner;
public class RandomNumber {
/**
* 该函数调用验证码所有的函数,完成验证码模块功能开发
* @param args
*/
public static void main(String[] args) {
// 1、调用产生验证码元素函数
char[] result = CodeCharArray();
// 2、调用产生验证码下标索引的数组函数
int[] array_index = RandomCode();
// 3、调用生成验证码函数
String code = getCode(result, array_index);
System.out.println("生成的验证码为:" + code);
// 4、调用获取用户输入的验证码函数
String user = InputCode();
System.out.println("用户输入的验证码为:" + user);
// 5、调用验证结果的处理函数
handleCode(code, user);
}
/**
*1.获取验证码元素
*/
public static char[] CodeCharArray() {
// 产生的验证码元素方法字符数组中
char[] ch = new char[62];
// 获取验证码元素
int index = 0;
for (char c = 'a'; c <= 'z'; c++) {
// 注意,字符可以用数组表示,所以这里用char类型,计数器从c 到 z
ch[index] = c;
index++;
}
for (char c = 'A'; c <= 'Z'; c++) {
ch[index] = c;
index++;
}
for (char i = '0'; i <= '9'; i++) {
ch[index] = i;
index++;
}
return ch;
}
/**
* 2.产生验证码下标索引的方法
*/
public static int[] RandomCode() {
Random r = new Random();
int[] indexNum = new int[5];
for (int i = 0; i < 5; i++) {
indexNum[i] = r.nextInt(26 + 26 + 10);
}
return indexNum;
}
/**
*3.得到验证码字符串的方法
* @param ch
* @param index
* @return
*/
public static String getCode(char[] ch, int[] index) {
// 用字符串存放获得的每个字符验证码,并返回
String CodeStr = "";
for (int i = 0; i < index.length; i++) {
CodeStr += ch[index[i]];
}
return CodeStr;
}
/**
* 4.前台发送过来用户输入的验证码
*/
public static String InputCode() {
Scanner sc = new Scanner(System.in);
// 这里是模拟请求的验证码
String inputCode = "";
System.out.println("请输入验证码:");
for (int i = 0; i < 5; i++) {
// 注意请求过来的都是json格式,需要转换成String(所以这里用String)
String str = sc.next();
inputCode += str;
}
return inputCode;
}
/**
* 5.处理验证码是否正确的方法
*/
public static void handleCode(String code, String user) {
if (code.equals(user)) {
System.out.println("验证码输入正确!");
} else {
System.out.println("验证码输入有误,请检查后重新输入!");
}
}
}