JAVA-数 组

来源:互联网 发布:上海java招聘 编辑:程序博客网 时间:2024/05/21 06:56

模块五  数 组

 

模块五  ... 1

1. 数组的声明... 2

2. 创建数组... 2

2.1. 创建原始类型数据数组... 2

2.2. 创建对象类型数据数组... 3

3. 初始化数组... 3

4. 多维数组... 4

5. 数组界限... 4

6. 拷贝数组... 5

7. 练习:  使用数组... 5

7.1. 基本数组的使用... 5

7.2. 数组的数组... 6

7.3. 检查你的进度... 6

 

 


本模块将描述Java编程语言中如何定义、初始化和使用数组。

完成本模块的学习后,你应该能够:

-           声明并创建原始数组、类数组及多维数组

-           解释为什么数组的元素需初始化

-           给出数组定义并初始化数组元素

-           确定一个数组中元素的数量

-          编写代码将数据从一个数组拷贝另一个数组

1.  数组的声明

数组是用来表示相同类型数据的,你可以声明任何类型的数组──原始类型或类类型:

char s ;

Point p[ ]; // where point is a class

Java编程语言中,无论数组元素由原始类型构成,还是由类构成,数组都是一个对象。声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。

上述这种将方括号置于变量名之后的声明数组的格式,是用于CC++Java编程语言的标准格式。这种格式会使声明的格式复杂难懂,因而,Java编程语言允许一种替代的格式,该格式中的方括号位于变量名的左边:

char s;

Point p;

这样的结果是,你可以认为类型部分在左,而变量名在右。上述两种格式并存,你可选择一种你习惯的方式。声明不指出数组的实际大小。

注意:当数组声明的方括号在左边时,该方括号可应用于所有位于其右的变量。

char s1   s2;     // s1s2都是字符数组。

char    s1 ],s2;        // s1是字符数组,s2是字符。

2. 创建数组

用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内--大于或等于0,并小于数组长度。任何访问在上述界限之外的数组元素的企图都会引起运行时出错。下面还要谈到一些更好的数组初始化方法。

2.1. 创建原始类型数据数组

    public int[] createIntArray()                       stack                     heap

{

 int[]                 

1

2

3

4

5

 

    int[] k=null;

k=new int[5];

    for(int I=0;I<k.length;I++)

    k[I]=I+1;

    return k;

}

 

 


                             createIntArray          k

                                                  this

                                      main

                          

                                         

你可以象创建对象一样,使用关键字new 创建一个数组。

           k = new int [5];

创建了一个5个int值的数组,

2.2. 创建对象类型数据数组

 

                                            

3.  初始化数组

当创建一个数组时,每个元素都被初始化。在上述char数组s的例子中,每个值都被初始化为0 (/u0000-null)字符;在数组p的例子中, 每个值都被初始化为null,表明它还未引用一个Point对象。在经过赋值 p[0] = new Point()之后,数组的第一个元素引用为实际Point对象。

 

    Java编程语言允许使用下列形式快速创建数组:

           String names [ ] = {

               “Georgianna”,

               “Jen”,

               “Simon”,

           };

其结果与下列代码等同:

           String names [ ] ;

           names = new String [3];

           names [0] = “Georgianna”;

           names [1] = “Jen”;

           names [2] = “Simon”;

这种速记法可用在任何元素类型。例如:

       MyDate Dates[ ] = {

           new MyDate (22,7,1964),

           new MyDate (1,1,2000),

           new MyDate (22,12,1964)

        };

适当的类类型的常数值也可被使用:

       Color palette  [ ] = {

           Color.blue,

           Color.red,

           Color.white

        };

4. 多维数组

Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组(和数组的数组的数组,等等)。一个二维数组(JAVA中没有二维数组的概念,二维数组其实就是数组的数组)如下例所示:

int twoDim [][] = new int [4][];

twoDim[0] = new int[5];

twoDim[1] = new int[5];

首次调用new而创建的对象是一个数组,它包含4个元素,每个元素对类型array of int的元素都是一个null引用并且必须将数组的每个元素分别初始化。

注意:

尽管声明的格式允许方括号在变量名左边或者右边,但此种灵活性不适用于数组句法的其它方面。

例如: new int [ ][4]是非法的。

 

因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组。也就是说,twoDim的元素可按如下方式初始化:

twoDim[0] = new int [2]

twoDim[1] = new int [4];

                  twoDim[2] = new int [6];

                  twoDim[3] = new int [8];

由于此种初始化的方法烦琐乏味,而且矩形数组的数组是最通用的形式,因而产生了一种速记方法来创建二维数组。例如:

            int twoDim [ ][ ]  =  new int [4][5];

可被用来创建一个每个数组有5个整数类型的4个数组的数组。

 

5. 数组界限

Java编程语言中,所有数组的下标都从0开始。 一个数组中元素的数量存储在length属性中; 这个值被用来检查所有运行时访问的界限。如果发生了一个越出界限的访问,那么运行时的报错也就出现了。

使用length属性的例子如下:

            int list [ ] = new int [10];

            for (int i= 0; i< list.length; i++){

                  System.out.println(list[i]);

           }

 使用length属性使得程序的维护变得更简单。

 

6. 拷贝数组

数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组:

          int myArray [ ] = new int [6];

          myArray = new int [10];

    在这种情况下,第一个数组被丢弃,除非对它的其它引用保留在其它地方。

 

Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy可作如下使用:

 

int myArray[] = { 1, 2, 3, 4, 5, 6 };            // original array

int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };    // new larger array

 

System.arraycopy(myArray, 0, hold, 0, myArray.length); // copy all of the myArray array to the hold

// array, starting with the 0th index

这时,数组hold有如下内容:1,2,3,4,5,6,4,3,2,1。

注意:如果数组保存的是基本类型的话直接把值拷贝过来。如果数组存放的是引用类型(类类型,数组类型(多维数组的拷贝)等),那么拷贝的是引用类型的地址。请看下面的例子:

class TestDArray

{

     public static void main(String[] args)

     {

         int [][] a=new int[5][];

         for(int i=0;i<a.length;i++)

              a[i]=new int[i+1];  //给数组的每个元素初始化大小

         for(int i=0;i<a.length;i++)

         {

              for(int j=0;j<a[i].length;j++)

                 { 

                      a[i][j]=i+j;

                 }

               

         }

         int[][] b=new int[a.length][];

         System.arraycopy(a,0,b,0,a.length);

         for(int i=0;i<b.length;i++)

         {

              for(int j=0;j<b[i].length;j++)

                 { 

                      b[i][j]=i+j;

                      System.out.print(b[i][j]);

                 }

                 System.out.println();

         }

     }

}

7.   练习:  使用数组

 

7.1.     基本数组的使用

1.          创建一个称作BasicArray的类,在...main()方法中声明两个变量,一个是thisArray,另一个是thatArray,它们应属类型array of int

2.          创建一个数组,它有10int值,范围从110。分配这个第三数组的引用给变量thisArray

3.          使用for()循环打印thisArray的所有值。如何控制循环的次数?

4.          编译并运行程序。多少值被打印?这些值是什么?

5.          对每个thisArray的元素,建立它的值为索引值的阶乘。打印数组的值。

6.          编译并运行程序。

7.          分配thisArray的引用给变量thatArray。打印thatArray的所有元素。

8.          编译并运行程序。tyatArray的多少值被显示?这些值是什么?它们来自何处。

9.          修改thisArray的某些元素,打印thatArray的值。

10.       编译并运行程序;在thatArray的值中,你注意到了什么?

11.       创建一个有20int值的数组。分配新数组的引用给变量thatArray,打印thatArray的值。

12.       编译并运行程序。每个数组有多少值被显示? 这些值是什么?

13.       拷贝thisArray的值给thatArray。你将使用什么方法调用? 你将如何限制拷贝元素的数量? thatArray的元素1019有什么变化?

14.       打印thatArray的值。

15.       编译并运行程序。你所显示的值都是正确的吗?如果不是,你知道有那些内容理解得不对吗?

16.       改变thatArray的某些值;打印thisArraythatArray

17.       编译并运行程序。这些值是你所期待的吗?

 

7.2.    数组的数组

1.    创建一个称作Array2D的类,在main()方法中声明一个称作twoD的变量,它应属类型array of array of int

2.    创建一个元素类型为int的数组,该数组应包括4个元素并被赋值到变量twoDelements[0]

3.    编写两个嵌套for()循环语句以打印twoD的全部值。以矩阵的格式安排输出 (可采用System.out.print()方法)

4.    编译并运行程序。 你应该能发现此时出现了运行错误(空指针异常) ,这是因为twoDelements[1] [3]未被初始化。

5.    分别创建包括5个、6个和7个元素的int数组,将这些数组的引用分别赋予twoDelements [1][2][3];确认完成上述操作的代码是在第3步所描述的嵌套for()循环之前插入的。

6.    编译并运行程序。这次你应该看到一个零值的非矩形布局。

7.    赋予twoD数组的每个元素一个明显的非零值(提示:使用Math.random() 以获得随机值)

8.    声明一个属类型array of int的称作oneD的变量。然后, 创建一个包括4个元素的int数组。将该数组的引用分别赋予数组array twoDoneD的第一个元素。赋值后,打印oneDtwoD数组。

9.    编译并运行程序。请注意通过打印oneD的值而显示的单个数组与twoD数组的元素是相同的。

 

7.3.   检查你的进度

      在进入下一模块之前,请确认你已经能够:

-           声明并创建原始数组、类数组或数组类型

-           解释为什么数组的元素需初始化

-           给出数组定义并初始化数组元素

-           确定一个数组中元素的数量

-           创建多维数组

-           编写从一个数组类型到另一个数组类型数组值的拷贝代码

 

 

 
原创粉丝点击