1、方法定义的位置?
2、当方法定义的返回值类型为double时,是否可以return 3?
3、什么叫递归?
数组是指存储多个相同类型的值的一组连续的空间。
特点:
- 类型相同
- 长度固定
- 连续空间
public class Demo01 {// 创建数组public static void main(String[] args) {int n;// 引用int [] arr; // 创建一组连续的空间,大小是5个int大小// 创建5个int空间大小,并将首地址赋值到arr中arr = new int[5];// 打印数组的地址(首地址)System.out.println(arr);}
}
数组由多个元素组成,通过数组的名称+下标来访问。可以理解为通过数组的首地址移动多少个(下标)类型单位来访问。
public class Demo02 {// 创建数组public static void main(String[] args) {// 引用int [] arr; // 创建一组连续的空间,大小是5个int大小// 创建5个int空间大小,并将首地址赋值到arr中arr = new int[5];// 赋值arr[0] = 5;arr[1] = 6;arr[2] = 8;arr[3] = 1;arr[4] = 3;// 取值System.out.println(arr[3]);// 下标越界(超出范围)// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5System.out.println(arr[5]);}
}
使用数组的length属性表示数组的长度。
public class Demo03 {// 生成10个随机数,保存后遍历public static void main(String[] args) {int [] arr = new int[8];Random random = new Random();// length属性表示数组的长度for (int i = 0; i < arr.length; i++) {// 赋值arr[i] = random.nextInt(100);}// 遍历for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}
public class Demo04 {// 数组的默认值public static void main(String[] args) {// 整数类型的数组,元素默认值为0byte [] arr1 = new byte[3];short [] arr2 = new short[3];int [] arr3 = new int[3];long [] arr4 = new long[3];// 小数类型的数组,元素默认值为0.0float [] arr5 = new float[3];double [] arr6 = new double[3];// 布尔类型的数组,元素默认值为falseboolean [] arr7 = new boolean[3];// char类型的数组,元素默认值为ascii码0 '\0'char [] arr8 = new char[3];System.out.println((int)arr8[0]);// 字符串类型的数组,元素默认值为nullString [] arr9 = new String[3];System.out.println(arr9[0]);String str1 = null;String str2 = "";int [] a = null;int [] b = new int[0];System.out.println(a.length);System.out.println(b.length);}
}
public class Demo05 {// 数组的创建语法public static void main(String[] args) {// 1、先声明,再分配空间,后赋值int [] arr1;arr1 = new int[3];arr1[0] = 5;// 2、声明并分配空间,后赋值int [] arr2 = new int[3];arr2[0] = 45;// 3、声明并赋值(复杂)int [] arr3 = new int[] {1,2,3,5};// 4、声明并赋值(简单)int [] arr4 = {1,2,3,5};// 5、先声明,后直接赋值int [] arr5;
// arr5 = {1,2,3,5}; // 报错,不能使用简单方式arr5 = new int[] {1,2,3,5}; // 只能使用复杂方式}
}
求平均数
public class Demo06 {public static void main(String[] args) {int [] arr = {23,15,18,90,7};double d = avg(arr);System.out.println("平均数为:" + d);}// 求数组的平均数public static double avg(int [] arr) {double sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum / arr.length;}
}
查找数字
public class Demo07 {public static void main(String[] args) {int [] arr = {23,15,18,90,7};Scanner input = new Scanner(System.in);System.out.println("请输入要查找的数字:");int num = input.nextInt();int index = indexOf(arr, num);System.out.println("下标为:" + index);}// 在数组中查找某个数字,并返回下标,不存在则返回-1public static int indexOf(int [] arr, int num) {for (int i = 0; i < arr.length; i++) {if(arr[i] == num) {return i;}}return -1;}
}
步骤:
- 创建一个新数组,大小为原数组大小+需要新添加的元素个数
- 将原数组的内容复制到新数组中
- 将需要添加的元素添加到新数组中
public class Demo08 {public static void main(String[] args) {int [] arr = {1,2,3,4,5};int num = 6;// 先创建一个新数组,长度是原数组的长度+需要添加的元素个数int [] arr1 = new int[arr.length + 1];// 复制原数组for (int i = 0; i < arr.length; i++) {arr1[i] = arr[i];}// 添加新元素arr1[arr.length] = num;}
}
将数组{1,2,3,4,5}与数组{6,7,8,9}拼接成一个新数组。
- 创建一个新数组,大小为原数组1大小+原数组2大小
- 将原数组1的内容复制到新数组中
- 将原数组2的内容复制到新数组中的后面
public class Demo09 {// 将数组{1,2,3,4,5}与数组{6,7,8,9}拼接成一个新数组public static void main(String[] args) {int [] arr1 = {1,2,3,4,5};int [] arr2 = {6,7,8,9};int [] newArr = new int[arr1.length + arr2.length];// 将arr1内容放入到newArr中for (int i = 0; i < arr1.length; i++) {newArr[i] = arr1[i];}// 将arr2内容放入到newArr中for (int i = 0; i < arr2.length; i++) {newArr[arr1.length + i] = arr2[i];}}
}
System.arraycopy(arr1, 0, newArr, 0, arr1.length);
参数介绍:
- 需要复制内容的数组(源数组)
- 源数组从第几个元素开始复制
- 目标数组
- 目标数组的从第几个元素开始存入
- 复制元素的个数
public class Demo10 {// 将数组{1,2,3,4,5}与数组{6,7,8,9}拼接成一个新数组// 使用System.arraycopy方法public static void main(String[] args) {int [] arr1 = {1,2,3,4,5};int [] arr2 = {6,7,8,9};int [] newArr = new int[arr1.length + arr2.length];// 将arr1内容放入到newArr中System.arraycopy(arr1, 0, newArr, 0, arr1.length);// 将arr2内容放入到newArr中System.arraycopy(arr2, 0, newArr, arr1.length, arr2.length);}
}
Arrays.copyOf(arr1, 2);返回一个新数组。
参数的描述:
- 需要复制的数组(源数组)
- 创建新数组的长度,如果超过arr1的长度,则后面的内容使用默认值,如果小于arr1的长度,则将arr1从0开始的部分元素复制
public class Demo11 {// 将数组{1,2,3,4,5}与数组{6,7,8,9}拼接成一个新数组// 使用Arrays.copyOf方法public static void main(String[] args) {int [] arr1 = {1,2,3,4,5};int [] arr2 = {6,7,8,9};// 将arr1内容复制并创建一个新数组newArrint [] newArr = Arrays.copyOf(arr1, 2);// 将arr2内容放入到newArr中System.arraycopy(arr2, 0, newArr, arr1.length, arr2.length);}
}
基本数据类型是值传递。值传递传的是值,传过去后对原变量没有影响。
其他数据类型是引用传递。传递后两个变量引用相同的地址,此时使用任何一个变量去改变地址上的内容,都会对另一个变量产生影响。
值传递:
public class Demo12 {public static void main(String[] args) {int n = 6;m1(n);System.out.println(n); // 6}public static void m1(int n) {n = 5;}
}
引用传递:
public class Demo12 {public static void main(String[] args) {int [] arr = {1,2,3,4,5};m2(arr);System.out.println(arr[0]); // 10}public static void m2(int [] arr) {arr[0] = 10;}
}
当方法中创建了新的数组,并且要在方法的外部使用该数组,此时就应该将该数组返回。
public class Demo13 {public static void main(String[] args) {int [] arr = {1,2,3,4,5};int num = 6;arr = add(arr, num);for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}public static int [] add(int [] a, int num) {// 先创建一个新数组,长度是原数组的长度+需要添加的元素个数int [] arr1 = new int[a.length + 1];for (int i = 0; i < a.length; i++) {arr1[i] = a[i];}arr1[a.length] = num;return arr1;}
}
可变长参数与数组的异同:
- 相同
- 都可以在方法中作为数组类型的参数
- 在方法中处理时都当作数组处理
- 区别
- 可变长参数只能作为方法的参数,而数组可以定义变量
- 可变长参数只能在方法的参数列表中的最后,而数组可以在任意位置
可变长参数好处是在调用时比较方便,不用创建数组传入,直接使用参数的方式传入,而且可以不传。
// 可变长参数
public class Demo14 {public static void main(String[] args) {m1(1, 2, 3);}public static void m1(int... arr) {for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}
数组排序是将一个数组内的元素按照指定的顺序排列。是一种常见的算法基础。
public class Demo01 {public static void main(String[] args) {int [] arr = {13, 50, 27, 12, 9, 48, 33, 25};// 循环轮次for (int i = 0; i < arr.length; i++) {boolean b = true;// 第一轮for (int j = 0; j < arr.length - i - 1; j++) {if(arr[j] > arr[j + 1]) {arr[j] = arr[j] ^ arr[j + 1];arr[j + 1] = arr[j] ^ arr[j + 1];arr[j] = arr[j] ^ arr[j + 1];b = false;}}// 如果在循环过程中,没有出现任何一个交换,表示整个数组有序,退出循环if(b) {break;}System.out.println(Arrays.toString(arr));}
// // 第一轮比较
// for (int j = 0; j < arr.length - 0 - 1; j++) {
// if(arr[j] > arr[j + 1]) {
// arr[j] = arr[j] ^ arr[j + 1];
// arr[j + 1] = arr[j] ^ arr[j + 1];
// arr[j] = arr[j] ^ arr[j + 1];
// }
// }
// System.out.println(Arrays.toString(arr));
//
// // 第二轮比较
// for (int j = 0; j < arr.length - 1 - 1; j++) {
// if(arr[j] > arr[j + 1]) {
// arr[j] = arr[j] ^ arr[j + 1];
// arr[j + 1] = arr[j] ^ arr[j + 1];
// arr[j] = arr[j] ^ arr[j + 1];
// }
// }
// System.out.println(Arrays.toString(arr));
//
// // 第三轮比较
// for (int j = 0; j < arr.length - 2 - 1; j++) {
// if(arr[j] > arr[j + 1]) {
// arr[j] = arr[j] ^ arr[j + 1];
// arr[j + 1] = arr[j] ^ arr[j + 1];
// arr[j] = arr[j] ^ arr[j + 1];
// }
// }
// System.out.println(Arrays.toString(arr));}
}
public class Demo02 {// 选择排序public static void main(String[] args) {int [] arr = {13, 50, 27, 12, 9, 48, 33, 25};for (int i = 0; i < arr.length; i++) {int index = i; // 把当前位置当作最小// 循环后面的元素,找到最小值for (int j = i + 1; j < arr.length; j++) {if(arr[j] < arr[index]) {index = j;}}// 如果最小值不在当前的位置,需要交换到当前位置if(index != i) {arr[i] = arr[i] ^ arr[index];arr[index] = arr[i] ^ arr[index];arr[i] = arr[i] ^ arr[index];}}System.out.println(Arrays.toString(arr));// // 第一轮选择
// int i = 0;
// int index = i;
// for (int j = i + 1; j < arr.length; j++) {
// if(arr[j] < arr[index]) {
// index = j;
// }
// }
// if(index != i) {
// arr[i] = arr[i] ^ arr[index];
// arr[index] = arr[i] ^ arr[index];
// arr[i] = arr[i] ^ arr[index];
// }
// System.out.println(Arrays.toString(arr));
//
// // 第二轮选择
// i = 1;
// index = i;
// for (int j = i + 1; j < arr.length; j++) {
// if(arr[j] < arr[index]) {
// index = j;
// }
// }
// if(index != i) {
// arr[i] = arr[i] ^ arr[index];
// arr[index] = arr[i] ^ arr[index];
// arr[i] = arr[i] ^ arr[index];
// }
// System.out.println(Arrays.toString(arr));
//
// // 第三轮选择
// i = 2;
// index = i;
// for (int j = i + 1; j < arr.length; j++) {
// if(arr[j] < arr[index]) {
// index = j;
// }
// }
// if(index != i) {
// arr[i] = arr[i] ^ arr[index];
// arr[index] = arr[i] ^ arr[index];
// arr[i] = arr[i] ^ arr[index];
// }
// System.out.println(Arrays.toString(arr));}
}
public class Demo03 {// 插入排序public static void main(String[] args) {int [] arr = {13, 10, 7, 8, 9, 48, 33, 25};// 每次循环是将当前轮次后面一个数字向前插入,所以次数要减一for (int i = 0; i < arr.length - 1; i++) {// 定义在外面是后面需要使用int j = i;// 得到当前轮次的后一个数字int num = arr[j + 1];for (; j >= 0; j--) {// 当前数字如果比要插入的数字大,就往后挪动if(arr[j] > num) {arr[j+1] = arr[j];// 否则停止循环,则当前位置即需要插入的位置}else {break;}}// 将当前插入的数字插入到相应的位置arr[j+1] = num;System.out.println(Arrays.toString(arr));}// // 第一轮
// int i = 0;
// int j = i;
// int num = arr[j + 1];
// for (; j >= 0; j--) {
// if(arr[j] > num) {
// arr[j+1] = arr[j];
// }
// }
// arr[j+1] = num;
// System.out.println(Arrays.toString(arr));
//
// // 第二轮
// i = 1;
// j = i;
// num = arr[j + 1];
// for (; j >= 0; j--) {
// if(arr[j] > num) {
// arr[j+1] = arr[j];
// }
// }
// arr[j+1] = num;
// System.out.println(Arrays.toString(arr));
//
// // 第三轮
// i = 2;
// j = i;
// num = arr[j + 1];
// for (; j >= 0; j--) {
// if(arr[j] > num) {
// arr[j+1] = arr[j];
// }else {
// break;
// }
// }
// arr[j+1] = num;
// System.out.println(Arrays.toString(arr));
//
// // 第四轮
// i = 3;
// j = i;
// num = arr[j + 1];
// for (; j >= 0; j--) {
// if(arr[j] > num) {
// arr[j+1] = arr[j];
// }else {
// break;
// }
// }
// arr[j+1] = num;
// System.out.println(Arrays.toString(arr));}
}
/*
杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*/
public class Demo06 {// 杨辉三角public static void main(String[] args) {int row = 10;int [][] arr = new int[row][];// 循环行,使用arr.lengthfor (int i = 0; i < arr.length; i++) {arr[i] = new int[i + 1];// 循环列,使用arr[i].lengthfor (int j = 0; j < arr[i].length; j++) {// 如果是第一列或最后一列if(j == 0 || j == arr[i].length - 1) {// 赋值为1arr[i][j] = 1;}else {// 赋值为上一行的同一列+上一行的前一列arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];}}}// 显示杨辉三角for (int i = 0; i < arr.length; i++) {// 循环列,使用arr[i].lengthfor (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + "\t");}System.out.println();}}
}
上一篇:类成员的方法
下一篇:数据结构之二叉树(上)