Java入门到精通:第八课 数组

一、数组概述

1、数组的解释:可以存储同种数据类型的多个值的一种容器

2、注意:

(1)存储数据时,需要结合隐式转换:

(2)建议:容器的类型,和存储的数据类型保持一致

二、数组的定义

1、格式:

2、数组的静态初始化

3、数组的动态初始化

4、数组的静态初始化和数组的静态初始化的区别:

示例代码:

package com.camellia.demo1.ArrayDemo;

public class ArrayDemo4 {
    public static void main (String args[]) {
        /*定义一个数组,用来存储班级中50个学生的姓名
         *姓名未知,等学生报道之后,再进行添加。
         */

        //格式:
        //数据类型[] 数组名 = new 数据类型 [数组长度];
        //创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值

        String[] arr1 = new String[50];
        //添加学生
        arr1[0] = "张三";
        arr1[1] = "李四";
        //获取
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);

        //数组,默认初始化值的规律
        //整数类型 :0
        //小数类型 :0.0
        //字符类型 :/u0000 
        //布尔类型 :false
        //引用数据类型 :null
        int[] arr2 = new int[3];
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);

    }
}

运算结果:

5、数组的地址值 :表示数值在内存中的位置

代码:

package com.camellia.demo1.ArrayDemo;

public class ArrayDemo1 {
    public static void main(String[] args) {
        //格式
        //静态初始化
        //完整格式
        //数据类型 [] 数组名  = new 数据类型[]{元素1,元素2,元素3...}
        //简化格式:
        //数据类型 数组名 [] = {元素1,元素2,元素3...}

        //1.定义数组存储5个学生的年龄
        int[] arr1 = new int[]{12,13,14,15,16};
        int[] arr2 = {12,13,14,15,16};
        //2.定义数组存储3个学生的姓名
        String[] arr3 = new String[]{"张三","李四","王五"};
        String[] arr4 = {"张三","李四","王五"};
        //3.定义数组存储4个学生的身高
        double[] arr5 = new double[]{1.93,1.83,1.73,1.63};
        double[] arr6 = {1.93,1.83,1.73,1.63};

        //输出的是数组的地址值!!!
        System.out.println(arr1);
        System.out.println(arr2);
        System.out.println(arr3);
        System.out.println(arr4);
        System.out.println(arr5);
        System.out.println(arr6);

        //解释地址值的格式含义:
        //[I@4eec7777
        //[D@6d311334
        //[:表示当前是一个数组
        //D:元素是double类型;L:元素是int类型;
        //@: 间隔符号。(固定格式)
        //4eec7777;6d311334: 才是数组真正的地址值。(十六进制)

    }
}

运算:

三、数组的常见操作

1、数组元素的访问:

(1)索引:

(2)访问格式:

代码:

package com.camellia.demo1.ArrayDemo;

public class ArrayDemo2 {
    public static void main(String[] args) {
        //利用索引对数组中的元素进行访问
        //1.获取数组里的元素
        // 格式:数组名[索引]

        int[] arr = {1,2,3,4};
        //获取数组第一个元素 = 0索引对应的元素
        int number = arr[0];
        System.out.println(number);//1

        //获取数组中1索引对应的数据,并直接打印出来
        System.out.println(arr[1]);//2

        //2.把数据存储到数组中
        //格式: 数组名[索引] = 具体数据/变量;

        arr[0] = 100;

        System.out.println(arr[0]);

    }
}

运算:

2、数组的遍历

(1)定义;

(2)练习题

示例代码:

package com.camellia.demo1.ArrayDemo;

public class ArrayDemo3 {
    public static void main(String[] args) {
        //方法一:
        //1.定义数组
        int[] arr1 = {1,2,3,4,5};
        //2.获取数组里面所有的元素
        //格式:数组名[索引]
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);
        System.out.println(arr1[4]);

        //方法二:
        //利用循环:
        //开始条件:0
        //结束条件:数组长度 - 1 [最大索引]
        //1.定义数组
        int[] arr2 = {1,2,3,4,5,6,7,8,9,0};
        //2.获取数组里面所有的元素
        for (int i = 0;i<=10;i++) {
            System.out.println(arr2[i]);
        }

        //方法三:
        //在Java当中,关于数组的一个长度属性,length
        //调用方式:数组名.length
        //System.out.println(arr.length);
        //1.定义数组
        int[] arr3 = {1,2,3,4,5,6,7,8,9,0};
        //2.获取数组里面所有的元素
        for (int j : arr3) {
            System.out.println(j);
        }

        //拓展:
        //自动快速生成数组的遍历方式
        //idea提供的
        //数组名.fori

    }
}

运算结果:

3、常见问题:

四、常见应用场景

1、求最值

例题:已知数组元素为{33,5,22,44,55},找出数组最大值并打印在控制台

代码:

package com.camellia.demo1.ArrayDemo;

public class ArrayDemo5 {
    public static void main(String[] args) {
        //定义数组求最大值: 33,5,22,44,55


        //1.定义数组来存储5个值
        int[] arr = {33, 5, 22, 44, 55};
        //2.定义一个变量max用来存储最大值
        //max的初始化一定是数组中的值
        //临时认为0索引的数据是最大的
        int max = arr[0];
        //3.循环取数组中每一个元素
        //拿着每一个元素和max进行比较
        for (int i = 0; i < arr.length; i++) {
            //i 索引 arr[i]元素
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        //4.循环结束之后,max记录的数据是数组中的最大值
        System.out.println(max);
    }
}

运算结果:

2、求和

例题:生成10个1~100之间的随机数存入数组

1)求出所有数据和

2)求所有数据的平均数

3)统计有多少个数据比平均值小

代码:

package com.camellia.demo1.ArrayDemo;

import java.util.Random;

public class ArrayDemo6 {
    public static void main(String[] args) {
        /*1)求出所有数据和
         *2)求所有数据的平均数
         *3)统计有多少个数据比平均值小
         */

        //1.定义数组
        int[] arr = new int[10];
        //2.把随机数存入数组中
        Random r = new Random();

        for (int i = 0; i < arr.length; i++) {
            //每一次循环,就会产生一个新的随机数
            int number = r.nextInt(100) + 1;
            //把生成的随机数存入数组
            //数组名称[索引] = 数据;
            arr[i] = number;
        }


        //求和:
        //定义求和变量
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            //循环得到每一个元素
            //并把元素累加到sum中

            sum = sum + arr[i];
        }
        System.out.println("数组中所有的数据的和为:" + sum);


        //求所有数据的平均数
        int avg = sum / arr.length;
        System.out.println("数组中的平均数为:" + avg);


        //有多少个数据比平均数小
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] < avg) {
                count++;
            }
        }
        System.out.println("在数组中,一共有" + count + "个数据,比平均数小");


        //遍历数组来验证
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + " ");
        }
    }
}

运算结果:

3、交换数据

例题:定义一个数组,存入1,,3,4,5.按照要求交换索引对应的元素

交换前:1,2,3,4,5

交换后:5,2,3,4,1

代码:

package com.camellia.demo1.ArrayDemo;

public class ArrayDemo7 {
    public static void main(String[] args) {
        /*定义两个变量,交换两个变量记录的值*/

        int a = 10;
        int b = 20;

        //方法一:
        a = b;
        b = a;

        System.out.println(a);
        System.out.println(b);


        //方法二:
        //定义临时第三方变量
        int temp = a;
        a = b;
        b = temp;

        System.out.println(a);
        System.out.println(b);
        //




    }
}

运算结果:

4、打乱数据

例题:定义一个数组,存入1~5.要求打乱数组中所有数据的顺序

代码:

package com.camellia.demo1.ArrayDemo;

import java.util.Random;

public class ArrayDemo8 {
    public static void main(String[] args) {
        //难点:
        //如何获取数组中的随机索引
        int[] arr = {1,2,3,4,5};

        //索引范围:0~4
        Random r = new Random();

        //遍历数组,从0索引开始打乱数据顺序
        for (int i = 0; i < arr.length; i++) {
            //随机生成一个索引
            int randomIntIn = r.nextInt(arr.length);
            //将随机索引和i进行交换
            int temp = arr[i];
            arr[i] = arr[randomIntIn];
            arr[randomIntIn] = temp;
        }
        //循环结束时,顺序已被打乱
        //验证:每次运行结果时随机生成的顺序!
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "");
        }

    }
}

运行结果:

 五、数组内存分配

1、分类

栈:方法运行时使用的内存。如main方法运行,进入方法栈中执行

堆:存储对象或者数组,new来创建,都存储在堆内存

方法区:存储可以运行的class文件

本地方法栈:JVM在使用操作系统功能的时候使用,和开发无关

寄存器:给CPU使用,与开发无关

2、代码存储

3、数组的定义、获取数据、赋值

总结:

4、两个数组指向同一个空间的内存图

总结:

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值