学习java之day06
1.数组的概述
1.数组的理解:数组(Array),是多个相同类型数据按一定的顺序排列的集合,并使用一个名字命名, 并通过编号的方式对这些数据进行管理。
2.数组相关的概念: ①数组名 ②元素 ③下标 (角标、索引) ④数组的长度:数组的个数
3.数组的特点: 1)数组是有序排列的 2)数组是属于引用数据类型的变量。数组的元素,可以是基本数据类型,也可以是引用数据类型 3)创建数组会在内存中开辟一整块连续的空间 4)数组长度一旦确定,就不能修改。
4.数组的分类: ①按照维数分:一维数组、二维数组、...... ②按照数组的元素类型分:引用数据类型的数组、基本数据类型的数组
5.一维数组的使用: ①一维数组的声明与初始化 ②如何调用数组的指定位置的元素 ③如何获取数组的长度 ④如何遍历数组 ⑤数组的默认初始化值 :见ArrayTest1.java ⑥数组的内存解析:见ArrayTest1.java
public class ArrayTest {
public static void main(String[] args) {
// 1. 一维数组的声明和初始化
int num;// 声明
num = 10;// 初始化
int id = 1001;// 声明 + 初始化
int[] ids;// 声明
// 1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[] { 1001, 1002, 1003, 1004 };
// 1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
System.out.println(names[2]);// 默认值null
// 错误的写法:
// int[] arr1 = new int[];
// int[5] arr2 = new int[5];
// int[] arr3 = new int[3]{1,2,3};
// 也是正确的写法:
int[] arr4 = { 1, 2, 3, 4, 5 };// 类型推断
// 总结:数组一旦初始化完成,其长度就确定了。
// 2.如何调用数组的指定位置的元素:通过角标的方式调用。
// 数组的角标(或索引)从0开始的,到数组的长度-1结束。
names[0] = "王铭";
names[1] = "王赫";
names[2] = "张学良";
names[3] = "孙居龙";
names[4] = "王宏志";// charAt(0)
// names[5] = "周扬";
// 3.如何获取数组的长度。
// 属性:length
System.out.println(names.length);// 5
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]);
}
}
}
/*
* ⑤ 数组元素的默认初始化值
* > 数组元素是整型:0
* > 数组元素是浮点型:0.0
* > 数组元素是char型:0或'\u0000',而非'0'
* > 数组元素是boolean型:false
*
* > 数组元素是引用数据类型:null
*
* ⑥ 数组的内存解析
*/
public class ArrayTest1 {
public static void main(String[] args) {
//5.数组元素的默认初始化值
int[] arr = new int[4];
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("**********");
short[] arr1 = new short[4];
for(int i = 0;i < arr1.length;i++){
System.out.println(arr1[i]);
}
System.out.println("**********");
float[] arr2 = new float[5];
for(int i = 0;i < arr2.length;i++){
System.out.println(arr2[i]);
}
System.out.println("**********");
char[] arr3 = new char[4];
for(int i = 0;i < arr3.length;i++){
System.out.println("----" + arr3[i] + "****");
}
if(arr3[0] == 0){
System.out.println("你好!");
}
System.out.println("**********");
boolean[] arr4 = new boolean[5];
System.out.println(arr4[0]);
System.out.println("**********");
String[] arr5 = new String[5];
System.out.println(arr5[0]);
if(arr5[0] == null){
System.out.println("北京天气不错!");
}
}
}
2.维数组的使用
1.理解:
-
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
-
其实,从数组底层的运行机制来看,其实没有多维数组。
-
二维数组的使用:
-
-
① 二维数组的声明和初始化
-
② 如何调用数组的指定位置的元素
-
③ 如何获取数组的长度
-
④ 如何遍历数组
-
⑤ 数组元素的默认初始化值 :见 ArrayTest3.java
-
⑥ 数组的内存解析 :见 ArrayTest3.java
ublic class ArrayTest2 {
public static void main(String[] args) {
// 1.二维数组的声明和初始化
int[] arr = new int[] { 1, 2, 3 };// 一维数组
// 静态初始化
int[][] arr1 = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } };
// 动态初始化1
String[][] arr2 = new String[3][2];
// 动态初始化2
String[][] arr3 = new String[3][];
// 错误的情况
// String[][] arr4 = new String[][4];
// String[4][3] arr5 = new String[][];
// int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
// 也是正确的写法:
int[] arr4[] = new int[][] { { 1, 2, 3 }, { 4, 5, 9, 10 }, { 6, 7, 8 } };
int[] arr5[] = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } };
// 2.如何调用数组的指定位置的元素
System.out.println(arr1[0][1]);// 2
System.out.println(arr2[1][1]);// null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
// 3.获取数组的长度
System.out.println(arr4.length);// 3
System.out.println(arr4[0].length);// 3
System.out.println(arr4[1].length);// 4
// 4.如何遍历二维数组
for (int i = 0; i < arr4.length; i++) {
for (int j = 0; j < arr4[i].length; j++) {
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}
}
}
/*
* 二维数组的使用:
* 规定:二维数组分为外层数组的元素,内层数组的元素
* int[][] arr = new int[4][3];
* 外层元素:arr[0],arr[1]等
* 内层元素:arr[0][0],arr[1][2]等
*
* ⑤ 数组元素的默认初始化值
* 针对于初始化方式一:比如:int[][] arr = new int[4][3];
* 外层元素的初始化值为:地址值
* 内层元素的初始化值为:与一维数组初始化情况相同
*
* 针对于初始化方式二:比如:int[][] arr = new int[4][];
* 外层元素的初始化值为:null
* 内层元素的初始化值为:不能调用,否则报错。
*
* ⑥ 数组的内存解析
*
*/
public class ArrayTest3 {
public static void main(String[] args) {
int[][] arr = new int[4][3];
System.out.println(arr[0]);// [I@15db9742
System.out.println(arr[0][0]);// 0
// System.out.println(arr);//[[I@6d06d69c
System.out.println("*****************");
float[][] arr1 = new float[4][3];
System.out.println(arr1[0]);// 地址值
System.out.println(arr1[0][0]);// 0.0
System.out.println("*****************");
String[][] arr2 = new String[4][2];
System.out.println(arr2[1]);// 地址值
System.out.println(arr2[1][1]);// null
System.out.println("*****************");
double[][] arr3 = new double[4][];
System.out.println(arr3[1]);// null
// System.out.println(arr3[1][0]);//报错
}
}
3.练习
/*
* 2. 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
*
*/
public class ArrayDemo1 {
public static void main(String[] args) {
System.out.println("请输入学生的人数:");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
System.out.println("请输入" + number + "个学生的成绩");
int[] scores = new int[number];// 存放学生的成绩
for (int i = 0; i <= scores.length - 1; i++) {
scores[i] = scanner.nextInt();
}
// 找出谁的成绩最大
int max = 0;// 存放最大的值
for (int i = 0; i <= scores.length - 1; i++) {
if (max <= scores[i]) {
max = scores[i];
}
}
System.out.println("最大成绩为:" + max);
// 遍历学习的所有成绩,找出符合要求的等级
for (int i = 0; i <= scores.length - 1; i++) {
if (scores[i] >= max - 10) {
System.out.println("成绩为"+ scores[i]+"的等级为A");
} else if (scores[i] >= max - 20) {
System.out.println("成绩为"+ scores[i]+"的等级为B");
} else if (scores[i] >= max - 30) {
System.out.println("成绩为"+ scores[i]+"的等级为C");
}else {
System.out.println("成绩为"+ scores[i]+"的等级为D");
}
}
}
}
浙公网安备 33010602011771号