07-一维数组
-
7.1 引言
- 单个的数组变量可以引用一个大的数据集合。
-
7.2 数组的基础知识
一旦数组被创建,他的大小是固定的。使用一个数组引用变量和下标来访问数组中的元素。
- 7.2.1 声明数组变量
- 为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元素类型。下卖弄是声明数组变量的语法:
elementType[] arrayRefVar; //或者 elementType arrayRefVar[];//是允许这样的,但是不是最好的方式
- elementType可以是任意数据类型,但是数组中所有的元素都必须具有相同的数据类型。
- 也可以用elementType arrayRefVar[]声明数组变量。这种来自c/c++语言的风格被Java采纳以适用于c/c++程序员。推荐使用elementType[] arrayRefVar。
- 为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元素类型。下卖弄是声明数组变量的语法:
- 7.2.2 创建数组
- 不同于声明基本数据类型变量,声明一个数组变量时并不给数组分配任何内存空间。它只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为null。除非数组已经被创建,否则不能给他分配任何元素。声明数组变量之后,可以使用下面的语法用new操作符创建数组,并且将它的引用赋给一个变量:
arrayRefVar = new elementType[arraySize];
- 这条语句做了两件事:
- 1、使用new elementType[arraySize]创建了一个数组;
- 2、把这个新创建的数组的引用赋值给变量arraySize。
- 声明一个数组变量、创建数组、将数组引用赋值给变量这三个步骤可以合并在一条语句里。
elementType[] arrayRefVar = new elementType[arraySize]; //或者 elementType arrayRefVar[] = new elementType[arraySize];
- 一个数组变量看起来似乎是存储了一个数组,但实际上他存储的是指向数组的引用。严格的讲,一个数组变量和一个数组是不同的,但多数情况下他们的差别是可以忽略的。因此,为了简化,通常常可以说myList是一个数组,而不用更长的陈述:myList是一个含有double型元素数组的引用变量。
- 不同于声明基本数据类型变量,声明一个数组变量时并不给数组分配任何内存空间。它只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为null。除非数组已经被创建,否则不能给他分配任何元素。声明数组变量之后,可以使用下面的语法用new操作符创建数组,并且将它的引用赋给一个变量:
- 7.2.3 数组大小和默认值
- 当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组大小。创建数组之后就不能再修改它的大小了。可以使用arrayRefVar.length得到数组的大小。
- 当创建数组后,他的元素呗赋予默认值,数值型基本数据类型的默认值为0,char型的默认值为‘\u0000’,boolean型的默认值为false。
- 7.2.4 访问数组元素
- 数组元素可以通过下标访问。数组下标是基于0的,也就是说,其范围从0开始到arrayRefVar.length-1结束。数组中的每个元素都可以使用下面的语法表示,称为下标变量:
arrayRefVar[index];
- 数组元素可以通过下标访问。数组下标是基于0的,也就是说,其范围从0开始到arrayRefVar.length-1结束。数组中的每个元素都可以使用下面的语法表示,称为下标变量:
- 7.2.5 数组初始化简写方式
- Java有一个简捷的标记,称作数组初始化简写方式,他使用下面的语法将声明数组、创建数组和初始化数组结合到一条语句中:
elementType[] arrayRefVar = { value0,value1,...,valuek};
- 数组初始化简写方式中不使用操作符new。使用数组初始化简写方式时,必须将声明、创建和初始化数组都放在一条语句中。
- Java有一个简捷的标记,称作数组初始化简写方式,他使用下面的语法将声明数组、创建数组和初始化数组结合到一条语句中:
- 7.2.6 处理数组
- 处理数组元素时,经常会用到for循环,理由如下:
- 数组中所有元素都是同一类型的。可以使用循环以同样的方式反复处理这些元素。
- 由于数组的大小是已知的,所以很自然的就使用for循环。
- 1、使用输入值初始化数组
double[] myList = new double[4]; 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();
- 2、使用随机数初始化数组
for (int i = 0;i < myList.length;i++){ myList[i] = Math.random() * 100; }
- 3、显示数组
char[] city = { 'D','a','l','l','a','s'}; System.out.println(city);
- 4、对所有元素求和
double total = 0; for (int i = 0;i < myList.length;i++){ total += myList[i]; }
- 5、找出最大元素
double max = myList[0]; for (int i = 0;i < myList.length;i++){ if (myList[i] > max)max = myList[i]; }
- 6、找出最大元素的最小下标值
double max = myList[0]; int indexOfMax = 0; for (int i = 1;i < myList.length;i++){ max = myList[i]; indexOfMax = 1; }
- 7、随机打乱
for (int i = 0;i < myList.length - 1;i++){ int j = (int)(Math.random() * myList.length); 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;
- 9、简化编码
String[] months = { "January","Februry",....,"December"}; System.out.print("Enter a month number (1 to 12): "); int monthNumber = input.nextInt(); System.out.println("The month is " + months[monthNumber - 1]);
- 处理数组元素时,经常会用到for循环,理由如下:
- 7.2.7 foreach循环
- Java支持一个简便的for循环,称为foreach循环,即不使用下标变量就可以顺序的遍历整个数组。下面的代码就可以显示数组myList的所有元素:
for(double e : myList){
- Java支持一个简便的for循环,称为foreach循环,即不使用下标变量就可以顺序的遍历整个数组。下面的代码就可以显示数组myList的所有元素:
- 7.2.1 声明数组变量