数组的入门

数组入门

数组的特点:

1、数组的长度一旦确定就不能修改

2、创建数组时会在内存中开辟一整块连续的空间。

3、存取元素的速度快,因为可以通过[下标],直接定位到任意一个元素。

数组的声明

//推荐
元素的数据类型[] 二维数组的名称;

//不推荐
元素的数据类型  二维数组名[];

静态初始化

int[] arr = new int[]{
    
    1,2,3,4,5};//正确

int[] arr;
arr = new int[]{
    
    1,2,3,4,5};//正确

int[] arr = new int[5]{
    
    1,2,3,4,5};//错误的,后面有{}指定元素列表,就不需要在[长度]指定长度。

动态初始化

 数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];

  或

 数组存储的数据类型[] 数组名字;
 数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[5];

int[] arr;
arr = new int[5];

二维数组

  • 二维数组:本质上就是元素为一维数组的一个数组。
  • 二维数组的标记:[][]
int[][] arr; //arr是一个二维数组,可以看成元素是int[]一维数组类型的一个数组

1、静态初始化

如果是静态初始化,右边new 数据类型[][]中不能写数字,因为行数和列数,由{}的元素个数决定

举例:

int[][] arr;
arr = new int[][]{ {1,2,3},{4,5,6},{7,8,9}};
arr = new int[3][3]{ {1,2,3},{4,5,6},{7,8,9}};//错误,静态初始化右边new 数据类型[]中不能写数字

int[][] arr = new int[][]{
   
   {1,2,3},{4,5,6},{7,8,9}};

int[][] arr = {
   
   {1,2,3},{4,5,6},{7,8,9}};//声明与初始化必须在一句完成
public static void main(String[] args) {
    
    
		//定义数组
		int[][] arr = {
    
    {
    
    1,2,3},{
    
    4,5},{
    
    6}};
		
	System.out.println(arr);
	System.out.println(arr[0]);
	System.out.println(arr[1]);
	System.out.println(arr[2]);
	
	System.out.println(arr[0][0]); //1
	System.out.println(arr[1][0]); //4
	System.out.println(arr[2][0]); //6
	
	System.out.println(arr[0][1]); //2
	System.out.println(arr[1][1]); //5
	//越界
	System.out.println(arr[2][1]); //错误
}

2、动态初始化(规则二维表:每一行的列数是相同的)

//(1)确定行数和列数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
	m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
	n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格

//此时创建完数组,行数、列数确定,而且元素也都有默认值

//(2)再为元素赋新值
二维数组名[行下标][列下标] = 值;
public static void main(String[] args) {
    
    
    //定义一个二维数组
    int[][] arr = new int[3][2];
    
    //定义了一个二维数组arr
    //这个二维数组有3个一维数组的元素
    //每一个一维数组有2个元素
    //输出二维数组名称
    System.out.println(arr); //地址值	[[I@175078b
    
    //输出二维数组的第一个元素一维数组的名称
    System.out.println(arr[0]); //地址值	[I@42552c
    System.out.println(arr[1]); //地址值	[I@e5bbd6
    System.out.println(arr[2]); //地址值	[I@8ee016
    
    //输出二维数组的元素
    System.out.println(arr[0][0]); //0
    System.out.println(arr[0][1]); //0
    
    //...
}	 

3、动态初始化(不规则:每一行的列数可能不一样)

//(1)先确定总行数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];

//此时只是确定了总行数,每一行里面现在是null

//(2)再确定每一行的列数,创建每一行的一维数组
二维数组名[行下标] = new 元素的数据类型[该行的总列数];

//此时已经new完的行的元素就有默认值了,没有new的行还是null

//(3)再为元素赋值
二维数组名[行下标][列下标] = 值;
public static void main(String[] args) {
    
    
		//定义数组
		int[][] arr = new int[3][];
        
        System.out.println(arr);	//[[I@175078b
        
        System.out.println(arr[1][0]);//NullPointerException
		System.out.println(arr[0]); //null
		System.out.println(arr[1]); //null
		System.out.println(arr[2]); //null
		
		//动态的为每一个一维数组分配空间
		arr[0] = new int[2];
		arr[1] = new int[3];
		arr[2] = new int[1];
		
		System.out.println(arr[0]); //[I@42552c
		System.out.println(arr[1]); //[I@e5bbd6
		System.out.println(arr[2]); //[I@8ee016
		
		System.out.println(arr[0][0]); //0
		System.out.println(arr[0][1]); //0
		//ArrayIndexOutOfBoundsException
		//System.out.println(arr[0][2]); //错误
		
		arr[1][0] = 100;
		arr[1][2] = 200;
	}

4,二维数组的相关名称及其表示方式

1)二维数组的长度/行数: 

​	二维数组名.length

(2)二维数组的某一行:

​	二维数组名[行下标]

​	行下标的范围:[0, 二维数组名.length-1]3)某一行的列数:

​	二维数组名[行下标].length

​       因为二维数组的每一行是一个一维数组

(4)某一个元素

​	二维数组名\[行下标\]\[列下标\]

二维数组的遍历

for(int i=0; i<二维数组名.length; i++){
    
    
    for(int j=0; j<二维数组名[i].length; j++){
    
    
        System.out.print(二维数组名[i][j]);
    }
    System.out.println();
}

对象数组

数组是用来存储一组数据的容器,一组基本数据类型的数据可以用数组装,那么一组对象也可以使用数组来装。

即数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用数据类型是,我们称为对象数组。

注意:对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建,数组的元素的默认值就是null,所以很容易出现空指针异常NullPointerException。

示例

(1)定义圆Circle类,包含radius半径属性,getArea()求面积方法,getPerimeter()求周长方法,String getInfo()返回圆对象的详细信息的方法

(2)在测试类中创建长度为5的Circle[]数组,用来装5个圆对象,并给5个圆对象的半径赋值为[1,10)的随机值

class Test16_ObjectArray{
    
    
	public static void main(String[] args){
    
    
		//要在数组中存储5个圆对象
		//声明一个可以用来存储圆对象的数组
		Circle[] arr = new Circle[5];
		//for(int i=0; i<arr.length; i++){
    
    
		//	System.out.println(arr[i]);
		//}
		//System.out.println(arr[0].radius);//NullPointerException
		
		//给元素赋值
		//元素的类型是:Circle,应该给它一个Circle的对象
		//arr[0] = 1.2;//错误的
		//arr[0]相当于它是一个Circle类型的变量,也是对象名,必须赋值为对象
		/*
		arr[0] =  new Circle();
		arr[0].radius = 1.2;
		System.out.println(arr[0].radius);
		*/
		
		//创建5个对象,半径随机赋值为[1,10)的随机值
		//Math.random()==>[0,1)
		//Math.random()*9==>[0,9)
		//Math.random()*9+1==>[1,10)
		for(int i=0; i<arr.length; i++){
    
    
			arr[i] = new Circle();//有对象才有半径
			arr[i].radius = Math.random()*9+1;
		}
		
		
		//遍历显示圆对象的信息
		for(int i=0; i<arr.length; i++){
    
    
			//arr[i]是一个Circle的对象,就可以调用Circle类中的属性和方法
			System.out.println(arr[i].getInfo());
		}
	}
}
class Circle{
    
    
	double radius;
	public double getArea(){
    
    
		return 3.14 * radius * radius;
	}
	public double getPerimeter(){
    
    
		return 3.14 * 2 * radius;
	}
	public String getInfo(){
    
    
		return "半径:" + radius +",面积:" + getArea() + ",周长:" + getPerimeter();
	}
}

Guess you like

Origin blog.csdn.net/weixin_45905210/article/details/121344217