1 package cn.temptation;
2
3 import java.util.Scanner;
4
5 public class Sample01 {
6 public static void main(String[] args) {
7 // 需求:定义一个数组存储星期一、星期二、...星期日,打印该数组形式为[星期一, 星期二, ...星期日],根据用户输入的数字(1~7),显示是星期几?
8
9 // 写法一、考虑使用字符串类型的数组
10 // // 1、创建一个数组来存储星期一、星期二、...星期日
11 // String[] weekDayArr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
12 // printArray(weekDayArr);
13 //
14 // // 2、接收键盘录入
15 // System.out.println("输入一个数字就可以找到对应是星期几:");
16 // Scanner input = new Scanner(System.in);
17 // int weekDay = input.nextInt();
18 // input.close();
19 //
20 // // 3、判断输入的数字和数组中某个元素的索引之间的关系
21 // if (weekDay >= 1 && weekDay <= 7) {
22 // System.out.println("选择的是:" + weekDayArr[weekDay - 1]);
23 // } else {
24 // System.out.println("输入的数字不在范围内!");
25 // }
26
27 // 写法二、考虑使用int类型的数组
28 // 1、创建一个数组来存储星期一、星期二、...星期日
29 int[] weekDayArr = { 1, 2, 3, 4, 5, 6, 7 };
30 printArray(weekDayArr);
31
32 // 2、接收键盘录入
33 System.out.println("输入一个数字就可以找到对应是星期几:");
34 Scanner input = new Scanner(System.in);
35 int weekDay = input.nextInt();
36 input.close();
37
38 // 3、判断输入的数字和数组中某个元素的索引之间的关系
39 if (weekDay >= 1 && weekDay <= 7) {
40 System.out.println("选择的是:" + convertNumberToString(weekDayArr[weekDay - 1]));
41 } else {
42 System.out.println("输入的数字不在范围内!");
43 }
44 }
45
46 /**
47 * 打印数组
48 * @param arr:字符串数组
49 */
50 public static void printArray(String[] arr) {
51 System.out.print("[");
52
53 // 遍历数组
54 for (int i = 0; i < arr.length; i++) {
55 if (i == arr.length - 1) {
56 System.out.print(arr[i] + "]");
57 } else {
58 System.out.print(arr[i] + ",");
59 }
60 }
61
62 // 换行
63 System.out.println();
64 }
65
66 /**
67 * 打印数组(重载方法)
68 * @param arr:int数组
69 */
70 public static void printArray(int[] arr) {
71 System.out.print("[");
72
73 // 遍历数组
74 for (int i = 0; i < arr.length; i++) {
75 if (i == arr.length - 1) {
76 System.out.print(arr[i] + "]");
77 } else {
78 System.out.print(arr[i] + ",");
79 }
80 }
81
82 // 换行
83 System.out.println();
84 }
85
86 /**
87 * 数字转换为星期字符串的方法
88 * @param i:数字
89 * @return:星期字符串
90 */
91 public static String convertNumberToString(int i) {
92 String result = "";
93
94 switch (i) {
95 case 1:
96 result = "星期一";
97 break;
98 case 2:
99 result = "星期二";
100 break;
101 case 3:
102 result = "星期三";
103 break;
104 case 4:
105 result = "星期四";
106 break;
107 case 5:
108 result = "星期五";
109 break;
110 case 6:
111 result = "星期六";
112 break;
113 case 7:
114 result = "星期日";
115 break;
116 default:
117 result = "输入错误!";
118 break;
119 }
120
121 return result;
122 }
123 }
1 package cn.temptation;
2
3 public class Sample02 {
4 public static void main(String[] args) {
5 // 需求:给定一个int类型的数组,实现如下功能:将数组反转,比如:{1, 2, 3} -----> {3, 2, 1}, {1, 2, 3, 4} -----> {4, 3, 2, 1}
6
7 // 思路:
8 // 1、可能有两种情况,一种数组的长度为奇数,一种数组的长度为偶数
9 // 2、如果长度为奇数,中间那个元素不动,第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
10 // 中间那个元素的前一个元素和中间那个元素的后一个元素对调
11 // 3、如果长度为偶数,第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
12 // 中间位置的前一个元素和中间位置的后一个元素对调
13
14 int[] arr1 = { 1, 2, 3 };
15 System.out.println("反转前的数组:");
16 printArray(arr1);
17
18 // 调用方法
19 // reversalArray1(arr1);
20 reversalArray2(arr1);
21
22 System.out.println("反转后的数组:");
23 printArray(arr1);
24
25 System.out.println("------------------------------");
26
27 int[] arr2 = { 1, 2, 3, 4 };
28 System.out.println("反转前的数组:");
29 printArray(arr2);
30
31 // reversalArray2(arr2);
32 reversalArray1(arr2);
33
34 System.out.println("反转后的数组:");
35 printArray(arr2);
36
37 // 注意:
38 // 1、代码写完后,自己再考虑一下,不要抱着糊完任务的心态
39 // 2、思考问题的时候是区分了数组为奇数长度和偶数长度的,在编写代码时,发现对于奇数长度,因为其中间元素不参与反转,相当于反转时把中间元素拿掉
40 // 即其操作次数:(数组长度 - 1) / 2, 和 偶数长度数组的操作次数是一致的
41 }
42
43 /**
44 * 打印数组
45 * @param arr:int数组
46 */
47 public static void printArray(int[] arr) {
48 System.out.print("[");
49
50 // 遍历数组
51 for (int i = 0; i < arr.length; i++) {
52 if (i == arr.length - 1) {
53 System.out.print(arr[i] + "]");
54 } else {
55 System.out.print(arr[i] + ",");
56 }
57 }
58
59 // 换行
60 System.out.println();
61 }
62
63 /**
64 * 奇数长度的数组反转(因为后续的显示操作也是使用堆内存中的内容,所以该方法使用void:无返回即可)
65 * @param arr
66 */
67 public static void reversalArray1(int[] arr) {
68 // 下面写法逻辑错误,这样会对调两次,等于没有对调
69 // for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
70 for (int i = 0, j = arr.length - 1; i < arr.length / 2; i++, j--) {
71 // 对调:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
72 // 中间那个元素的前一个元素和中间那个元素的后一个元素对调
73 // 定义临时变量接收
74 int temp = arr[i];
75 arr[i] = arr[j];
76 arr[j] = temp;
77 }
78 }
79
80 /**
81 * 偶数长度的数组反转(因为后续的显示操作也是使用堆内存中的内容,所以该方法使用void:无返回即可)
82 * @param arr
83 */
84 public static void reversalArray2(int[] arr) {
85 for (int i = 0; i < arr.length / 2; i++) {
86 // 对调:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
87 // 中间位置的前一个元素和中间位置的后一个元素对调
88 // 定义临时变量接收
89 int temp = arr[i];
90 arr[i] = arr[arr.length - 1 - i];
91 arr[arr.length - 1 - i] = temp;
92 }
93 }
94 }
1 package cn.temptation;
2
3 public class Sample03 {
4 public static void main(String[] args) {
5 int[] arr = { 10, 20, 30 };
6 System.out.println(arr); // [I@15db9742
7 System.out.println(arr[0]); // 10
8
9 arr = null;
10
11 // 产生异常:java.lang.NullPointerException 空指针异常
12 // 有警告:Null pointer access: The variable arr can only be null at this location
13 // System.out.println(arr[0]);
14
15 // 产生异常:java.lang.NullPointerException 空指针异常
16 // 有警告:Null pointer access: The variable arr can only be null at this location
17 // System.out.println(arr.length);
18
19 // 下句语句执行时无异常
20 System.out.println(arr); // null
21
22 // 注意:
23 // 1、设置引用类型变量的值为null,其实就是让其栈中声明的引用类型变量 与 在堆中开辟的空间之间的联系断开
24 // 2、堆中原来开辟的空间并不会立即消失
25
26 // null是一个特殊值,类比boolean类型的特殊值true 和 false
27 // null表示的是引用数据类型的空值,引用数据类型的默认值是null
28
29 // 如下两种写法意义相同
30 // int[] arrExtend;
31 // int[] arrExtend = null;
32
33 // null不能用于给基本数据类型(值类型)赋值,null只能用于引用数据类型
34 // 语法错误:Type mismatch: cannot convert from null to int
35 // int i = null;
36 }
37 }
1 package cn.temptation;
2
3 public class Sample04 {
4 public static void main(String[] args) {
5 // int[] arr = { 1, 2, 3 };
6 // printArray(arr);
7
8 // 匿名数组:没有显示定义数组名的数组
9 // 这里匿名数组使用new关键字直接在内存的堆中开辟元素个数长度的空间,并存储这些元素,然后作为实参传递给方法的形参供方法使用
10
11 // printArray(new int[] { 1, 2, 3 });
12
13 // 匿名数组的优点:直接new出来使用,不用再做声明
14 // 匿名数组的缺点:只能使用一次(因为没有声明数组变量,一次使用完毕后就找不到了)
15
16 // 注意:匿名数组定义时,不能使用静态初始化的简写形式,语法出错
17 // 语法错误:Syntax error on token "printArray", @ expected before this token
18 // printArray({ 4, 5, 6 });
19
20 // 注意:匿名数组定义时,可以使用动态初始化的形式,但是这样定义后,无法进行元素的填充
21 printArray(new int[3]);
22 }
23
24 /**
25 * 打印数组
26 * @param arr:int数组
27 */
28 public static void printArray(int[] arr) {
29 System.out.print("[");
30
31 // 遍历数组
32 for (int i = 0; i < arr.length; i++) {
33 if (i == arr.length - 1) {
34 System.out.print(arr[i] + "]");
35 } else {
36 System.out.print(arr[i] + ",");
37 }
38 }
39
40 // 换行
41 System.out.println();
42 }
43 }
1 package cn.temptation;
2
3 public class Sample05 {
4 public static void main(String[] args) {
5 // 给方法传递值类型参数 和 给方法传递引用数据类型参数
6
7 int i = 1;
8 System.out.println(i); // 1
9
10 // 调用方法
11 show(i); // 3
12
13 System.out.println(i); // 1
14
15 System.out.println("------------------------------");
16
17 int[] arr = { 1, 2, 3 };
18 printArray(arr); // [1,2,3]
19
20 // 调用方法
21 show(arr); // [3,4,5]
22
23 printArray(arr); // [3,4,5]
24 }
25
26 // 方法接收的是值类型的参数
27 // i为形参,它接受show方法调用时传递过来的实参
28 // show方法中使用的i叫做局部变量,声明该局部变量的地方是形参定义的地方,也是它的作用域开始的地方,作用域结束的地方是show方法右侧的大括号
29 public static void show(int i) {
30 i += 2;
31 System.out.println("方法内的参数值为:" + i);
32 }
33
34 // 方法接收的是引用类型的参数
35 // 传递引用类型的参数,其实传递的是堆内存中开辟的空间的地址(也就是所谓的把引用传递了过去)
36 public static void show(int[] arr) {
37 // 遍历数组
38 for (int i = 0; i < arr.length; i++) {
39 arr[i] += 2;
40 }
41
42 // 打印数组
43 printArray(arr);
44 }
45
46 /**
47 * 打印数组
48 * @param arr:int数组
49 */
50 public static void printArray(int[] arr) {
51 System.out.print("[");
52
53 // 遍历数组
54 for (int i = 0; i < arr.length; i++) {
55 if (i == arr.length - 1) {
56 System.out.print(arr[i] + "]");
57 } else {
58 System.out.print(arr[i] + ",");
59 }
60 }
61
62 // 换行
63 System.out.println();
64 }
65 }
1 package cn.temptation;
2
3 public class Sample06 {
4 public static void main(String[] args) {
5 // 可变长参数:Java中当作数组处理
6 // 可变长参数一般出现在方法的形参中
7
8 // 调用方法
9 show(1, new double[] { 2, 3, 4 });
10
11 double[] arr = { 5, 6, 7 };
12 show(9, arr);
13 }
14
15 // 正确形式使用可变长参数
16 public static void show(int i, double... ds) {
17 System.out.println(i); // 1
18
19 System.out.println(ds); // [D@15db9742
20 System.out.println(ds.length); // 3
21
22 // 遍历
23 for (double item : ds) {
24 System.out.println(item);
25 }
26 }
27
28 // 注意:一个方法只能有一个可变长参数,且必须位于参数列表的最后位置
29
30 // 语法错误:The variable argument type double of the method test must be the last parameter
31 // public static void test(int i, double... ds, char... ch) {
32 // // 想创建多个可变长参数的方法
33 // }
34
35 // 语法错误:The variable argument type double of the method test must be the last parameter
36 // public static void test(int i, double... ds, boolean flag) {
37 // // 想创建可变长参数不在最后位置的方法
38 // }
39 }
1 package cn.temptation;
2
3 public class Sample07 {
4 public static void main(String[] args) {
5 // 排序
6
7 // 冒泡排序(两两位置比较,每轮最大数字出现在右侧,依次向左)
8 // 思路:
9 // 1、第一轮,比较第1个位置和第2个位置上的数,将较小的数放在第1个位置上,较大的数放在第2个位置上
10 // 比较第2个位置和第3个位置上的数,将较小的数放在第2个位置上,较大的数放在第3个位置上
11 // 以此类推直到第一轮结束(最后一个位置不用参与比较,因为它的右侧没有位置了),最大的数字在最右侧
12 // 2、第二轮,还是比较第1个位置和第2个位置上的数,将较小的数放在第1个位置上,较大的数放在第2个位置上
13 // 比较第2个位置和第3个位置上的数,将较小的数放在第2个位置上,较大的数放在第3个位置上
14 // 以此类推直到第二轮结束(倒数第二个位置不用参与比较,因为它的右侧已经是最大的数了),第二大的数字在倒数第二个
15 // 3、后续的轮以此类推
16
17 int[] arr = { 2, 1, 0, 4, 3 };
18
19 System.out.println("排序前:");
20 printArray(arr);
21
22 // 冒泡排序算法
23 for (int i = 0; i < arr.length - 1; i++) { // 外层循环的轮数是数组长度 - 1,i表示的是当前为第几轮
24 for (int j = 0; j < arr.length - 1 - i; j++) { // j表示的当前轮中的位置
25 // 相邻的两个位置上的数做比较
26 if (arr[j] > arr[j + 1]) {
27 // 对调
28 int temp = arr[j];
29 arr[j] = arr[j + 1];
30 arr[j + 1] = temp;
31 }
32 }
33
34 // 可以使用打印数组的方法查看当轮排序结果
35 printArray(arr);
36 }
37
38 System.out.println("排序后:");
39 printArray(arr);
40 }
41
42 /**
43 * 打印数组
44 * @param arr:int数组
45 */
46 public static void printArray(int[] arr) {
47 System.out.print("[");
48
49 // 遍历数组
50 for (int i = 0; i < arr.length; i++) {
51 if (i == arr.length - 1) {
52 System.out.print(arr[i] + "]");
53 } else {
54 System.out.print(arr[i] + ",");
55 }
56 }
57
58 // 换行
59 System.out.println();
60 }
61 }
1 package cn.temptation;
2
3 public class Sample08 {
4 public static void main(String[] args) {
5 // 排序
6
7 // 选择排序
8 // 思路:
9 // 1、第一轮,把在第一个位置上的元素依次和后续位置上的元素进行比较,如果被比较的元素比第一个位置上的元素小,就对调,直到比较到最后一个位置上的元素
10 // 第一轮操作完成后,在第一个位置上得到最小的那个元素
11 // 2、第二轮,把在第二个位置上的元素依次和后续位置上的元素进行比较,如果被比较的元素比第二个位置上的元素小,就对调,直到比较到最后一个位置上的元素
12 // 第二轮操作完成后,在第二个位置上得到次小的那个元素
13 // 3、以此类推
14
15 int[] arr = { 2, 1, 0, 4, 3 };
16
17 System.out.println("排序前:");
18 printArray(arr);
19
20 // 选择排序算法
21 for (int i = 0; i < arr.length - 1; i++) { // 外层循环的i既表示轮数,又表示比较的位置
22 // 第一轮,把在第一个位置上的元素依次和后续位置上的元素进行比较,如果被比较的元素比第一个位置上的元素小,就对调,直到比较到最后一个位置上的元素
23 // if (arr[0] > arr[1]) {
24 // // 对调
25 // int temp = arr[0];
26 // arr[0] = arr[1];
27 // arr[1] = temp;
28 // }
29 // if (arr[0] > arr[2]) {
30 // // 对调
31 // int temp = arr[0];
32 // arr[0] = arr[2];
33 // arr[2] = temp;
34 // }
35
36 // 归纳上述语句,可以得到规律
37 for (int j = i + 1; j < arr.length; j++) { // 内层循环的j表示其他被比较的位置
38 if (arr[i] > arr[j]) {
39 // 对调
40 int temp = arr[i];
41 arr[i] = arr[j];
42 arr[j] = temp;
43 }
44 }
45
46 // 可以使用打印数组的方法查看当轮排序结果
47 printArray(arr);
48 }
49
50 System.out.println("排序后:");
51 printArray(arr);
52 }
53
54 /**
55 * 打印数组
56 * @param arr:int数组
57 */
58 public static void printArray(int[] arr) {
59 System.out.print("[");
60
61 // 遍历数组
62 for (int i = 0; i < arr.length; i++) {
63 if (i == arr.length - 1) {
64 System.out.print(arr[i] + "]");
65 } else {
66 System.out.print(arr[i] + ",");
67 }
68 }
69
70 // 换行
71 System.out.println();
72 }
73 }
1 package cn.temptation;
2
3 public class Sample09 {
4 public static void main(String[] args) {
5 // 排序
6
7 // 插入排序
8 // 思路:
9 // 1、第一轮,从第2个位置开始,和其左侧的紧靠着它的位置的数(第1个位置上的数)进行比较,小的数放前面,大的数放后面
10 // 2、第二轮,从第3个位置开始,和其左侧的紧靠着它的位置的数(第2个位置上的数)进行比较,小的数放前面,大的数放后面
11 // 再看第2个位置,和其左侧的紧靠着它的位置的数(第1个位置上的数)进行比较,小的数放前面,大的数放后面
12 // 3、第三轮,从第4个位置开始,和其左侧的紧靠着它的位置的数(第3个位置上的数)进行比较,小的数放前面,大的数放后面
13 // 再看第3个位置,和其左侧的紧靠着它的位置的数(第2个位置上的数)进行比较,小的数放前面,大的数放后面
14 // 再看第2个位置,和其左侧的紧靠着它的位置的数(第1个位置上的数)进行比较,小的数放前面,大的数放后面
15 // 4、以此类推
16
17 int[] arr = { 2, 1, 0, 4, 3 };
18
19 System.out.println("排序前:");
20 printArray(arr);
21
22 // 插入排序算法
23 for (int i = 1; i < arr.length; i++) { // 外层循环的i既表示轮数,又表示位置
24 // // 第一轮操作
25 // if (arr[0] > arr[1]) {
26 // // 对调
27 // int temp = arr[0];
28 // arr[0] = arr[1];
29 // arr[1] = temp;
30 // }
31 //
32 // // 第二轮操作
33 // if (arr[1] > arr[2]) {
34 // // 对调
35 // int temp = arr[1];
36 // arr[1] = arr[2];
37 // arr[2] = temp;
38 // }
39 // if (arr[0] > arr[1]) {
40 // // 对调
41 // int temp = arr[0];
42 // arr[0] = arr[1];
43 // arr[1] = temp;
44 // }
45
46 // 归纳上述操作,得到规律
47 // 写法一
48 for (int j = i; j > 0; j--) { // 内层循环的j表示当前的这个位置
49 if (arr[j] < arr[j - 1]) { // // 内层循环的当前的这个位置上的数 和 其左侧紧靠着它的位置上的数进行比较
50 // 对调
51 int temp = arr[j];
52 arr[j] = arr[j - 1];
53 arr[j - 1] = temp;
54 }
55 }
56
57 // 写法二
58 // for (int j = 0; j < i; j++) { // 内层循环的j表示从第1个位置开始配合进行比较
59 // if (arr[j] > arr[i]) {
60 // // 对调
61 // int temp = arr[i];
62 // arr[i] = arr[j];
63 // arr[j] = temp;
64 // }
65 // }
66 }
67
68 System.out.println("排序后:");
69 printArray(arr);
70 }
71
72 /**
73 * 打印数组
74 * @param arr:int数组
75 */
76 public static void printArray(int[] arr) {
77 System.out.print("[");
78
79 // 遍历数组
80 for (int i = 0; i < arr.length; i++) {
81 if (i == arr.length - 1) {
82 System.out.print(arr[i] + "]");
83 } else {
84 System.out.print(arr[i] + ",");
85 }
86 }
87
88 // 换行
89 System.out.println();
90 }
91 }
1 package cn.temptation;
2
3 import java.util.Arrays;
4
5 public class Sample10 {
6 public static void main(String[] args) {
7 // 初始化数组
8 int[] arr = { 2, 1, 0, 4, 3 };
9
10 System.out.println("排序前:");
11 printArray(arr);
12
13 // 可以调用Arrays类的sort方法进行排序
14 // 类 Arrays:此类包含用来操作数组(比如排序和搜索)的各种方法。
15 // 常用的成员方法:
16 // static void sort(int[] a) :对指定的 int 型数组按数字升序进行排序。
17 Arrays.sort(arr);
18
19 System.out.println("排序后:");
20 printArray(arr);
21 }
22
23 /**
24 * 打印数组
25 * @param arr:int数组
26 */
27 public static void printArray(int[] arr) {
28 System.out.print("[");
29
30 // 遍历数组
31 for (int i = 0; i < arr.length; i++) {
32 if (i == arr.length - 1) {
33 System.out.print(arr[i] + "]");
34 } else {
35 System.out.print(arr[i] + ",");
36 }
37 }
38
39 // 换行
40 System.out.println();
41 }
42 }