一维数组的使用
一维数组的声明
格式:
//推荐 元素的数据类型[] 一维数组的名称; //不推荐 元素的数据类型 一维数组名[];
举例:
int[] arr; int arr1[]; double[] arr2; String[] arr3; //引用类型变量数组
数组的声明,需要明确:
(1)数组的维度:在Java中数组的符号是[],[]表示一维,[][]表示二维。
(2)数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的Java的数据类型。例如:int、String、Student等。
(3)数组名:就是代表某个数组的标识符,数组名其实也是变量名,按照变量的命名规范来命名。数组名是个引用数据类型的变量,因为它代表一组数据。
举例:
public class ArrayTest1 { public static void main(String[] args) { //比如,要存储一个小组的成绩 int[] scores; int grades[]; // System.out.println(scores);//未初始化不能使用 //比如,要存储一组字母 char[] letters; //比如,要存储一组姓名 String[] names; //比如,要存储一组价格 double[] prices; } }
注意:Java语言中声明数组时不能指定其长度(数组中元素的个数)。 例如: int a[5]; //非法
一维数组的初始化
静态初始化
如果数组变量的初始化和数组元素的赋值操作同时进行,那就称为静态初始化。
静态初始化,本质是用静态数据(编译时已知)为数组初始化。此时数组的长度由静态数据的个数决定。
一维数组声明和静态初始化格式1:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...}; 或 数据类型[] 数组名; 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组实体。
例如,定义存储1,2,3,4,5整数的数组容器。
int[] arr = new int[]{1,2,3,4,5};//正确 //或 int[] arr; arr = new int[]{1,2,3,4,5};//正确
一维数组声明和静态初始化格式2:
数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写
例如,定义存储1,2,3,4,5整数的数组容器
int[] arr = {1,2,3,4,5};//正确 int[] arr; arr = {1,2,3,4,5};//错误
举例:
public class ArrayTest2 { public static void main(String[] args) { int[] arr = {1,2,3,4,5};//右边不需要写new int[] int[] nums; nums = new int[]{10,20,30,40}; //声明和初始化在两个语句完成,就不能使用new int[] char[] word = {'h','e','l','l','o'}; String[] heros = {"袁隆平","邓稼先","钱学森"}; System.out.println("arr数组:" + arr);//arr数组:[I@1b6d3586 System.out.println("nums数组:" + nums);//nums数组:[I@4554617c System.out.println("word数组:" + word);//word数组:[C@74a14482 System.out.println("heros数组:" + heros);//heros数组:[Ljava.lang.String;@1540e19d } }
动态初始化
数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。
动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。
格式:
数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度]; 或 数组存储的数据类型[] 数组名字; 数组名字 = new 数组存储的数据类型[长度];
[长度]:数组的长度,表示数组容器中可以最多存储多少个元素。
注意:数组有定长特性,长度一旦指定,不可更改。和水杯道理相同,买了一个2升的水杯,总容量就是2升是固定的。
举例1:正确写法
int[] arr = new int[5]; int[] arr; arr = new int[5];
举例2:错误写法
int[] arr = new int[5]{1,2,3,4,5};//错误的,后面有{}指定元素列表,就不需要在[]中指定元素个数了。
一维数组的使用
数组的长度
数组的元素总个数,即数组的长度
每个数组都有一个属性length指明它的长度,例如:arr.length 指明数组arr的长度(即元素个数)
每个数组都具有长度,而且一旦初始化,其长度就是确定,且是不可变的。
数组元素的引用
如何表示数组中的一个元素?
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)或下标
,可以通过数组的索引/下标访问到数组中的元素。
数组名[索引/下标]
数组的下标范围?
Java中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
举例
public class ArrayTest3 { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; System.out.println("arr数组的长度:" + arr.length); System.out.println("arr数组的第1个元素:" + arr[0]);//下标从0开始 System.out.println("arr数组的第2个元素:" + arr[1]); System.out.println("arr数组的第3个元素:" + arr[2]); System.out.println("arr数组的第4个元素:" + arr[3]); System.out.println("arr数组的第5个元素:" + arr[4]); //修改第1个元素的值 //此处arr[0]相当于一个int类型的变量 arr[0] = 100; System.out.println("arr数组的第1个元素:" + arr[0]); } }
一维数组的遍历
将数组中的每个元素分别获取出来,就是遍历
。for循环与数组的遍历是绝配。
举例1
public class ArrayTest4 { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5}; //打印数组的属性,输出结果是5 System.out.println("数组的长度:" + arr.length); //遍历输出数组中的元素 System.out.println("数组的元素有:"); for(int i=0; i<arr.length; i++){ System.out.println(arr[i]); } } }
举例2
public class ArrayTest5 { public static void main(String[] args) { int[] arr = new int[5]; System.out.println("arr数组的长度:" + arr.length); System.out.print("存储数据到arr数组之前:["); for (int i = 0; i < arr.length; i++) { if(i==0){ System.out.print(arr[i]); }else{ System.out.print("," + arr[i]); } } System.out.println("]"); //初始化 /* arr[0] = 2; arr[1] = 4; arr[2] = 6; arr[3] = 8; arr[4] = 10; */ for (int i = 0; i < arr.length; i++) { arr[i] = (i+1) * 2; } System.out.print("存储数据到arr数组之后:["); for (int i = 0; i < arr.length; i++) { if(i==0){ System.out.print(arr[i]); }else{ System.out.print("," + arr[i]); } } System.out.println("]"); } }
数组元素的默认值
数组是引用类型,当我们使用动态初始化方式创建数组时,元素值只是默认值。例如:
public class ArrayTest6 { public static void main(String argv[]){ int a[]= new int[5]; System.out.println(a[3]); //a[3]的默认值为0 } }
对于基本数据类型而言,默认初始化值各有不同。
对于引用数据类型而言,默认初始化值为null(注意与0不同!)
public class ArrayTest7 { public static void main(String[] args) { //存储26个字母 char[] letters = new char[26]; System.out.println("letters数组的长度:" + letters.length); System.out.print("存储字母到letters数组之前:["); for (int i = 0; i < letters.length; i++) { if(i==0){ System.out.print(letters[i]); }else{ System.out.print("," + letters[i]); } } System.out.println("]"); //存储5个姓名 String[] names = new String[5]; System.out.println("names数组的长度:" + names.length); System.out.print("存储姓名到names数组之前:["); for (int i = 0; i < names.length; i++) { if(i==0){ System.out.print(names[i]); }else{ System.out.print("," + names[i]); } } System.out.println("]"); } }