java 数组
1. 数组介绍¶
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java
语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100]来代替直接声明 100 个独立变量 number0,number1,....,number99
。介绍 Java 数组的声明、创建和初始化,并给出其对应的代码。
数组是相同类型数据的有序集合.
- 相同类型的若干个数据,按照一定先后次序排列组合而成。
- 其中,每一个数据称作一个数组元素
- 每个数组元素可以通过一个下标来访问它们.
数组特点:
- 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组属引用类型
- length, elements of the array
数组是一个变量,存储相同数据类型的一组数据
- 声明一个变量就是在内存空间划出一块合适的空间
- 声明一个数组就是在内存空间划出一串连续的空间
2. 声明数组变量¶
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arraydata; // 首选的方法 或 dataType arraydata[]; // 效果相同,但不是首选方法
注意: 建议使用
dataType[] arraydata
的声明风格声明数组变量。dataType arraydata[]
风格是来自C/C++
语言 ,在Java中采用是为了让C/C++
程序员能够快速理解java语言。
3. 使用数组¶
-
- 声明数组
-
- 分配空间
-
- 赋值
-
- 处理数据
数组处理
1. int[ ] a; 2. a = new int[5]; 3. a [0] = 8; 4. a [0] = a[0] * 10;
3.1 声明数组¶
- 声明数组: 告诉计算机数据类型是什么
int[ ] score1; //Java成绩 int score2[ ]; //C#成绩 String[ ] name; //学生姓名
3.2 分配空间¶
分配空间: 告诉计算机分配几个连续的空间
score = new int[30]; avgAge = new int[6]; name = new String[30];
声明数组并分配空间
数据类型[ ] 数组名 = new 数据类型[大小] ;
3.3 数组赋值¶
赋值:向分配的格子里放数据
score[0] = 89; score[1] = 79; score[2] = 76;
- 方法1: 边声明边赋值
int[ ] score = {89, 79, 76}; int[ ] score = new int[ ]{89, 79, 76};
- 方法2:动态地从键盘录入信息并赋值
Scanner input = new Scanner(System.in); for(int i = 0; i < 30; i ++) { score[i] = input.nextInt(); }
3.4 处理数据¶
- 对数据进行处理:计算5位学生的平均分
code
/** * @author summer * @create 2020-01-27 16:35 */ public class number { public static void main(String[] args) { int [] score = {60,70,80,90,100}; double avg; avg = (score[0]+score[1]+score[2]+score[3]+score[4])/5; System.out.println("平均分是: "+avg); } } 或者 public class number { public static void main(String[] args) { int [] score = {60,70,80,90,100}; double avg = 0.0; int sum = 0; for (int i = 0; i <(score.length) ; i++) { sum += score[i]; } System.out.println("平均分是: "+(double)sum/score.length); } }
均分
import java.util.Scanner; /** * @author summer * @create 2020-01-27 16:35 */ public class number { public static void main(String[] args) { int[] score = new int[5]; int sum = 0; Scanner sc = new Scanner(System.in); System.out.println("请输入5位学员成绩: "); for (int i = 0; i <score.length ; i++) { score[i]=sc.nextInt(); sum += score[i]; } System.out.println("5位学员成绩平均分是:"+(double)sum/score.length); } } 运行过程 请输入5位学员成绩: 66 33 45 66 99 5位学员成绩平均分是:61.8
4. 多维数组¶
4.1 一维数组创建¶
一维数组的声明方式有两种:
int[] data; //type[] arr_name; int data[]; //type arr_name[]; 更多 double[] double_data; String[] PersonName; String[] StrArray;
- 创建数组
Java中使用关键字new 创建数组对象,创建基本数据类型一维数组对象演示
code
public class number { public static void main(String[] args) { int[] data = new int[10]; for (int i = 0; i <data.length ; i++) { data[i] = i*i; System.out.println(data[i]); } } } 运行结果 0 1 4 9 16 25 36 49 64 81
4.2 一维数组初始化¶
- 动态初始化
- 数组定义与为数组元素分配空间并赋值的操作分开进行
int a[] = null; a = new int[3]; a[0] = 3; a[1] = 9; a[2] = 8;
- 静态初始化
- 除了用new关键字来产生数组以外,还可以直接在定义数组的同时 就为数组元素分配空间并赋值。
格式: 类型 [] 数组名 = {元素1[, 元素2 ……]} int [] a = {1, 2, 3, 4, 5}; public class Test { public static void main(String args[]) { int [] a = { 3, 5, 7 }; } }
- 数组元素的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式 初始化。
默认初始化
int a[] = new int[2]; boolean[] b = new boolean[2]; String[] s = new String[2]; for (int i = 0; i < 2; i++) System.out.println(a[i]); for (int i = 0; i < 2; i++) System.out.println(b[i]); for (int i = 0; i < 2; i++) System.out.println(s[i]); 结果是 0 0 false false null null
4.3 数组的界限¶
- 定义并用运算符new为之分配空间后,才可以引用数组中的每个元素;
- 数组元素的引用方式:
arrayName[index]
index为数组元素下标,可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i]; 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 ~ n-1;
- 每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数);
数组的长度: 数组名.length
- 起点和终点
起点: 数组名[0] 终点: 数组名[length-1]
int[] i = {4, 56, 78, 9, 34}; i.length -> 5 i[0] -> 4 i[length-1]=i[4] -> 34 i[a] 若a>4 则???
5. 二维数组¶
int [][] a = {{1,2},{3,4,0,9},{5,6,7}};
i\j | j=0 | j=1 | j=2 | j=3 |
---|---|---|---|---|
i=0 | 1 | 2 | ||
i=1 | 3 | 4 | 0 | 9 |
i=2 | 5 | 6 | 7 |
二维数组可以看成以数组为元素的数组。例如:
int [][] a= {{1,2},{3,4,5,6},{7,8,9}};
Java**中多维数组的声明**和初始化应按从高维到,低维的顺序进行,例如:
int [][] a= new int[3][]; a[0] = new int[2]; a[1] = new int[4]; a[2] = new int[3]; int t1[][] = new int[][4]; //非法