解密数组
1.什么是数组?
先举个例子吧,当你去超市购物的时候,当你买了许多东西,你的第一反应是什么呢?我觉得是拿一个塑料袋将它们全部装进去,不过这个塑料袋比较特殊,他只能装同一类型的东西,装了苹果就不能装其他的,这个特殊的塑料袋我们可以看做是一个数组。
2.一维数组的定义格式
1.格式一: 数据类型[] 数组名;
int[] arr;
2.格式二: 数据类型 数组名;
int arr[];
3.一维数组的初始化
1.什么是初始化?
在堆内存中卫数组中的元素分配内存空间,并未=为数组中的每个元素赋值。
2.初始化的分类
- 静态初始化:定义好初始化的值,由系统决定数组的长度
静态初始化格式:
1.int[] arr=new int []{1,2,3};
2.int[] arr1={1,2,3,4};
- 动态初始化:给出数组的长度,由系统赋给默认值
动态初始化格式:
1.int[] arr=new int[10];
3.系统默认值
byte,short,int,long -- 0
float,double -- 0.0
char -- '\u0000'
boolean -- false
引用数据类型 -- null
4.一维数组的遍历
public class demo1 {
public static void main(String[] args) {
int[] arr={1,55,25,88};
for (int i = 0; i <arr.length ; i++) {
System.out.println(arr[i]);
}
}
}
5.堆,栈,方法区
1.堆
堆中主要存放的是new出来的对象,每创建一个数组,便在堆中new了一个对象,开辟了一块空间,一维数组中堆中存放的是数据的值,二维数组中存储的是一维数组的地址。
2.栈
栈中存放的是局部变量,当程序运行时,首先将main方法压栈,然后自上而下运行,当创建局部变量或调用方法时,入栈,当方法运行结束后,弹栈,
栈中还存放着在堆中new出来的对象的引用,指向堆中的对象,当main方法运行结束后,弹栈,堆中的对象则等待GC(垃圾处理器)回收。
3.方法区
存放的是Class对象,一系列常量池,常量。
6.数组常见异常
- ArrayIndexOutOfBoundsException:数组索引越界异常
访问了不存在的索引
-
NullPointerException:空指针异常
引用为空
7.二维数组
1.什么是二维数组?
二维数组其实就是一个特殊的一维数组,不过里面存储的每个元素为一维数组
2.二维数组的动态初始化
1. 数据类型 [][] 变量名 = new 数据类型[i][j];//推荐使用
2. 数据类型 数组名[][] = new 数据类型[m][n];
3. 数据类型[] 数组名[] = new 数据类型[m][n];
int[][] arr = new int[3][2];
int arr[][] = new int[3][2];
int[] arr[] = new int[3][2];
3.二维数组的静态初始化
1.数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}...};
2.数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};//建议使用
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{5,6},{7}};
8.二维数组的遍历
public class Demo2 {
public static void main(String[] args) {
int[][] arr={
{1,7,9,3,4},
{1,5,11,22},
{3,33,445,5}
};
for (int i = 0; i <arr.length ; i++) {
for (int j = 0; j <arr[i].length ; j++) {
System.out.println(arr[i][j]);
}
}
}
}
9.杨辉三角形
public class Demo3 {
public static void main(String[] args) {
int n=10;
int[][] arr=new int[n][n];
for (int i = 0; i <n; i++) {
arr[i][0]=arr[i][i]=1;
for (int j = 1; j <i; j++) {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
for (int i = 0; i <n ; i++) {
for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
10.递归
1.什么是递归?
在方法中调用方法本身称之为递归
2.递归需要注意什么?
1.递归要有出口,否则会产生死递归现象
2.递归次数不能太多,否则会栈溢出
3.阶乘
public class Demo4 {
public static void main(String[] args) {
System.out.println(jieCheng(5));
}
public static int jieCheng(int a)
{
if(a==1)
{
return 1;
}else {
return a*jieCheng(a-1);
}
}
}
4.不死神兔
public class Demo5 {
public static void main(String[] args) {
System.out.println(neverDieHabbit(20));
}
public static int neverDieHabbit(int month)
{
if(month==1||month==2)
{
return 1;
}else
{
return neverDieHabbit(month1)+neverDieHabbit(month-2);
}
}
}