数组,java数组

前面介绍的数组容纳的是一串数字,仿佛一根线把这组数字串了起来,故而它只是一维数组。一维数组用来表示简单的数列尚可,要是表达复杂的平面坐标系,那就力不从心了。由于平面坐标系存在水平和垂直两个方向,因此可用二维数组来保存平面坐标系上的一组坐标顶点,其中第一维是顶点队列,第二维是顶点的横纵坐标。许多个平面组合起来变成一幅动画,每个平面都构成动画的一个帧,这样就形成了三维数组。二维数组、三维数组,乃至更多维度的数组,统称为多维数组。多维数组全由一维数组扩展而来,它们的用法大同小异,因而只要学会如何使用二维数组,即可举一反三运用其他多维数组。下面就以二维数组为例,统一介绍多维数组的常见用法。
如同一维数组那样,二维数组也有两种声明形式,一种是在变量名称后面添加两对方括号,例如“double
triangle[][]”;另一种是在类型后面添加两对方括号,例如“int[][]
triangle”。前述的二维数组triangle表示平面坐标系上的三角形,其中第一对方括号表示这个三角形有几个顶点,第二对方括号表示每个顶点由几个坐标方向构成。
给二维数组分配存储空间也有三种方式,分别说明如下:
1、利用语句“new
变量类型[顶点数量][方向数量]”分配空间,比如三角形triangle有三个顶点,每个顶点由横纵两个坐标方向组成,则可通过下面这行语句实现:

数组,java数组


  数组是任何编程语言都具有的的数据结构。在java语言中,它是具有相同数据类型的有序的数据的集合,是一种引用数据类型。在数组中,每个变量称为数组元素,数组元素的数据类型可以是java的任何数据类型(包括基本类型和引用类型)。数组所包含的元素的个数称为数组的长度,由数组的数据成员length
表示。数组的长度在数组对象创建之后就固定了,不能再发生改变。数组元素的下标是相对于数组第一个元素的偏移量,所以第一个元素的下标为0,以此类推,下标值可以是一个整型常量也可以是十一个整型表达式,其取值范围为0~(数组长度-1)。

  数组可以将数组分为:一维数组和多维数组。


1.一维数组

  1.一维数组的声明

    在java语言中,通常可以使用两种方式声明一维数组,语法如下:

      数据类型[] 数组名;

    或

      数据类型 数组名[];

    注:1.数据类型可以是任何数据类型;如
double、int、char、boolean、类和String数组。

      2.数组名是合法的标识符

      3.方括号[]
表示定义的是一个数组,而不是普通的一个变量或对象,有几个[]就表示是几维数组。

      4.方括号[]
里面不能有数字。因为数组的长度不是在声明时指定的,而是在创建时由所开辟的内存单元数目确定的。

    声明数组类型的变量并没有真正的创建数组,只是给出了数组变量的名字和元素的数据类型,由于数组是引用数据类型,所以此时数组引用的值是null,表示没有指向堆内存的任何对象。

  2.一维数组的创建

    声明完数组后,要想真正的使用数组,还必须为数组分配内存空间,即创建数组(也叫做实例化数组)。创建数组使用关键字new
,语法如下:

      数组名 = new 数组类型[n];

  注:n 表示所创建的数组元素的个数。

  数组的声明和创建也可以采取下述语法格式一步完成。

    数据类型[] 数组名 = new 数据类型[n];

  或

    数据类型 数组名[] = new 数据类型[n];

   用new
关键字为一个数组分配内存空间后,系统将为每个数组元素赋予一个默认值,这个默认值取决于数组元素的类型。引用类型的数组在创建时元素的默认值为null。

  注:数组一旦创建后,其长度不能改变。

  3.一维数组的初始化

    数组的初始化就是不希望使用系统赋予的默认初始值,自行给数组元素赋初值。数组的初始化分为静态初始化和动态初始化两种。

    1.静态初始化

      静态初始化是指在定义数组的同时就为数组元素分配空间并赋值,这种方式通常于数组元素个数不多的情况,语法如下:

        数据类型[] 数组名 = {元素1,元素2,......,元素n};

      或

        数据类型 数组名[] = {元素1,元素2,......,元素n};

      上面的初始化中,虽然没有指定数组的长度,但给出了初值个数,这时,系统会自动根据所给的初值个数计算出数组的长度,并根据数据类型分配相应的空间。

    2.动态初始化

      动态初始化是指数组的声明与数组分配空间和赋值的操作分开进行。

        示例:

public class Test{ public static void main(String[] args){ int[] a = new int[5]; //初始化数组 for(int i = 0;i<a.length;i++){ a[i] = i; } //打印数组元素 for(int i = 0;i<a.length;i++){ System.out.println("a[ "+i+"]="+a[i]); } }}

  4.一维数组的使用

    当定义了一个一维数组,并用new运算符为其分配完内存空间后,就可以通过数组名和下标来引用数组中的每个元素了。一维数组元素引用的语法如下:

      数组名 [index];

    注:index表示数组元素的下标,是整型的常量或表达式,从0开始,取值范围0~(数组长度-1)

  示例:随机产生10个1~100的数字,并求出最大最小值

public class Test{ public static void main(String[] args){ int[] a = new int[10]; // for(int i = 0;i<a.length;i++){ a[i] = (int)(Math.random()*100)+1; } System.out.println("这十个随机数为:"); for(int i = 0;i<a.length;i++){ System.out.println(a[i]+" "); } System.out.println(); int max = a[0]; int min = a[0]; for(int i = 1;i<a.length;i++){ if(a[i]>max) max = a[i]; if(a[i]<min) min = a[i]; } System.out.println("max="+max); System.out.println("min="+min); }}

  注:Math类位于java.lang包下,可以直接使用,不需要导入。该类中包含用于执行基本数学运算的方法和常量,如初等指数、对数、平方根、三角函数和常量PI等。

  选择排序示例:

public class Test{ public static void selectSort(int[] b){ for(int i = 0;i<b.length;i++){ int k = i; //变量K用来保存数组中未排序元素值的最小的下标 for(int j = i+1;j<b.length;j++){ if(b[k]>b[j]){ k=j; } } if(k!=i){ int temp = b[i]; b[i] = b[k]; b[k] = temp; } } } public static void main(String args[]){ int[] a = {1,4,2,5,7,6,3,9,8}; //静态初始化数组 selectSort(a); //将数组A作为方法的参数,传递的实际是该数组对象的的句柄 for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } }}

 


 

2.多维数组

  java语言不支持多维数组,但是一个数组元素可以被声明为任何数据类型,因而其元素也可以是数组类型。多维数组可以看做是数组的数组。一二维数组为例,二维数组可看成是一个特殊的一维数组,其每个元素都是一个一维数组。

  1.二维数组的声明

    二维数组的声明方式和一维数组一样,也有两种方式,语法如下:

      数据类型[][] 数组名;

    或

      数据类型 数组名[][];

          注:1.数据类型可以是任何数据类型,包括基本类型和引用类型。

      2.数组名是合法的标识符。

      3.两个方括号 []
表明的是二维数组,前面的方括号表示行,后面的方括号表示列。

      4.两个方括号
[]里面不能有数字,因为数组的长度不是在声明时指定的。

  2.二维数组的创建

    声明二维数组类型的变量并没有真正创建二维数组,想要真正使用二维数组,还必须为其分配内存空间,即创建二维数组(也叫实例化二维数组)。创建二维数组的关键字new,语法如下:

      数组名 = new 数组类型[n][m];

    注:1.n 表示所创建的二维数组的行数

      2.m 表示所创建的二维数组的列数。

      3.n必须存在,m可以存在也可以不存在。

    二维数组的声明和创建也可以采取下述语法格式一步完成。

      数据类型[][] 数组名 = new 数据类型[n][m];

    或

      数据类型 数组名[][] =  new 数据类型[n][m];

  3.二维数组的初始化

    1.静态初始化

      静态初始化是指在定义二维数组时就为数组元素分配空间并赋值,这种方式通常用于数组元素个数不多的情况。

      对于静态初始化,不必给出二维数组每一堆的大小,系统会根据给出的初始值的个数自动计算出数组每一堆的大小。

    2.动态初始化

      动态初始化是指二维数组的声明与二维数组分配空间和赋值的操作分开进行。

  4.二维数组的使用

    语法如下:

      数组名[index1][index2];

   示例:

public class Test{ public static void main(String args[]){ int[][] a = {{2,3,7},{1,4,6}}; int[][] b = {{3,4,5,2},{2,7,1,6},{4,3,8,1}}; int[][] c = new int[2][4]; for(int i = 0;i<2;i++){ for(int j = 0;j<4;j++){ c[i][j] = 0; for(int k = 0;k<3;k++){ c[i][j] += a[i][k]*b[k][j]; } } System.out.println("矩阵A为:"); for(int i = 0;i<a.length;i++){ for(int j = 0;j<a[i].length;j++){ System.out.println(a[i][j]+" "); } System.out.println(); } System.out.println("矩阵B为:"); for(int i = 0;i<b.length;i++){ for(int j = 0;j<b[i].length;j++){ System.out.println(b[i][j]+" "); } System.out.println(); System.out.println("矩阵A与B的乘积C矩阵为:"); for(int i = 0;i<c.length;i++){ for(int j = 0;j<c[i].length;j++){ System.out.println(c[i][j]+" "); } System.out.println(); } }}

  


 

数组是任何编程语言都具有的的数据结构。在java语言中,它是具有相同数据类型的有序的数据的集合,是一种引用数据类型...

// 在两对方括号内分别填入数字,表示数组有多少行多少列triangle = new double[3][2];

2、在分配存储空间的时候立即对数组进行初始化赋值,此时方括号中间不填数字,而在方括号后面添加花括号,并且花括号内部是以逗号分隔的几个一维数组。此时初始化赋值的代码如下所示:

// 方括号内留空,然后紧跟花括号,花括号内部是以逗号分隔的几个一维数组double[][] triangle = new double[][]{new double[]{-2.0, 0.0},new double[]{0.0, -1.0},new double[]{2.0, 1.0}};

3、可见上面的第二种写法实在啰嗦,完全可以参照一维数组的简化写法,把多余的“new
double***”统统去掉,于是整个初始化代码精简如下:

// 赋值等号右边直接跟着花括号,花括号又内嵌好几个花括号分别表示对应的一维数组double[][] triangle = { {-2.0, 0.0}, {0.0, -1.0}, {2.0, 1.0} };

以上的赋值等号右边直接跟着花括号,花括号里面又有三组花括号,每组花括号分别容纳两个数字。这便告诉编译器:该二维数组需要分配三个顶点,并且每个顶点都有两个坐标方向。

若要获取二维数组里面的某个元素,可采取“数组名称[元素行号][元素列号]”的形式,表示当前操作的是第几行第几列的数组元素。与一维数组不同的是,对于二维数组来说,“数组名称.length”不能获得所有元素的数量,而是获得该数组的行数;要想获取某行的列数,则需通过“triangle[行号].length”来得到,把所有行的列数累加起来,才能求得该二维数组的元素个数。下面是声明一个浮点型的二维数组,并对每个数组元素赋值,最后遍历打印各元素的完整代码例子:

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。