Java 数组
目录
1.Java 声明数组
通过之前的学习,我们认识了诸如int、char、double等基本数据类型,这一节我们将学习数组。
不知道大家有没有思考过,如果程序需要若干个类型相同的变量,比如需要8个int型变量,应该怎样办呢?按照之前学习的知识,我们可能声明8个int型变量:
int x1,x2,x3,x4,x5,x6,x7,x8;
但是,如果程序需要更多的int型变量,以这种方式来声明变量是不可取的,这就促使我们学习使用数组。数组是相同类型的变量按顺序组成的一种复合数据类型,即数组是一些类型相同的变量组成的集合,我们称这些相同类型的变量为数组的元素或单元。数组通过数组名加索引来使用数组的元素。
数组属于引用型变量,创建数组需要经过声明数组和为数组分配元素两个步骤,这一节我们主要学习如何声明数组。
声明数组包括数组变量的名字(简称数组名)、数组的类型。
1)声明一维数组有下列两种格式:
数组的元素类型 数组名[];
数组的元素类型 [] 数组名;
2)声明二维数组有下列两种格式:
数组的元素类型 数组名[][];
数组的元素类型 [][] 数组名;
例如:
float boy[];
char cat[][];
那么数组boy的元素都是float类型的变量,可以存放float型数据,数组cat的元素都是char型变量,可以存放char型数据。
可以一次声明多个数组,例如:
int [] a,b;
声明了两个int型一维数组a和b,等价的声明是:
int a[],b[];
需要特别注意的是:
int [] a,b[];
是声明了一个int型一维数组a和一个int型二维数组b,等价的声明是:
int a[],b[][];
注意:与C、C++不同,Java不允许在声明数组中的方括号内指定数组元素的个数,若声明:
int a[12];
或
int [12] a;
将导致语法错误。
2.Java 为数组分配元素
上一节我们提到创建数组需要经过声明数组和为数组分配元素两个步骤,这一节我们主要学习如何为数组分配元素。
声明数组仅仅是给出了数组变量的名字和元素的数据类型,要想真正地使用数组还必须创建数组,即为数组分配元素。
为数组分配元素的格式如下:
数组名 = new 数组元素的类型[数组元素的个数];
例如:
boy = new float[4];
为数组分配元素后,数组boy获得4个用来存放float类型数据的变量,即4个float型元素。数组变量boy中存放着这些元素的首地址,该地址称做数组的引用,这样数组就可以通过索引使用分配给它的变量,即操作它的元素。
数组属于引用型变量,数组变量中存放着数组的首元素的地址,通过数组变量的名字加索引使用数组的元素,比如:
boy[0] = 12;
boy[1] = 23.908F;
boy[2] = 100;
boy[3] = 10.23f;
声明数组和创建数组可以一起完成,例如:
float boy[] = new float[4];
二维数组和一维数组一样,在声明之后必须用new运算符为数组分配元素。例如:
int mytwo[][];
mytwo = new int [3][4];
或
int mytwo[][] = new int[3][4];
Java采用“数组的数组”声明多维数组,一个二维数组是由若干个一维数组构成的。例如,上述创建的二维数组mytwo就是由3个长度为4的一维数组mytwo[0]、mytwo[1]和mytwo[2]构成的。
构成二维数组的一维数组不必有相同的长度,在创建二维数组时可以分别指定构成该二维数组的一维数组的长度,例如:
int a[][] = new int[3][];
创建了一个二维数组a,a由3个一维数组a[0]、a[1]和a[2]构成,但它们的长度还没有确定,即还没有为这些一维数组分配元素,因此必须要创建a的3个一维数组,例如:
a[0] = new int[6];
a[1] = new int[12];
a[2] = new int[8];
注意:和C语言不同的是,Java允许使用int型变量的值指定数组的元素的个数,例如:
int size = 30;
double number[] = new double[size];
3.Java 数组的使用
1.元素的使用
通过前两节的学习,我们知道如何创建数组,这一节我们继续学习数组的使用。
一维数组通过索引符访问自己的元素,如boy[0],boy[1]等等。需要注意的是,索引从0开始,因此,数组若有7个元素,那么索引到6为止,如果程序使用了如下语句:
boy[7] = 384.98f;
程序可以编译通过,但运行时将发生ArrayIndexOutOfBoundsException异常,因此在使用数组时必须谨慎,防止索引越界。
二维数组也通过索引符访问自己的元素,如a[0][1],a[1][2]等等,需要注意的是,索引从0开始,比如声明创建了一个二维数组a:
int a[][] = new int[6][8];
那么第一个索引的变化范围从0到5,第二个索引变化范围从0到7。
2.长度的使用
数组的元素的个数称做数组的长度。对于一维数组,“数组名.length”的值就是数组中元素的个数;对于二维数组,“数组名.length”的值是它含有的一维数组的个数。
例如:
float a[] = new float[12];
int b[][] = new int[3][6];
a.length的值12,而b.length的值是3。
4.Java 一维数组
当数组中每个元素都只带有一个下标时,这种数组就是一维数组,一维数组是数组中最简单的一种数组。
1.一维数组的初始化
数组有两种初始化方式:动态初始化和静态初始化。
1)静态初始化
静态初始化就是在声明时就将数组赋值了,在后面直接调用。
静态初始化的方法如下:
数组类型 [] 名称 = new 类型{元素};
例如:
int [] Array = new int[]{1,2,3};
也可以先声明再初始化:
int [] Array;
Array = new int[]{1,2,3};
2)动态初始化
动态初始化就是先声明,在后面的语句中再逐个赋值。
动态初始化的方法如下:
int [] Array = new int[数组长度];
Array[0] = 1;
Array[1] = 2;
Array[2] = 3;
Array[3] = 4;
……
Array[数组长度-1] = n;
2.一维数组的长度
初始化后的数组,其长度是确定的。
静态初始化int [] Array = new int[]{1,2,3};花括号里有3个元素,所以Array的长度是3.
动态初始化int [] Array = new int[数组长度];如果[数组长度]里是3,Array就有3个元素,其数组长度就是3。
3.一维数组的调用
我们可以使用下标(角标)来调用数组。
1)静态初始化
int [] Array;
Array = new int[]{1,2,3};
System.out.println(Array[1]);
此时输出的是Array中的第二个元素,即输出2。
这时候就会有同学问:为什么明明是Array[1],却调用的是第二个元素呢?这是因为数组的下标是从0开始的,即Array[0]对应的是数组里的第一个元素,Array[1]对应的是数组里的第二个元素,以此类推。
2)动态初始化
动态初始化中第二个中括号里的数是数组长度,例如:
int [] Array = new int[3];
这样表示Array的数组长度是3,想调用第3个,下标就得是2:
System.out.println(int[2]);
注意:调用的数组元素不能超过数组长度。
例如:
int [] Array = new int[3];
System.out.println(int[3]);
此时表示的是输出Array数组的第4个元素,但Array的数组长度是3,即只有3个元素,所以会报错。
4.一维数组的遍历
我们可以使用循环语句来实现数组的遍历,例如:
for(int i=0;i<Array.length;i++) {
System.out.println(Array[i]);
}
需要注意的是,i从0开始是因为数组下标是从0开始的,数组的第一个元素下标是0,要把第一个元素包括进去,所以从0开始循环。
.length方法是数组长度,i<Array.length表示的是i的值小于Array的数组长度,在此条件下循环。
例如:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int [] arr1 = new int[]{1,3,5,7,9,11}; //静态初始化
System.out.println(arr1[1]); //输出arr的第二个元素:3
int [] arr2 = new int[5]; //动态初始化
Scanner scan = new Scanner(System.in);
System.out.println("请输入:");
for(int i=0;i<arr2.length;i++) { //将arr2逐个赋值
arr2[i] = scan.nextInt();
System.out.println(arr2[i]); //将arr2逐个输出
}
}
}
5.Java 二维数组
在Java中,二维数组被看作数组的数组,即二维数组是一个特殊的一维数组,二维数组的每个元素都是一个一维数组。
1.二维数组的定义
1)格式一:
元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][一维数组的长度];
int[][] arr = new int[3][2];
以上这种情况代表有3个一维数组,且每个一维数组有2个元素。
2)格式二:
元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][];
int[][] arr = new int[3][];
以上这种情况代表有3个一维数组,但每个一维数组的元素个数不确定,且每个一维数组的元素个数可以不一样。
3)格式三:
元素的数据类型[][] 数组的名字 = {{元素1,元素2,…},{元素1,元素2,…},…};
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
以上这种情况代表有3个一维数组,第一个一维数组中有3个元素,第二个一维数组中有2个元素,第三个一维数组中有4个元素,每个一维数组的元素个数可以不一样。
2.二维数组的声明
声明二维数组有下列两种格式:
数组的元素类型 数组名[][];
数组的元素类型 [][] 数组名;
例如:
char cat[][];
char [][] cat;
3.二维数组的初始化
二维数组的初始化同一维数组一样,有两种方式:动态初始化和静态初始化。
(1) 静态初始化
1)先声明再静态初始化
元素的数据类型[][] 二维数组名;
二维数组名 = new 元素的数据类型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
2)声明的同时静态初始化
元素的数据类型[][] 二维数组名 = new 元素的数据类型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
注意:右边“new 元素的数据类型[][]”中“[][]”中不能写数字,因为行数和列数由{}中的元素个数决定。
3)声明的同时静态初始化的简化写法
元素的数据类型[][] 二维数组名 = {{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
例如:
public class Main {
public static void main(String[] args) {
int[][] arr = {{1,2,3},{4,5},{6}}; //定义数组
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表示每个一维数组的元素有多少个,或者说每行有几个单元格。
此时创建完数组,行数列数确定,而且元素也都有默认值,再为元素赋新值:
二维数组名[行下标][列下标] = 值;
例如:
public class Main {
public static void main(String[] args) {
int[][] arr = new int[3][2];
/*
定义一个二维数组arr
这个二维数组有3个一维数组的元素
每个一维数组有2个元素
*/
System.out.println(arr); //输出二维数组名称
System.out.println(arr[0]); //输出二维数组的第一个元素一维数组的名称
System.out.println(arr[0][0]); //输出二维数组的元素
}
}
2)动态初始化二:不规则二维表
不规则二维表也就意味着每一行的列数可能不一样,其一般格式如下,首先确定总行数:
元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];
此时只是确定了总行数,每一行里面现在是null,然后再确定每一行的列数,创建每一行的一维数组:
二维数组名[行下标] = new 元素的数据类型[该行的总列数];
此时通过new的行的元素就有默认值,没有通过new的行还是null,最后为元素赋值:
二维数组名[行下标][列下标] = 值;
注意:不规则二维表,声明后,初始化内部一维数组时不能简写。
//不规则二维表定义二维数组
int[][] arr = new int[3][]; //3行,未知的列
//初始化二维数组内的元素值
arr[0] = new int[]{1}; //此处不能简写为arr[0] = {1}
arr[1] = new int[]{2,3};
arr[2] = new int[]{4,5,6};
4.二维数组的遍历
二维数组的遍历和一维数组一样,区别就是,首先要在外循环,遍历每个一维数组,其一般格式如下:
for(int i=0;i<二维数组名.length;i++) {
for(int j=0;j<二维数组名[i].length;j++) {
System.out.print(二维数组名[i][j]);
}
System.out.println();
}
原文地址:https://blog.csdn.net/xinfanyyds/article/details/145187801
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!