day04--1-17-Java基础学习(数组)

1-17-Java基础学习(数组)

1.数组

1.概念

数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。

2.原理及定义

数组变量名中存储的是数组在内存中的地址,数组是引用类型。

image-20220117170041196

     // 定义的方式  两种方式可以选择
        int[] array={30,20,50};   int anInt[]={30,20,50};
     //Java是强类型语言
         什么样类型的数组就只能存放对应数据类型的数据
     //数组一旦定义以后 类型和长度就定义了

3.初始化

1.动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值

int [] array=new int [30];
double [] demo=new double[3];
        demo[0]=300;
        demo[1]=200;
//初始化的时候 数组里面会有默认值

image-20220117175537304

image-20220117175604566

2.静态初始化
 //数组的定义
      数组类型[] 数组名称=new  数组类型[]{数组里面的数据}
      double [] scores= new double[]{20.3,20.26,3.02,20.36};
 // 简化模式 去掉后面的 new  数组类型[]直在{}里面写对应的数组的数据
      double[] demo={30.30,20,30};
3.注意事项

image-20220117180418615

4.元素的访问

//访问
数组名称[索引] 
  int[] age = {30, 20, 60};
  age[0]=200;
//数组的长度
  age.length;
 数组名称.length
//数组的最大索引
  age.length-1;
 数组名称.length-1

5.数组的遍历

//一个一个的访问数据
 //    数组元素的遍历
        int[] age = {30, 20, 60};
        for (int i = 0; i <age.length ; i++) {
            System.out.print(age[i]+"   ");
        }
    }

6.经典习题

1.遍历求和
//需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。
public static void main(String[] args) {
        int[] array = {16, 32, 36, 6, 100};
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            sum += array[i];
        }
        System.out.println(sum);
    }
2.数组最大值
//颜值:15 颜值:9000 颜值:10000 颜值:20000 颜值:9500 颜值:-5
 public static void main(String[] args) {
        // 定义数组
        int[] demo = {15, 10000, 20000, 9500, -5};
        int temp = demo[0];
        for (int i = 0; i < demo.length; i++) {
            if (demo[i] >= temp) {
                temp = demo[i];
            }
        }
        System.out.println(temp);
    }
3.猜数字进阶
/*
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
未猜中提示:“未命中”,并继续猜测
猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据,最
终结束本游戏。
*/
public class ArrayDemoGuessNumber {
    public static void main(String[] args) {
        //    获取随机数
        Random random = new Random();
        int[] array = new int[5];
        for (int i = 0; i < 5; i++) {
            int number = random.nextInt(19) + 1;
            for (int i1 = 0; i1 < array.length; i1++) {
                array[i] = number;
            }
        }
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入你猜的数字");
            int input = scanner.nextInt();
            for (int i = 0; i < array.length; i++) {
                if (input == array[i]) {
                    System.out.println(" 恭喜命中");
                    System.out.println("第一次命中的下标是"+i);
                    break;
                } else {
                    System.out.println("没有命中");
                }
            }
        }
    }
}
4.随机排名
/*
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。
22 33 35 13 88  ==>13 35 88 33 22
*/
int[] array = new int[5];
        Scanner scanner = new Scanner(System.in);
        //为数组的每一个元素赋值
        for (int i = 0; i < array.length; i++) {
            System.out.println("请输入工号");
            int numbner = scanner.nextInt();
            array[i] = numbner;
        }

        //    元素的交换
        //     随机一个索引出来  遍历所有的元素 让该元素与随机索引位置的元素进行交换
        Random random = new Random();
        //遍历所有的元素
        for (int i = 0; i < array.length; i++) {
            //随机一个索引位置出来 array[index]
            int index = random.nextInt(array.length);
            //由于两个变量不能直接交换  需要定义一个临时变量存储index位置处的值
            int temp = array[index];
            array[index] = array[i];
            array[i] = temp;
        }
        //遍历对应的数据
        for (int i : array) {
            System.out.print(i + "\t");
        }
5.数组排序
//冒泡排序  每次从数组中找出最大值放在数组的最后面去
所比较的轮数:数组的长度
每一轮比较的次数:数组的长度-i(i为第几轮)

image-20220117202841241

//    定义有个数组
        int[] array = {30, 20, 59, 52, 30};
//     定义一个循环用来控制比较的轮数

        for (int i = 0; i < array.length - 1; i++) {
            //i=0 比较的次数3   j=0 1 2
            // i=1 比较的次数2     j=0 1
            for (int j = 0; j < array.length - i - 1; j++) {
                //    将数据进行比较  并交换位置
                if (array[j] > array[j + 1]) {
                    int temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
        }
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }

image-20220117205533509

7.数组的内存分布

1.Java内存分配

image-20220117211316757

2.数组内存分配

image-20220117211955846

image-20220117212051345

3.将两个变量指向同一数值

image-20220117212717719

注意事项:

当两个数组变量指向同一个数组变量时 相当于Java的深拷贝 数组访问的是地址值 第一个改变 后面的赋值都会改变(以最先定义的为准)

8.数组使用的常见问题

1.数组索引越界

如果访问的元素位置超过最大索引 就会引起数组越界异常

image-20220117213109212

2.空指针异常

如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现NullPointerException(空指针异常)

image-20220117213306000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值