一、知识点(必做):

CalendarDemo.java

需求:创建Calendar对象,并分别设置和获取日期的年、月、日、时、分、秒。

作业目的:掌握Calendar对象的创建,简单的设置和获取日期信息。

  1. package hk.calendar;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. public class CalendarDemo {
  5. public static void main(String[] args) {
  6. /**
  7. * 需求:创建Calendar对象,并分别设置和获取日期的年、月、日、时、分、秒。
  8. * 作业目的:掌握Calendar对象的创建,简单的设置和获取日期信息。
  9. */
  10. Calendar calendar = Calendar.getInstance();
  11. int year = calendar.get(Calendar.YEAR);
  12. int month = calendar.get(Calendar.MONTH);
  13. int day = calendar.get(Calendar.DATE);
  14. int hour = calendar.get(Calendar.HOUR_OF_DAY);
  15. int minute = calendar.get(Calendar.MINUTE);
  16. int second = calendar.get(Calendar.SECOND);
  17. int week = calendar.get(Calendar.WEEK_OF_MONTH);
  18. System.out.println(calendar.getTime());
  19. }
  20. }

RegexDemo.java

需求:

  • 判断一个字符串是否全部有数字组成
  • 判断一个字符串是否是手机号码
  • 判断一个字符串是否是18位身份证号码
  • 判断一个字符串是否6到16位,且第一个字必须为字母

作业目的:了解正则表达式是什么东西,以后会查正则表达式即可。

  1. package hk.regex;
  2. public class RegexDemo {
  3. public static void main(String[] args) {
  4. /**
  5. * 需求:
  6. *- 判断一个字符串是否全部有数字组成
  7. *- 判断一个字符串是否是手机号码
  8. * - 判断一个字符串是否是18位身份证号码
  9. *- 判断一个字符串是否6到16位,且第一个字必须为字母
  10. * 作业目的:了解正则表达式是什么东西,以后会查正则表达式即可。
  11. */
  12. // 判断一个字符串是否全部有数字组成
  13. System.out.println("12345678S".matches("\\d"));// false
  14. System.out.println("12345678".matches("\\d"));// false
  15. System.out.println("12345678".matches("\\d*"));// true
  16. System.out.println("1234".matches("\\d{5,10}"));// false
  17. System.out.println("12345678".matches("\\d{5,10}"));// true
  18. // 判断一个字符串是否是手机号码
  19. String regex1 = "^1[3|4|5|7|8][0-9]{9}$";
  20. System.out.println("12712345678".matches(regex1));// false
  21. System.out.println("13712345678".matches(regex1));// true
  22. // 判断一个字符串是否是18位身份证号码
  23. String regex2 = "\\d{17}[[0-9]X]";
  24. System.out.println("511123200110101234".matches(regex2));// true
  25. System.out.println("51112320011010123X".matches(regex2));// true
  26. System.out.println("51112320011010123S".matches(regex2));// false
  27. // 判断一个字符串是否6到16位,且第一个字必须为字母
  28. String regex3 = "^[a-zA-Z]\\w{5,15}$";
  29. System.out.println("will".matches(regex3));// false
  30. System.out.println("17will".matches(regex3));//false
  31. System.out.println("will17willwillwill".matches(regex3));//false
  32. System.out.println("will17".matches(regex3));// true
  33. }
  34. }

DEBUG调试功能(重点)

需求:Debug调试

步骤:

(1)打断点

(2)以Debug As模式运行程序

ArrayCopyDemo.java(重点)

需求:定义一个方法,进行数组拷贝,并调用System中的数组拷贝方法

思路:

数组高级 - 图1

  1. package hk.arraycopy;
  2. import wolfcode._03_arracopy.ArrayUtils;
  3. public class ArrayCopyDemo {
  4. public static void main(String[] args) {
  5. /**
  6. * 需求:定义一个方法,进行数组拷贝,并调用System中的数组拷贝方法
  7. *思路:
  8. *
  9. */
  10. int[] srcArr = {10, 20, 30, 40, 50, 60, 70, 80, 90};
  11. int[] destArr = new int[10];
  12. wolfcode._03_arracopy.ArrayUtils.arrayCopy(srcArr, 0, destArr, 2, 5);
  13. for (int item : srcArr) {
  14. System.out.println(item + "");
  15. }
  16. System.out.println();
  17. for (int item : destArr) {
  18. System.out.println(item + "");
  19. }
  20. }
  21. public static class ArrayUtils {
  22. public static void arrayCopy(int[] srcArr, int srcIndex, int[] destArr, int dextIndex, int length) {
  23. for (int i = 0; i < length; i++) {
  24. destArr[dextIndex + i] = srcArr[srcIndex + i];
  25. }
  26. }
  27. }
  28. }

ArraySortDemo.java

需求:定义一个方法,进行数组排序,并调用Arrays中的排序方法

思路:

(1)第一趟比较

  1. 遍历所有元素,比较元素之间的大小,上一个元素>下一个元素,两个元素进行交换

(2)比较多趟之后,总结规律

  1. package hk.arraysort;
  2. import wolfcode._04_sort.ArraysUtils;
  3. public class ArraySortDemo {
  4. public static void main(String[] args) {
  5. /**
  6. * 需求:定义一个方法,进行数组排序,并调用Arrays中的排序方法
  7. * 思路:
  8. * (1)第一趟比较
  9. *遍历所有元素,比较元素之间的大小,上一个元素>下一个元素,两个元素进行交换
  10. * (2)比较多趟之后,总结规律
  11. */
  12. int[] arr = new int[]{2, 9, 6, 7, 4, 1};
  13. ArraysUtils.bubbleSort(arr);
  14. }
  15. public abstract static class ArraysUtils {
  16. public static void bubbleSort(int[] arr) {
  17. int temp;
  18. //控制轮数6个数,需要5轮完全有序
  19. for (int i = 0; i < arr.length - 1; i++) {
  20. //每一轮两两比较
  21. for (int j = 0; j < arr.length - 1 - i; j++) {
  22. if (arr[j] > arr[j + 1]) {
  23. temp = arr[j];
  24. arr[j] = arr[j + 1];
  25. arr[j + 1] = temp;
  26. }
  27. }
  28. }
  29. for (int item : arr) {
  30. System.out.print(item + " ");
  31. }
  32. }
  33. }
  34. }

ArraySreachDemo2.java

需求:定义一个方法,进行数组二分查找,并调用Arrays中的二分查找方法

思路:

数组高级 - 图2

  1. package hk.arraysearch;
  2. import wolfcode._05_search.ArrayUtils;
  3. public class ArraySearchDemo {
  4. public static void main(String[] args) {
  5. /**
  6. * 需求:定义一个方法,进行数组二分查找,并调用Arrays中的二分查找方法
  7. * 思路:
  8. */
  9. int[] arr = {1, 2, 3, 5, 6};
  10. int index = binarySeach(arr, 3);
  11. System.out.println(index);
  12. }
  13. public static int binarySeach(int[] arr, int key) {
  14. int low = 0;
  15. int high = arr.length - 1;
  16. int mid = (low + high) / 2;
  17. int midvalue = arr[mid];
  18. if (key == midvalue) {
  19. return mid;
  20. } else if (key > midvalue) {
  21. low = mid + 1;
  22. } else {
  23. high = mid - 1;
  24. }
  25. return -1;
  26. }
  27. }

ArraysDemo.java

需求:Arrays常用方法

步骤:

(1)调用Arrays中的toString来打印数组的元素

(2)调用Arrays中的sort来排序数组的元素

(3)调用Arrays中的binarySearch来查找数组元素,并观察返回值

(4)调用Arrays中的copyOf来复制数组,并打印复制的数组中的元素,并对比System.arraycopy

  1. package hk.arrays;
  2. import java.util.Arrays;
  3. public class ArraysDemo {
  4. public static void main(String[] args) {
  5. /**
  6. * 需求:Arrays常用方法
  7. * 步骤:
  8. *(1)调用Arrays中的toString来打印数组的元素
  9. *(2)调用Arrays中的sort来排序数组的元素
  10. * (3)调用Arrays中的binarySearch来查找数组元素,并观察返回值
  11. * (4)调用Arrays中的copyOf来复制数组,并打印复制的数组中的元素,并对比System.arraycopy
  12. */
  13. int[] arr = {1, 32, 325, 11, 367};
  14. System.out.println(Arrays.toString(arr));//打印数组元素
  15. Arrays.sort(arr);//排序
  16. System.out.println(Arrays.toString(arr));//排序后打印
  17. System.out.println(Arrays.binarySearch(arr,32));//binarySearch查找元素
  18. int[] str1 = Arrays.copyOf(arr, 6);//copyof复制数组
  19. System.out.println(Arrays.toString(str1));//复制后打印数组
  20. }
  21. }

二、综合练习(必做):

SreachDemo.java

需求:字符数组char[] arr={‘A’,‘1’,‘R’,‘!’,‘e’,‘&’,‘A’,‘5’,‘A’,‘g’,‘#’,‘D’},请使用循环,统计出其中英文字母‘A’的个数。

  1. public class SearchDemo {
  2. public static void main(String[] args) {
  3. /**
  4. * 需求:字符数组char[] arr={‘A’,‘1’,‘R’,‘!’,‘e’,‘&’,‘A’,‘5’,‘A’,‘g’,‘#’,‘D’},
  5. * 请使用循环,统计出其中英文字母‘A’的个数。
  6. */
  7. char[] arr={'A','1','R','!','e','&','A','5','A','g','#','D'};
  8. int sum=0;
  9. for (char item:arr) {
  10. if(item=='A'){
  11. sum++;
  12. }
  13. }
  14. System.out.println(sum);
  15. }
  16. }

ChangeDemo.java

需求:定义一个方法transfer(int[] arr, int index1, int index2)实现交换数组arr中索引为index1和index2对应元素的值。

  1. package hk.change;
  2. import java.util.Arrays;
  3. public class ChangeDemo {
  4. public static void main(String[] args) {
  5. /**
  6. * 需求:定义一个方法transfer(int[] arr, int index1, int index2)
  7. * 实现交换数组arr中索引为index1和index2对应元素的值。
  8. */
  9. int[] arr = {12, 121, 42, 65, 99, 88};
  10. transfer(arr, 0, 4);
  11. System.out.println(Arrays.toString(arr));
  12. }
  13. public static void transfer(int[] arr, int index1, int index2) {
  14. int t = arr[index1];
  15. arr[index1] = arr[index2];
  16. arr[index2] = t;
  17. }
  18. }

CalendarDemo2.java

需求:查询某个时间最近一周的信息,如何表示最近这一周的开始时间和结束时间

作业目的:熟悉Calendar类中的方法。

  1. package hk.calendar2;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. public class CalendarDemo2 {
  6. public static void main(String[] args) {
  7. /**
  8. * 需求:查询某个时间最近一周的信息,如何表示最近这一周的开始时间和结束时间
  9. * 作业目的:熟悉Calendar类中的方法。
  10. */
  11. SimpleDateFormat df = new SimpleDateFormat();
  12. df.applyPattern("yyyy-MM-dd HH:mm:ss");
  13. String dateStr="2022-03-07 19:18:26";
  14. Calendar cal = Calendar.getInstance();
  15. cal.set(Calendar.HOUR_OF_DAY,23);
  16. cal.set(Calendar.MINUTE,59);
  17. cal.set(Calendar.SECOND,59);
  18. Date endDate =cal.getTime();
  19. System.out.println("endDate="+endDate);
  20. cal.add(Calendar.SECOND,1);
  21. cal.add(Calendar.DAY_OF_MONTH,-7);
  22. Date beginDate =cal.getTime();
  23. System.out.println("beginDate="+beginDate);
  24. }
  25. }

三、 拓展练习(选做)

PrimeNumberDemo.java

需求:请输出1-100以内最大的五个质数(质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数)。

思路:

(1)一个数num和[2,num)这个范围的数进行对比,如果能被整除就不需要进行对比

(2)5个数,那么需要我们定义一个计数器,来记录符合要求的个数

(3)最大的需要我们倒着循环

FallDemo.java

需求:在main方法中实现如下功能并打印结果:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

数组高级 - 图3