数组
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);