01. 数组的静态初始化
-
语法
//完整语法 数据类型[] 数组名 = new 数据类型[]{值1,值2,...}; //静态初始化 数据类型[] 数组名 == {值1,值2,…};
-
代码实现
/** * 数组的静态初始化 * @author 海锋 * */ public class Demo01_Array { public static void main(String[] args) { int[] num = {1,2,3,4,5}; System.out.println(num[4]); } }
02. 数组的两个小问题
-
ArrayIndexOutOfBoundsException
- 数组索引越界异常
- 当索引超出了数组的长度
-
NullPointerException
- 空指针异常
- 使用null对象调用属性和方法
-
代码实现
//创建数组 int[] nums = {1,2,3,4,5}; System.out.println(nums[0]); System.out.println(nums[1]); System.out.println(nums[2]); System.out.println(nums[3]); System.out.println(nums[4]); System.out.println(nums[5]); //使用null对象调用属性和方法都会报错:NullPointerException nums = null; System.out.println(nums[0]);
03. 数组操作之遍历
-
数组遍历
- 获取数组中的每一个元素
/** * 数组操作之遍历 * @author 海锋 * */ public class Demo02_Array { public static void main(String[] args) { //创建数组 int[] num = {1,2,3,4,5}; //遍历方式一 System.out.println(num[0]); System.out.println(num[1]); System.out.println(num[2]); System.out.println(num[3]); System.out.println(num[4]); System.out.println("--------------------"); //遍历方式二 for(int i = 0;i < 5;i++) { //打印数组 System.out.println(num[i]); } System.out.println("--------------------"); //遍历方式三:动态获取数组长度 for(int i = 0;i < num.length;i++) { //打印数组 System.out.println(num[i]); } } }
04. 数组的简单查找
-
需求
- 获取元素出现在数组中的索引
-
/** * 数组操作之查找 * @author 海锋 * */ public class Demo04_Array { public static void main(String[] args) { //创建数组 int[] nums = {1,2,4,5,6}; //findFirstElementIndex(4, nums); //调用方法并输出 System.out.println(findFirstElementIndex(4, nums)); } public static int findFirstElementIndex(int num,int[] nums) { int firstIndex = -1; //遍历 for(int i = 0;i < nums.length;i++) { int isNum = nums[i]; //查找 if(isNum == num) { firstIndex = i; break; } } return firstIndex; } }
05. 数组练习之评委打分
-
需求
- 编程竞赛中,有六个评委打分,一般情况,去掉一个最高分、最低分,然后取得剩下分数的 平均分就是选手的所得分。
-
代码实现
import java.util.Scanner; /** * 需求: 编程竞赛中,有六个评委打分, 一般情况,去掉一个最高分、最低分,然后取得剩下分数的平均分就是选手的所得分 * @author 海锋 * */ public class Demo05_Array { public static void main(String[] args) { //数组长度 int length = 6; //创建数组 int[] array = new int[length]; //创建输出 Scanner input = new Scanner(System.in); //评委打分 for(int i = 0;i < array.length;i++) { System.out.println("请输入第"+ (i+1) + "个评委打分:"); //数组接收评分 array[i] = input.nextInt(); } input.close(); int max = array[0]; int min = array[0]; int sum = 0; for(int i = 0;i < array.length;i++) { //求出最高分 if(max < array[i]) { max = array[i]; } //求出最低分 if(min > array[i]) { min = array[i]; } //求出总分 sum += array[i]; } //去掉最高分和最低分后的总分 sum = sum - max -min; //求出平均分 int avg = sum / (length-2); //输出平均分 System.out.println(avg); } }
06. 二维数组概述
-
概念
- 一维数组装一维数组
-
初始化
-
动态初始化
数据类型[][] 数组名 = new 数据类型[m][n];
-
静态初始化
-
-
代码实现
int[][] nums = new int[3][2]; System.out.println(nums); System.out.println(nums[1]); System.out.println(nums[1][1]);
-
注意事项
-
以下也可以定义二维数组
数据类型 数组名[][] = new 数据类型[m][n]; 数据类型[] 数组名[] = new 数据类型[m][n];
-
07. 二维数组动态初始化内存图解
-
代码实现
int[][] nums = new int[3][3]; System.out.println(nums[0]); System.out.println(nums[0][0]);
-
内存图解
08. 二维数组操作之遍历
-
开发步骤
- 遍历所有的一维数组
- 遍历所有的一维数组中的元素
-
代码实现
//二维数组是由一维数组组成 int[][] nums = {{1,2,3},{4,5,6},{7,8,9}}; //获取所有的一维数组 for (int i = 0; i < nums.length; i++) { //获取一维数组 int[] arr = nums[i]; for (int j = 0; j < arr.length; j++) { System.out.print(arr[j]); } System.out.println(); } System.out.println("------------"); for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { System.out.print(nums[i][j]); } System.out.println(); }
09. java中的参数传递问题
-
代码实现
public static void main(String[] args) { int num = 1; System.out.println("num : " + num);//1 change(num); System.out.println("num : " + num);//1 System.out.println("--------------"); int[] nums = {1,2,3}; System.out.println(nums[1]);//2 change(nums); System.out.println(nums[1]);//250 System.out.println("--------------"); System.out.println(nums[0]);//1 change(nums[0]); System.out.println(nums[0]);//1 System.out.println("--------------"); String str = "fuck"; System.out.println(str);//fuck change(str); System.out.println(str);//fuck } public static void change(String str) { str = "hello"; } public static void change(int[] nums) { nums[1] = 250; } public static void change(int num) { num = 250; }
-
总结
- 当使用方法进行参数传递时,如果传递是基本数据类型,值不会发生改变
- 当使用方法进行参数传递时,如果传递是引用数据类型,值可能发生改变。(除String以外)
10. 两个变量值的交换
-
代码实现
-
使用临时变量
int num1 = 1; int num2 = 3; int temp; System.out.println("num1 : " + num1); System.out.println("num2 : " + num2); temp = num1; num1 = num2; num2 = temp; System.out.println("num1 : " + num1); System.out.println("num2 : " + num2);
-
使用异或
int num3 = 1 ; int num4 = 3; System.out.println("num3 : " + num3); System.out.println("num4 : " + num4); num3 = num3 ^ num4; num4 = num3 ^ num4; num3 = num3 ^ num4; System.out.println("num3 : " + num3); System.out.println("num4 : " + num4);
-
11. 冒泡排序
-
概述
- 相邻两个元素两两比较,将较大值往后面放
-
思路分析
- 外循环控制大次
- 内循环控制小次
-
代码实现
- 两种方式
import java.util.Arrays; /** * 冒泡排序 * @author 海锋 * */ public class Demo07_Sort { public static void main(String[] args) { //定义一个数组 int[] array = {32,56,45,67,8887,98,565,90,78}; //方法一排序 for(int i = 0;i < array.length;i++) {//控制4大次 for(int j = 0;j < array.length-i-1;j++) {//控制小次 //升序排序 if(array[j] > array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } //循环输出 for(int i = 0;i < array.length;i++) { System.out.println(array[i]); } System.out.println("-----------------"); int[] num = {23,43,56,78,98,75,34,56,32,56}; //方法二排序 Arrays.sort(num); //循环输出 for(int i = 0;i < num.length;i++) { System.out.println(num[i]); } } }
12. 选择排序
-
概述
- 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引 处
-
思路分析
- 外循环控制大次
- 内循环控制小次
-
代码实现
/** * 选择排序 * @author 海锋 * */ public class Demo08_SelectionSort { public static void main(String[] args) { //创建数组 int[] num = {34,56,54,65,76,87,65}; for(int i = 0; i < num.length; i++) {//控制4大次 for(int j = i; j < num.length-1; j++) {//控制小次的次数 //升序排序 if(num[i] > num[j+1]) { int temp = num[i]; num[i] = num[j+1]; num[j+1] = temp; } } } //循环输出 for(int i = 0; i < num.length; i++) { System.out.println(num[i]); } } }
13. 杨辉三角
-
概念
- 第一列都为1
- 每一行最后一列值为1
- 从第三行、第二列开始,值= (上一行上一列的值) + (上一行当前列的值)
-
代码实现
int rows = 5; int[][] nums = new int[rows][]; //第一个一维数组长度为1 //第二个一维数组长度为2 //... for (int i = 1; i <= rows; i++) { nums[i-1] = new int[i]; } for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { // if (nums[i][j] != 0) { System.out.print(nums[i][j]+" "); // } } System.out.println(); } for (int i = 0; i < nums.length; i++) { //第一列为1 nums[i][0] = 1; //每一行的最后一列为1 nums[i][i] = 1; } for (int i = 2; i < nums.length; i++) { for (int j = 1; j < i; j++) {//控制列数 nums[i][j] = nums[i - 1][j-1] + nums[i-1][j]; } } for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { //if (nums[i][j] != 0) { System.out.print(nums[i][j]+" "); //} } System.out.println(); }
}
for (int i = 0; i < nums.length; i++) {
//第一列为1
nums[i][0] = 1;
//每一行的最后一列为1
nums[i][i] = 1;
}
for (int i = 2; i < nums.length; i++) {
for (int j = 1; j < i; j++) {//控制列数
nums[i][j] = nums[i - 1][j-1] + nums[i-1][j];
}
}
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
//if (nums[i][j] != 0) {
System.out.print(nums[i][j]+" ");
//}
}
System.out.println();
}