数组是相同类型数据的有序集合。
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中每一个数据称作一个数组元素,每个数组元素都可以通过一个下标来访问他们。
使用数组可以让我们的程序变的简单,避免定义多个重复的变量。
首先必须声明数组变量,才能在程序中使用该数组,下面是声明数组变量的语法:
Java语言使用new关键字来创建数组,语法如下:
dataType[] array = new dataType[size]; int[] nums = new int[10]; // 定义了一个长度为 10 的整型数组 // 给数组中的元素赋值 nums[0] = 1; nums[1] = 2; nums[2] = 3; nums[3] = 4; nums[4] = 5; nums[5] = 6; nums[6] = 7; nums[7] = 8; nums[8] = 9; nums[9] = 10; // 通过数组的下标来取值 System.out.println(nums[1]) // 输出:2数组的元素是通过索引来访问的,数组索引是从0开始的。
获取数组的长度:array.length
数组动态初始化:
int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 }
我们上面定义的数组都有一个特点:先给数组开辟内存空间,然后再用索引进行数据的赋值,这种做法就叫做:动态初始化。
如果数组在定义的时候就可以同时出现设置的数据内容,那么就可以采用静态初始化来完成。
格式: 数据类型 数组名称 = new 数据类型[] {值, 值,…}
如:
public class ArrayDemo { public static void main(String args[]) { int data[] = {1, 3, 4, 55, 11, 32, 121, 33}; // 静态初始化int型数组 for(int i = 0; i < data.length; i++) { System.out.println(data[i]); } } }数组属于引用数据类型,所以会发生引用传递。而引用传递的本质是:同一块堆内存空间可以被不同的栈内存所指向。
public class ArrayDemo02 { public static void main(String args[]) { int data[] = null; data = new int[3]; //开辟一个长度为3的数组 int temp[] = null; //声明int型数组对象:temp data[0] = 10; data[1] = 20; data[2] = 30; temp = data; //int temp[] = data; temp[0] = 99; for(int i = 0; i < temp.length; i++) { System.out.println(data[i]); } } }输出
elements:1,2,3,4,5,6
hold:1,2,3,4,5,6,4,3,2,1
在之前所使用的数组发现只需要一个索引就可以进行访问,那么这样的数组实际上非常像一个数据行的概念 。
现在痛过一个索引就可以取得唯一的一个记录。所以这样的数组可以简单理解为一维数组,而二维数组本质上指的是行列集合,也如果要确定某一个数据需要行索引和列索引来进行定位 。
那么对二维数组的定义有两种声明形式:
数组的动态初始化:数据类型 对象数组[][] = new 数据类型 [行个数] [列个数]; 数组的静态初始化:数据类型 对象数组[][] = new 数据类型 [行个数] [列个数]{{值, 值,…}, {值, 值,…},…};
int[][] arr2 = new int[][]{{10,20,30},{40,50,60},{70,80,90}};
在之前的课程中,我们也提到数组中可以放置基本数据类型和引用数据类型,尤其是数组中也可以放置数组。
语法:
三种形式: 数据类型[][] 数组名 数据类型 数组名[][] 数据类型[] 数组名[]示例:
int[][] arr; int arr[][]; int[] arr[];在学习二维数组的时候,我们需要知道二维数组存放的是什么样的数据; 如图: 想要保存该类数据,就需要使用二维数组了。 所以,我们可以将二维数组看做一个几行几列的表格这样一个形式。 如果我们想要表示上述表格中的数据,就可以采用如下的方式 语法:
数据类型[][] 数组名;//先声明一个数组 数组名 = new 数据类型[长度][长度];//对数组进行初始化 或 数据类型[][] 数组名 = new 数据类型[长度][长度];//对数组声明的同时进行初始化示例:
int[][] arr = new int[3][3]; //想要输出第三行第二列的数据: System.out.println("arr[2][1]"); //为第二行第三列的数据赋值为9: arr[1][2] = 9; // 创建float类型的数组,只指定行数 // 注意:只指定行数的写法是可行的,但只指定列数和全不指定的写法是错误的 float arr1 = new float[3][]; // 因为没有指定列数,对该数组取值会出现空指针错误 //System.out.println(arr1[0][0]); // 针对于该二维数组进行创建行 arr1[0] = new float[3];//第一行有三列,这样的写法可以指定每行有着不同的列 arr1[1] = new float[2];//第二行有二列 arr1[2] = new float[1];//第三行有一列 System.out.println(arr1[0][0]);//0.0 System.out.println(arr1[0][3]);//数组下标越界以上使用的属于动态的初始化创建,接下来我们来看看静态的初始化创建。 语法:
数据类型[][] 数组名 = {{x,,x,x},{x,x},{x,x,x,x},...,{x}};示例:
int[][] arr = {{1,2,3},{1,2,3},{1,2,3}};//三行三列的数组 或 int[][] arr = {{1},{1,2},{1,2,3}};//三行不同列的数组引用:
System.out.println(arr[0][1]);//arr数组第一行第二列的元素 System.out.println(arr.length);//arr数组的长度 System.out.println(arr[0].length);//arr数组第一行的长度 //循环输出二维数组的内容 for(int i = 0; i < arr.length; i++) { for(int t = 0; t < arr[i].length; t++) { System.out.println(arr[i][t]); } }一、选择
下列数组声明的语法格式不正确的是() C A. int[] array; B. int array[]; C. char[]; D. String[] strArray; 已知一个长度为10的数组b,数组b的第三个元素表示为? C A. b[3] B. b(3) C. b[2] D. b(2) 当数组下标越界时,会发生() ACD A. 系统崩溃 B. 直接跳过 C. 抛出异常 D. 中止程序 当程序发生异常时,程序会被系统的异常指令流停止运行 所以这道题应该是个多选题 下面代码的运行结果为:( A )A. 55,8,5, B. 5,8,55, C. 8,5,55 D. 5,8,55 下面代码的运行结果为:( D )A. 4 B. 12 C. 0 D. 13 下面程序的运行结果是? A A. 30 B. 60 C. 50 D. 20 以下关于二维数组创建对象的语法,错误的是?(多选) AD A. char[][] ch=new char[][] ; B. char ch[][]=new char[3][5]; C. char[] ch[]=new char[3][]; D. char[][] ch=new char[][5]; 下列哪个选项是给二维数组的第一行第一列的元素赋值的。 D A. sum[][] = 3; B. num[1][] = 3; C. num[1][1] = 3; D. sum[0][0] = 3; 以下代码的输出结果为 ? A A. 2 4 B. 3 4 C. 3 3 D. 4 4 System.out.print();//方法不换行显示 下列数组有几行几列( D )A. 三行五列 B. 五行五列 C. 三行三列 D. 五行三列二、编程
求数组中能被3整除的元素并打印输出。 数组内容:public class Opp4 { public static void main(String[] args) { //定义一个整型数组,并初始化 int arr[] ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //循环遍历数组,找出能被3整除的元素并打印输出 for(int i = 0; i < arr.length ; i++) if (arr[i] % 3 == 0){ System.out.println(nums[i]); } } } 在一个二维数组中存放了三名学生的语文和数学的成绩,分别求语文和数学的总成绩及平均分并输出。 public class Opp5 { public static void main(String[] args) { //定义一个三行两列的整型二维数组intArray int intArray[][] = new int[3][2]; //自定义并保存三个学生的语文与数学成绩 intArray[0][0] =(99); intArray[0][1] =(99); intArray[1][0] =(88); intArray[1][1] =(88); intArray[2][0] =(77); intArray[2][1] =(77); //求语文的总成绩和平均分 int Chinese = 0; double ChineseStr = 0; for(int i = 0;i < intArray.length; i++){ Chinese += intArray[i][0];//第i++行的第一列的成绩循环相加 } ChineseStr = Chinese / intArray.length; System.out.println("语文总分:" + Chinese); //语文总分:264 System.out.println("语文平均分:" + ChineseStr); //语文平均分:88.0 //求数学的总成绩和平均分 int Mathematics = 0; double MathematicsStr = 0; for(int i = 0;i < intArray.length; i++){ Mathematics += intArray[i][1];//第i++行的第二列的成绩循环相加 } MathematicsStr = Mathematics / intArray.length; System.out.println("数学总分:" + Mathematics); //数学总分:264 System.out.println("数学平均分:" + MathematicsStr); //数学平均分:88.0 } }