Java SE从入门到放弃(六)之一维数组和二维数组
第一节:一维数组的使用
1. 数组的概述
1. 是数据结构中的一个概念,在数据结构中,叫做:顺序表。在Java中体现为:数组
* 2.数组,即为多个相同数据类型的数据按照一定顺序的组合。并使用一个变量进行统一的命名。
*
* 3.几个相关的概念
* > 数组名
* > 数组的元素
* > 数组的索引(数组的下标、角标)
* > 数组的长度
*
* 4.回忆:变量按照数据类型的分类:基本数据类型 (8种) 、 引用数据类型(类、数组、接口)
* > 数组,属于引用数据类型的变量;数组的元素,可以是基本数据类型,也可以是引用数据类型
* > 数组,不管是静态初始化,还是动态初始化,一旦初始化完成,其长度就是确定的!
* > 数组中的元素,都是依次紧密排列的。
* > 数组,一旦初始化,其长度就不可变。
*
* 5.数组的分类:
* >按照数组的元素的类型分:基本数据类型元素的数组 、 引用数据类型元素的数组
* >按照数组的维数来分:一维数组、二维数组、。。。。
2.数组的初始化
//1.1 数组的静态初始化:数组赋值操作与数组元素的赋值操作同时进行
int[] scores = new int[]{45,56,87,77};//声明+初始化
//1.2数组的动态初始化:数组赋值操作与数组元素的赋值操作分开进行
String[] names = new String[5];
//此外,正确的情况:
String foods[] = new String[10];
int[] sorts = {45,56,87,77}; //类型推断
//错误的:
//float[] f1 = new float[4]{1.2f,3.3f,3.4f,5.4f};
//float[5] f2 = new float[5];
//float[] f3 = new float[];
3. 数组元素的调用
//如何调用指定的数组元素:通过索引(或角标)的方式。
//数组的索引从0开始,到数组的长度 - 1结束
System.out.println(scores[0]);
System.out.println(scores[3]);
names[0] = "郭富城";
names[1] = "黎明";
//names[2] = 123;//编译不通过
System.out.println(names[0]);
4. 数组的长度
//数组的长度:数组中元素的个数
//使用length属性来获取数组的长度
System.out.println(scores.length);
System.out.println(names.length);
5. 遍历数组元素
for(int i = 0;i < scores.length;i++){
System.out.println(scores[i]);
}
//说明:
//如果遍历的元素的角标超出了数组的长度范围,则会报异常:ArrayIndexOutOfBoundsException
6. 数组元素的默认值
>数组元素的默认初始化值(在数组动态初始化之后,没有显式给数组元素赋值情况下的默认值)
* >整型的数组:byte\short\int\long 型数组的元素的默认值为: 0
* >浮点型的数组:float\double 型数组的元素的默认值为:0.0
* >布尔型的数组:boolean 型数组的元素的默认值为:false
* >字符型的数组:char 型数组的元素的默认值为:0或\u0000
*
* >引用数据类型的数组:数组的元素的默认值为:null
7. 一维数组的内存解析
Java内存的简图
Java内存结构的完整图
练习
8.课后练习
练习1:
/*
*
* 升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调、卫生间、厨房齐全。屋内均是IT行业人士,喜欢安静。
*
* 所以要求来租者最好是同行或者刚毕业的年轻人,爱干净、安静。
*
*/
public class ArrayTest {
public static void main(String[] args) {
int[] arr = new int[] { 8, 2, 1, 0, 3 };
int[] index = new int[] { 2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3 };
String tel = "";
for (int i = 0; i < index.length; i++) {
int value = index[i];
tel += arr[value];
}
System.out.println("联系方式:" + tel);//18...
}
}
练习2:
/*
* 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
*
*/
public class ArrayTest1 {
public static void main(String[] args) {
//1.实例化Scanner
Scanner scan = new Scanner(System.in);
//2.根据提示,从键盘输入学生人数
System.out.println("请输入学生人数:");
int count = scan.nextInt();
//3.根据学生人数,创建相应的数组。使用动态初始化
int[] scores = new int[count];
//4.通过for循环遍历的方式,给数组元素赋值
System.out.println("请输入" + count + "个学生成绩");
int maxScore = 0;
for(int i = 0;i < scores.length;i++){
scores[i] = scan.nextInt();
//5.获取数组元素的最大值:maxScore
//方式一
if(maxScore < scores[i]){
maxScore = scores[i];
}
//方式二:
//maxScore = (maxScore < scores[i])? scores[i]:maxScore;
}
//6.遍历数组元素,获取学生的成绩及等级,并输出
char grade;
for(int i = 0;i < scores.length;i++){
if(scores[i] >= maxScore - 10){
grade = 'A';
}else if(scores[i] >= maxScore - 20){
grade = 'B';
}else if(scores[i] >= maxScore - 30){
grade = 'C';
}else{
grade = 'D';
}
System.out.println("student " + i + " score is " + scores[i]
+ " grade is " + grade);
}
//scan.close();
}
}
第二节:二维数组
1. 二维数组的理解
数组,属于引用数据类型的变量;数组的元素,可以是基本数据类型,也可以是引用数据类型
* ---> 数组的元素,还可以是数组!
* ---->一维数组的元素,如果又是一维数组,则构成二维数组
* --->其实本没有二维数组,只不过是一维数组的元素,又是一个一维数组而已。
2. 初始化
//二维数组的初始化
//静态初始化:数组变量的赋值与数组元素的赋值操作同时进行。
int[][] arr1 = new int[][]{{1,2,3},{4,5},{7,8,9,10}};
//动态初始化:数组变量的赋值与数组元素的赋值操作分开进行。
//方式1:
String[][] arr2 = new String[5][10];
//方式2:
String[][] arr3 = new String[5][];
//正确的:
String arr4[][] = new String[5][6];
String[] arr5[] = new String[5][];
//错误的:
// String[] arr6[] = new String[][6];
// int[][] arr7 = new int[6][4]{{1,2,3},{4,5},{7,8,9,10}};
// String[5] arr6[3] = new String[][6];
3. 调用数组元素
System.out.println(arr1[0][0]);
System.out.println(arr1[2][2]);
//System.out.println(arr1[0]);
4. 数组的长度
System.out.println(arr2.length);//5
System.out.println(arr1.length);//3
System.out.println(arr2[0].length);//10
System.out.println(arr1[1].length);//2
5. 数组的遍历
for(int i = 0;i < arr1.length;i++){
for(int j = 0;j < arr1[i].length;j++){
System.out.print(arr1[i][j] + "\t");
}
System.out.println();
}
6. 数组元素的默认值
二维数组元素的默认初始化值(以动态初始化为例说明)
* 约定:对于二维数组来说,分为外层元素(比如:arr[0])和内层元素(比如:arr[0][1])
*
* 情况1:比如:int[][] arr = new int[4][3];
*
* > 外层元素默认存储的是:数组的类型和地址值
* > 内层元素,跟一维数组的元素的默认值是一致的。
* >整型的数组:byte\short\int\long 型数组的元素的默认值为: 0
* >浮点型的数组:float\double 型数组的元素的默认值为:0.0
* >布尔型的数组:boolean 型数组的元素的默认值为:false
* >字符型的数组:char 型数组的元素的默认值为:0或\u0000
*
* >引用数据类型的数组:数组的元素的默认值为:null
*
*
* 情况2:比如:int[][] arr = new int[4][];
* >外层元素的默认值为:null
* >内层元素:本身不存在。如果输出的话,报错,异常为:java.lang.NullPointerException
*
7. 内存解析
-
>字符型的数组:char 型数组的元素的默认值为:0或\u0000
-
>引用数据类型的数组:数组的元素的默认值为:null
-
情况2:比如:int[][] arr = new int[4][];
-
>外层元素的默认值为:null
-
>内层元素:本身不存在。如果输出的话,报错,异常为:java.lang.NullPointerException