一、数组
1、概念和声明
数组可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型。
- 定义一个double类型的数组:
double[] hens = {3, 5.1, 2, 4.6};
- 数组的长度:
hens.length
【C语言中:sizeof(arr) / sizeof(arr[0])
】
2、静态初始化
- 静态初始化(声明并初始化,此时不能指定容量):
int[] scores = new int[]{60,80,100,50,60,70};
- 【注意】虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素的具体内容,也可以自动推算出来长度。
- 省略格式:
int[] arr = {10, 20, 30}
3、动态初始化
- 动态初始化(先声明再初始化,此时必须指定容量):
int[] arr = new int[3]; arr[0] = 1; arr[1] = 2; arr[2] = 3;
double arr[] = new double[6];
Scanner input = new Scanner(System.in);
for(int i = 0; i < arr.length; i++){
System.out.println("请输入第" +(i+1) + "个元素的值");
arr[i] = input.nextDouble();
}
System.out.println("******************");
for(int i = 0; i < arr.length; i++){
System.out.println("第" + (i+1) + "个数组元素是:" + arr[i]);
}
数组在默认情况下是引用传递,赋的值是地址。
arr在栈中指向的是一块空间(堆)的地址
。- 数组中的元素存放在
堆区
。
4、访问数组元素进行赋值
【注意】静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成了大括号当中的具体数值。
5、数组空指针异常
数组必须进行new初始化才能使用其中的元素。如果只是赋值了一个null,没有进行new创建,那么将会发生空指针异常Null PointerException
- 如:int[] array = null; System.out.print(array[0]);
//printArray({1,2,3}); 没有这种语法。
//如果直接传递一个静态数组的话,语法必须这样写
printArray(new int[]{
1,2,3});
6、二维数组
1、二维数组的声明方式:类型[][] 数组名 = new 类型[大小] [大小]
、int[] y[]
、int y[][]
2、int [][] arr = new int[3][];
和C语言相反,C 语言中的二维数组必须指定列,行可以不确定。
- 上述只是创建了一个有3个一维数组,但是每一个一维数组还没有开辟数据空间。还需要
arr[i] = new int[i + 1];
给每一个一维数组开空间。 - 动态初始化,列数不确定。
//动态创建二维数组,每个一维数组的元素是不一样的。
public class TwoDimensionalArray{
public static void main(String[] args){
int[][] arr = new int[4][];
for(int i = 0; i < arr.length; i++){
//给每一个一维数组开辟空间 new
//如果没有给一维数组new,那么arr[i]就是null
arr[i] = new int[i + 1];
//遍历一维数组,并给一维数组中的每个元素赋值
for(int j = 0; j < arr[i].length; j++){
arr[i][j] = i + 1;
}
}
for(int i = 0; i < arr.length; i++){
//输出arr的每个一维数组
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
6-1.杨辉三角问题
//杨辉三角
public class YangHui{
public static void