数组
1、什么是数组:
数组就相当于一个“盒子”,可以存放多个数据,但是得保证数据的类型一致
2、如何使用数组:
· 1>声明数组:
语法格式:数据类型[] 数组名 或者数据类型 数组名[]
比如:
int[] scores;
float[] heights;
String names[];
Object obs[];
注:此时的数组不能直接使用!!!
2>开辟空间:
如果数组类型为基本数据类型,byte short int long 默认开辟空间初始化的值都是0,float double 默认开辟空间初始化的值都是0.0。
如果数组类型为引用类型,那么默认开辟空间初始化的值都是null。这样的数组我们称为空数组。
初始化语法格式:new 数据类型[数组容量]
所谓的容量,就是内部存储数据的个数,一定要在初始化时给定,否则开辟的大小无法确定!
数组是一块连续的内存空间,数组名这个变量在栈区,引用的时new出来的真正的数组对象,在堆区。
3>为空数组赋值、取值:
只有当分配空间之后才能往数组中存放数据,数组中访问元素或者为元素赋值,都是通过下标完成的。
如果数组名[下标] 出现在= 左边此时代表赋值操作,出现在=右边或者单独出现,则代表取值。
并且数组下标从0开始,到数组长度 - 1。
语法格式 数组名[下标]
scores = new int[4];
heights = new float[5];
names = new String[3];
obs = new Object[3];
注:使用数组一定要注意数组越界的情况!!!
4> 如何对数组进行遍历:
遍历就是把一个数组或者集合通过下标遍历后显示出来。
for循环通常是与数组连用的,数组容量固定,for通常用于已知次数,所以循环初始值为0,最大到数组容量-1,
正好可以与数组下标对应
3、冒泡排序:
冒泡排序是一趟一趟的排序,在一趟中相邻两个数比较,如果前面的大于后面的,则交换位置,每一趟都可以得到当
趟中数值最大的数,最终形成有序数列。
趟数 次数
1 4
2 3
3 2
4 1
趟数+次数==元素个数
int[] nums = {18, 25, 6, 2, 54};
for (int i = 1; i < nums.length; i++) {
for (int j = 0; j < nums.length - i; j++) {
//前面大于后面换位置,升序;前面小于后面换位置,降序;
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(nums));
4、Arrays工具类
1>生成一个空数组,然后为其全部赋值为数字10
int[] arr = new int[10];
//哪个数组, 赋什么值
Arrays.fill(arr, 10);
2>如何打印数组
//把数组转换成一个字符串进行打印,数组内部元素中间以, 空格隔开
//想要打印的数组
System.out.println(Arrays.toString(arr));
练习:控制台输入出生年月日,输出这一天是当年的第几天。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入出生日期,以空格隔开:");
int year = scanner.nextInt();
int month = scanner.nextInt();
int day = scanner.nextInt();
//1 声明月份天数数组
int[] months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//2 通过闰年判断,改变二月份的月份天数
boolean is400 = year % 400 == 0;
boolean is4 = year % 4 == 0;
boolean is100 = year % 100 == 0;
if (is400 || (is4 && !is100)) {
months[1] = 29;
}
//3 将输入的月份之前所有月份的天数累加
int days = 0;
for (int i = 0; i < month - 1; i ++) {
days += months[i];
}
//4 再加上当月的天数即为总天数
days += day;
System.out.println(days);