数组的概述
1.理解:数组是多个相同数据类型按一定顺序排列的集合,并使用一个名字命名,
并通过编号的方式对这些数据进行统一管理。
2.数组的概念:
数组名
元素
角标、下标、索引
数组的长度:元素的个数
3.数组的特点
(1)数组是有序排列的
(2)数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型
(3)创建数组对象会在内存中开辟一整块连续的空间
(4)数组的长度一旦确定,就不能修改
4.数组的分类:
(1)按照维数:一维数组、二维数组…
(2)按照数组的元素类型,基本数据类型元素的数组、引用数组类型元素的数组
5.一位数组的使用
(1)一维数组的声明和初始化
(2)如何调用数组的指定位置的元素
(3)如何获取数组的长度
(4)如何遍历数组
(5)数组元素的默认初始化值(数组元素是整形都是0、浮点型是0.0、char型是 0 不是’0’、
boolean型是false、数组元素是引用数据类型时,默认为null,不是"null")
(6)数组的内存解析
public class ArrayTest {
public static void main(String[] args) {
//1.一维数组的声明和初始化
int num;//声明
num = 10;//初始化
int id = 1001; //声明+初始化
int[] ids;//声明
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[] {
1001,1002,1003,1004};
//动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
//总结:数组一旦初始化完成,其长度就确定了
//2.如何调用数组的指定位置的元素:通过角标的方式调用。
//数组的角标(索引)从0开始的,到数组的长度-1结束
names[0] = "小小";
names[1] = "小明";
names[2] = "小亮";
names[3] = "小付";
names[4] = "小华";
//names[5] = "错误"; 超过数组的角标
//3.如何获取数组的长度 属性:length
System.out.println(names.length);
System.out.println(ids.length);
//4.如何遍历数组
// System.out.println(names[0]);
// System.out.println(names[1]);
// System.out.println(names[2]);
// System.out.println(names[3]);
// System.out.println(names[4]);
for(int i = 0; i < names.length;i++) {
System.out.println(names[i]);
}
//5.数组元素的默认初始化值
int[] arr = new int[4];
for(int i = 0; i < arr.length;i++) {
System.out.println(arr[i]);
}
}
}
一维数组的练习:
从键盘输入五个学生成绩,最高分,与最高分差十分为A,二十为B,三十为C,其余为D
import java.util.Scanner;
public class ArrayDemo {
public static void main(String[] args) {
//1.使用Scanner,读取学生人数
Scanner scan = new Scanner(System.in);
System.out.println("请输入学生人数:");
int number = scan.nextInt();
//2.创建数组
int[] arr = new int[number];
//3.给数组元素赋值
System.out.println("请输入" + number + "的成绩");
for(int i = 0;i < arr.length;i++) {
arr[i] = scan.nextInt();
}
//4.获取数组中的最大值,最高分
int max = 0;
for(int i = 0;i < arr.length;i++) {
if(max < arr[i]) {
max = arr[i];
}
}
System.out.println("最高分:" + max);
//5.根据每个学生成绩与最高分的差值,得到每个学生的等级和成绩
char c;
for(int i = 0;i < arr.length;i++) {
if(max - arr[i] <= 10) {
c = 'A';
}else if(max - arr[i] <= 20) {
c = 'B';
}else if(max - arr[i] <= 30) {
c = 'c';
}else {
c = 'D';
}
System.out.println("学生" + i + "成绩是:" + arr[i] + " 等级是:" + c);
}
}
}
1.二维数组的理解:
对于二维数组我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在
其实,从数组底层的运行机制来看,其实没有多维数组
2.二维数组的使用:
(1)二维数组的声明和初始化
(2)如何调用数组的指定位置的元素
(3)如何获取数组的长度
(4)如何遍历数组
(5)数组元素的默认初始化值
(6)数组的内存解析
public class ArrayTest2 {
public static void main(String[] args) {
//(1)二维数组的声明和初始化
int[] arr1 = new int[] {
1,2,3}; //一维数组
//静态初始化
int[][] arr2 = new int[][] {
{
1,2,3},{
4,5},{
6,7,8}};
//动态初始化1
String[][] arr3 = new String[3][2];//标准
String[] arr6[] = new String[3][];//这样写也是正确的
//动态初始化2
String[][] arr4 = new String[3][];
// 错误的
// String[][] arr5 = new String[][3];
// String[3][4] arr4 = new String[][];
//(2)如何调用数组的指定位置的元素
System.out.println(arr2[0][2]);//3
System.out.println(arr3[1][1]);//null
arr4[1] = new String[4];
System.out.println(arr4[1][0]);
//(3)如何获取数组的长度
System.out.println(arr2.length); //3
System.out.println(arr2[0].length);//3
System.out.println(arr2[1].length);//2
//(4)如何遍历二维数组
for(int i = 0; i < arr2.length;i++) {
for(int j = 0;j < arr2[i].length;j++) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
//(5)数组元素的默认初始化值
int[][] arr = new int[4][3];
System.out.println(arr[0]); //地址值 [I@15db9742
System.out.println(arr[0][0]); //0
float[][] arr11 = new float[4][3];
System.out.println(arr11[0]); //地址值
System.out.println(arr11[0][0]);//0.0
String[][] arr12 = new String[4][3];
System.out.println(arr12[0]); //地址值
System.out.println(arr12[0][0]);//null
/*总结:比如int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值:与一维数组初始化情况相同
比如String[][] arr12 = new String[4][];
外层元素的初始化值为:null
内层元素的初始化值:不能调用,否则报错
*/
}
}
练习:int[][] { {3,5,8},{12,9},{7,0,6,4}};求和
public class ArrayDemo2 {
public static void main(String[] args) {
int arr[][] = new int[][] {
{
3,5,8},{
12,9},{
7,0,6,4}};
int sum = 0;
for(int i = 0;i < arr.length;i++) {
for(int j = 0;j < arr[i].length;j++) {
sum += arr[i][j];
}
}
System.out.println("总和:"+ sum);
}
}