一、数组的概述
-
1、数组(Array),是多个相同的类型数据按照一定顺序排序的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
-
2、数组的常见概念
-
数组名
-
下标(或索引)
-
元素
-
数组的长度:元素的个数
二、数组的特点
- 1.数组是有序排列的
- 2.数组属于引用数据类型变量,但数组的元素既可以是基本数据类型,也可以是引用数据类型。
- 3.创建数组对象会在内存中开辟一整块连续的空间。
- 4.数组长度一旦确定,就不能修改
三、数组分类
- 1.按照维数:一维数组、二维数组、三维数组…等等
- 2.按照数组的元素:基本数据类型的数组、引用数据类型元素的数组
四、一维数组的使用
/**
* 一维数组的使用和步骤:
* 1.一维数组的声明和初始化
* 2.如何调用数组的指定位置的元素
* 3.如何获取数组的长度
* 4.如何遍历数组
* 5.数组元素的默认初始化值
* 6.数组的内存解析
*/
public static void first() {
//1.一维数组的声明和初始化
int num;//声明
num = 10;//初始化
int num1 = 10;//声明+初始化
int[] ids;//声明
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001, 1002, 1003, 1004};
//动态初始化:数组的初始化和数组元素的赋值操作分开进行,也就是动态初始化没有赋值
String[] names = new String[5];
//总结:一旦数组初始化完,就确定了数组的长度!
//2.如何调用数组的指定位置的元素:通过角标的方法调用
//数组的角标(或索引)从0开始,到数组的长度减一结束
names[0] = "网名";
names[1] = "网名1";
names[2] = "网名2";
names[3] = "网名3";
names[4] = "网名4";
//3.如何获取数组的长度。
//属性:length
System.out.println(names.length);
System.out.println(ids.length);
//4.如何遍历数组
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
/**5.数组元素的初始化值
* 数组元素是整型:默认初始化值都 0
* 数组元素的浮点型:默认初始化为0.0
* 数组元素是char型;0或"/u0000,而不是'0'
* 数组元素是boolean型:默认值为false
*
*
* 数组数据类型是引用数据类型时:默认值为 null
*/
//数组元素是整型:默认初始化值都 0
int[] arr = new int[4];
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//数组元素的浮点型:默认初始化为0.0
float[] arr1 = new float[4];
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
//数组元素是char型
char[] arr2 = new char[4];
for (int i = 0; i < arr2.length; i++) {
System.out.println("----" + arr2[i] + "****");
}
//数组元素是boolean型:默认值为false
boolean[] arr3 = new boolean[5];
System.out.println(arr3[1]);
//数组数据类型是引用数据类型时i
String[] arr4 = new String[5];
System.out.println(arr4[1]);
if (arr4[1] == null) {
System.out.println("good");
}
//6.数组的内存解析
/**
* 栈:存放局部变量
* 堆:new出来的结构,对象和数组
*/
}
五、练习题
练习题:
1.升景坊单间短期出租4个月,550元/月(水电煤气公摊,网费35元),空调、卫生间、厨房齐全。房内均是IT人士,喜欢安静,所以要求来租着最高是同行
//习题1:
public static void tow() {
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++) {
tel += arr[index[i]];
}
System.out.println("电话为" + tel);
}
//!!!注意不要打,可以真的有这个人。
//模仿习题,利用数组输出自己的电话号码
//?是根据自己的电话号里面的数字,
//*是自己电话号数字里面数组的下标
public static void three() {
int[] arr = new int[]{?};
int[] index = new int[]{*};
String tel = "";
for (int i = 0; i < index.length; i++) {
tel += arr[index[i]];
}
System.out.println("电话为" + tel);
}
2.利用数组从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
public static void four() {
/**
* 过程:
* 1.使用Scanner,读取学生个数
* 2.创建数组,存储学生成绩,动态初始化
* 3.遍历数组,并赋值
* 4.获取数组中元素的最大值,排序
* 5.判断每个学生成绩与最高分差值,并输出等级和成绩
*/
//1.使用Scanner,读取学生个数
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生个数");
int number = scanner.nextInt();
// 2.创建数组,存储学生成绩,动态初始化
int[] scores = new int[number];
// 3.遍历数组,并赋值++ 排序
System.out.println("请输入" + number + "个学生成绩");
int maxscore = 0;
for (int i = 0; i < scores.length; i++) {
scores[i] = scanner.nextInt();
if (maxscore < scores[i]) {
//这个步骤就是第四步,因为我们发现都是遍历数组,多了一个比较大小而已,所以可以放在这里,提前的比较,从而节省我们的代码量。 maxscore = scores[i];
maxscore = scores[i];
}
}
// 4.获取数组中元素的最大值,排序
// for (int i = 0; i < scores.length; i++) {
// if (maxscore < scores[i]) {
// maxscore = scores[i];
// }
// }
// 5.判断每个学生成绩与最高分差值,并输出等级和成绩
char level;
for (int i=0;i<scores.length;i++){
if (maxscore-scores[i]<=10){
level='A';
}else if (maxscore-scores[i]<=20){
level='B';
}else if (maxscore-scores[i]<=30){
level='C';
}else {
level='D';
}
System.out.println("student" + i + "score is" + scores[i] + ",grage id" + level);
}
}