《Java语言程序设计(基础)》第七章 一维数组

数组的基础知识

在执行程序的过程中,经常需要存储大量的数据。Java和许多高级语言都提供了一种称作数组的数据结构,可以用它来存储一个元素个数固定且元素类型相同的有序集。一旦数组被创建,它的大小是固定的。使用一个数组引用变量,通过下标来访问数组中的元素。

声明数组变量

elementType[ ] arrayRefVar;  ( 元素类型[ ]  数组引用变量; )

elementType可以是任意数据类型,但是数组中的所有元素都必须具有相同的数据类型。

不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置。如果变量不包括对数组的引用,那么这个变量的值为null。除非数组已经被创建,否则不能给它分配任何的元素。

arrayRefVar = new elementType[arraySize];

这条语句做了两件事:1)使用new elementType[arraySize] 创建了一个数组;2)把这个新创建的数组的引用赋值给变量arrayReVar。

声明一个数组变量、创建数组、然后将数组引用赋值给变量这三个步骤可以合并在一条语句里,

elementType[ ] arrayRefVar = new elementType[arraySize]; 或 elementType arrayRefVar [ ]= new elementType[arraySize];

例如:double [ ] myList = new double[10];

这条语句声明了数组变量myList,创建了一个由10个double类型元素构成的数组,并将该数组的引用赋值给myList。

一个数组变量看起来似乎是存储了一个数组,但实际上它存储的是指向数组的引用。严格地讲,一个数组变量和一个数组是不同的,但多数情况下它们的差别是可以忽略的。因此,为了简化通常可以说myList就是一个数组。

数组的大小和默认值

当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组大小。创建数组之后就不能再修改它的大小。可以使用arrayRefVar.length得到数组的大小。当创建数组后,它的元素被赋予默认值,数值型基本数据类型的默认值为0,char型的默认值为 ‘ \0000 ’,boolean型的默认值为false。

访问数组元素

数组元素可以通过下标访问。其范围从0开始到arrayRefVar.length-1结束。数组中的每个元素都可以使用下面的语法表示,称为下标变量

arrayRefVar[index];

创建数组后,下标变量与正常变量的使用方法相同,例如:

myList[2] = myList [0] + myList [1] ;

数组初始化语法

Java有一个简捷的标记,称作为初始化语法,它使用下面的语法将声明数组、创建数组和初始化数组结合到一句语句中:

elementType [ ] arrayRefVar = { value0 ,value1 ,... ,valuek};

例如:double [ ] myList = {8 , 1 ,4 , 42};

处理数组

处理数组元素时,经常会用到for循环,理由有以下两点看:

1)数组中的所有元素都是同一类型的。可以使用循环以同样的方式反复处理这些元素。

2)由于数组的大小时已知的,所以很自然地使用for循环。

下面是一些处理数组的例子

1、使用输入值初始化数组

java.util.Scanner input = new java.util.Scanner(System.in);
System.out.pritln("Enter " + myList.length +" values: ");
for (int i = 0; i < myList.length; i++)
   myList[i] = input.nextDouble(); 

2、使用随机数初始化数组

for (int i = 0; i < myList.length; i++) {
    myList[i] = Math.random() * 100;
}

3、显示数组

for (int i = 0; i < myList.length; i++){
    System.out.print("myList[i]" + " ")
}

4、对所有元素求和

double total = 0 ;
for (int i = 0 ; i < myList.length; i++){
    total += myList[i];
}

5、找出最大元素

double max = myList[0];
for (int i = 1 ; i < myList.length; i++){
    if (myList[i] > max)
        max = myList[i];
}

6、找出最大元素的最小下标值

double max = myList[0];
int indexOf = 0;
for (int i = 1 ; i < myList.length; i++){
    if(myList[i] > max){
        max = myList[i];
        indexOfMax = i; 
}
}

7、随机打印

for(int i = myList.length - 1; i > 0; i--){
    int j = (int)(Math.random() * (i + 1));
    double temp = myList[i];
    myList[i] = myList[j];
    myList[j] = temp;
}

8、移动元素

double temp = myList[0];
for(int i = 1; i < myList.length; i++){
    myList[i - 1] = myList[i];
}
myList[myList.length-1] = temp;

数组的复制

要将一个数组中的内容复制到另外一个中,你需要将数组的每个元素复制到另外一个数组中。你可能会尝试使用赋值语句(=)

list2 = list1;

该语句并不能将list1引用的数组内容复制给list2,而只是将list1的引用值复制给了list2,在这条语句之后,list1和list2都指向同一个数组。list2原先所引用的数组就不能再引用,它就变成了垃圾,会被Java虚拟机自动收回。

在Java中,可以使用赋值语句复制基本数据类型的变量,但不能复制数组。将一个数组变量赋值给另一个数组变量,实际上是将一个数组的引用复制给另一个变量,使两个变量都指向相同的内存地址。

复制数组的有三种方法:

1)使用循环语句逐个地复制数组的元素。

int[] sourceArray = {2, 3, 5, 10};
int[] targetArray = new int [sourceArray.length];
for(int i = 0; i <sourceArray.length; i++){
    targetArray[i] = sourceArry[i];
}

2)使用System类中的静态方法arraycopy。

3)使用clone方法复制数组。

 将数组传递给方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值