数组

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