一维数组的定义
1 数组的定义:
数组是用来存储数据的集合,通常把数组看作一个存储具有相同类型的变量集合会更有用。
2 声明数组变量
为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元素类型。下面是声明数组变量的语法:
elementType[]arrayRefVar;(元素类型[] 数组引用变量;)
elementType可以是任意数据类型,但是数组中所有的元素必须具有相同的数据类型。例如:下面的代码声明变量myList,他引用一个具有double型元素的数组。
double[]myList;
3 创建数组
不同于基本数据类型的变量声明,声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为null.除非数组已经被创建,否则不能给它分配任何元素。声明数组变量之后,可以使用下面的语法用new操作符创建新的数组,并且将它的一个引用赋给一个变量:
arrayRefVar=new elementType[arraySize];
这条语句做了两件事,第一件就是使用new elementType[arraySize]创建一个新的数组;第二就是把这个新创建的数组的引用赋值给变量arrayRefVar。
声明一个数组变量,创建数组,然后将数组引用赋值给变量这三个步骤可以合并在一条语句中,如下所示:
elementType[] arrayRefVar=new elementType[arraySize];
(元素类型 数组引用变量=new 元素类型【】数组大小];)
下面是使用这条语句的一个例子:
double[] myList=new double [10]
这条语句声明了数组变量myLIst,创建一个由10个double型元素构成的数组,并将该数组的引用赋值给myList。使用以下这些语法给这些元素赋值:
arrayFefVar[index]=value;
例如下面的代码初始化数组:
4 数组的大小和默认值
当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组的大小。创建数组之后就不能再修改它的大小。可以使用arrayRefVar.length得到数组的大小。例如:myList.length为10。
当创建数组后,它的元素被赋予默认值,数值型的基本数据类型的默认值为0,char型的默认值为‘\u0000’,boolean型的默认值为false。
5 访问数组元素
数组元素可以通过角标来访问。数组下标识基于0的,也就是说,其范围从0开始到arrayRefVar.length-1结束。
创建数组后,下标变量与正常变量的使用方法相同。例如:下面的代码是将myList[0]和myList[1]的值赋给myList[2]。
myList[2]=myList[0]+myList[1];
下面的循环是将0赋给myList[0],1赋给myList[1],…,9赋给myList[9]:
for(int i=0;i<myList.length;i++){
myList[i]=1;
}
6 数组初始化语法
Java有一个简捷的标记,称作数组初始化语法,它使用下面的语法将声明数组,创建数组和初始化数组结合到一条语句中:
elementype[] arrayRefVar ={ value 0, vlaue 1 , value 2…value k};
double[] maList={1.9, 2.9, 3.4 , 3.5};
这条语句声明,创建并初始化包含4个元素的数组myList,它等价于下列语句:
double[] myList=new double [4];
double[0]=1.9;
double[1]=2.9;
double[2]=3.4;
double[[3]=3.5;
7.处理数组
处理数组元素时,经常会用到for循环,理由有以下两点:
(1)数组中的元素都是同一类型的。可以使用循环以同样的方式反复处理这些元素。
(2)数组的大小是已知的。
假设创建如下的数组:
double [] myList=new double[10];
下面是处理这些数组的例子:
(使用输入值初始化数组)下面的循环使用用户输入的数值初始化数组myList。
java.util.Scanner input =new java.util.Scanner(System.in);
System.out.print("Enter " + myList.length + " values:”);
for (int i = 0;i < myList.length;i++)
myList[i]=input.nextDouble();
(使用随机数初始化数组)下面的循环使用0.0到100.0之间,但小于100.0的随机数值初始化数组myList。
for(int i=0;i<myList。length;i++){
myList[i]=Math.randon100
}
(显示数组)为了打印数组,必须使用类似下面的循环,打印数组中的每一个元素。
for(int i=0;i<myList。length;i++){
System.out.print(“myList[i]+” ”);
}
(对所有的元素求和)使用名为total的变量储存和。total的初始值为0.使用如下循环将数组中的每个元素都加到total中:
double total=0;
for(int i=0;i<myList.length;i++){
toyal +=myList[i];
(找出最大 的元素)使用名为Max的变量存储最大元素。将max的值初始化为myList[0].为了找出数组myList中的最大元素,将每个元素与max比较,如果该元素大于max则更新max。
double max=myList[0];
for(int i=0;i<myList.length;i++){
if(myList[i]>max) max=myList[i];
}
(找出最大元素的下标)经常需要找出数组中的最大元素,如果数组中含有多个最大的元素,那么找出最大元素的最小下标值。假设数组myList为{1,5,3,3,5,5}。最大元素为5,5的最小下标为1,使用名为max的变量存储最大元素,使用名为indexOfMax的变量表示最大元素的下标。将max的值初始化为myList[0],而将indexOfMax的值初始化为0.将myList中的每个元素与max比较,如果这个元素大于max,则更新max和indexOfMax。
double max=myList[0];
double indexOfMax=0;
for(int i=0;i<myList.length;i++){
if(myList[i]>max)
max=myList[i];
indexOfMax=i;
}
}
(随机打乱)在很多应用程序中,需要对数组中的元素进行任意的重新排序。称作打乱,为完成这种功能,针对每个元素myList[i],随意产生一个下标j,然后将myList[i]和myList[j]交换,如下所示:
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;
}
(移动元素)有时候需要向左或向右移动元素。这里的例子就是将元素向左移动一个位置并将第一个元素放在最后一个元素的位置上:
double temp =myList[0];
for(int i=1;i<myList.length;i++){
myList[i-1]=myList[i];
}
myList[myList.length-1]=temp;
(简化编码)对于某些任务来说,数组可以极大简化编码。例如,假设你想通过给定数字的月份来获得一个该月份的英文名字。如果月份名称保存在一个数组中,给定的月份可以简单通过下标获得。下面的代码提示用户输入一个月份的数字,然后显示他的月份名称:
String[] months={“January”,“February”,…“December”};
System.out.print(“Enter a month number(1 to 12):”);
int monthNumber=input.nextInt();
System.out.println("The month is "+ months[monthNumber-1]);
如果不使用months数组,不得不使用一个有很多分支if-else语句来确定月份名称,如下所示:
if(monthNumber1)
System.out.println(“The month is January”);
else if(monthNumber2)
System.out.println(“The month is February ”);
…
else
System.out.println System.out.println(“The month is December”);
示例学习:分析数字
读取100个数字,计算这些数的平均值并找到大于平均值的那些项的个数。为了更加灵活地处理任意数目的输入,我们让用户给出输入的个数,而不是将其固定为100。
public class AnalyzeNumbes{
public static void main (String[] args){
Scanner scanner =new Scanner(System.in);
System.out.print("输入数组的长度:");
int n=scanner.nextInt();
double []numbers=new double[n];
double sum=0;
System.out.print("Enter the numbers:");
for(int i=0;i<n;i++){
numbers[i]=input.nextDouble();
sum+=numbers[i];
}
double aver