【JAVA基础】重新系统学习Java(三)数组

数组

数组的定义

数组的访问

数组名称[索引]

访问数组的长度

System.out.println(array.length);

数组的几个注意事项

数组名[] 数组名 可以写成 数据类型 数组名[]

什么类型的数组存放什么类型的数据,否则报错

数组一旦定义,程序执行的过程中,长度、类型就固定了

静态初始化数组

定义数组的时候直接给数组赋值

静态初始化数组的格式

//完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};




//简化格式
数据类型[] 数组名 = {元素1,元素2,元素3...};

注意

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

动态初始化数组

定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据

格式

数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];



//后赋值
arr[0] = 10;
System.out.println(arr[0]);

区别

数据类型明细默认值
基本类型byte,short,char,int,long0
基本类型float,double0.0
基本类型booleanfalse
引用类型类,接口,数组,Stringnull

当前已经知道存入的元素值,用静态初始化

当前还不清楚要存入哪些数据,用动态初始化

数组的遍历

遍历就是一个一个数据的访问

//终极数组遍历形式
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);

数组的案例

求和

某个部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额

package com.cjcat.creat;

public class demo2 {
    public static void main(String[] args) {
        int sum = 0;
        int[] money = {16, 26, 36, 6, 100};
        for (int i = 0; i < money.length; i++) {
            sum += money[i];
        }
        System.out.println(sum);
    }
}

求最值

成绩求最值

package com.cjcat.creat;

public class demo2 {
    public static void main(String[] args) {
        int[] scores = {76, 56, 82, 77, 91, 60, 88};
        int max = scores[0];
        for (int i = 0; i < scores.length; i++) {
            if (max <= scores[i]) {
                max = scores[i];
            }
        }
        System.out.println("最大值为:" + max);
    }
}

猜数字游戏

一个幸运小游戏,随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:未猜中提示:“未命中”,并继续猜测,猜中提示:‘运气不错猜中了“,并输出该数据第一次出现的位置,且输出全部5个数据,最终结束本游戏

package com.cjcat.creat;

import java.util.Random;
import java.util.Scanner;

public class demo2 {
    public static void main(String[] args) {
        //动态初始化数组,存入5个随机的1-20之间的数据
        //定义一个死循环,不断的猜数据,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死循环;如果没有猜中,提示继续

        int[] num = new int[5];
        Random r = new Random();
        for (int i = 0; i < num.length; i++) {
            num[i] = r.nextInt(1, 21);
        }
        Scanner sc = new Scanner(System.in);
        OUT:
        while (true) {
            System.out.println("输入一个数字:");
            int g = sc.nextInt();
            for (int i = 0; i < num.length; i++) {
                if (g == num[i]) {
                    System.out.println("运气不错,猜中了。该数据第一次出现的位置为" + i);
                    break OUT;
                }
            }
            System.out.println("未猜中");
        }
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + "\t");
        }
    }
}

随机排名

某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依次录入5名员工的工号,然后展示出一组随机的排名顺序

package com.cjcat.creat;

import java.util.Random;
import java.util.Scanner;

public class demo1 {
    public static void main(String[] args) {
        //目的:键盘录入一组工号,最终要随机输出一组出来作为排名
        //动态初始化一个数组,存储5个工号
        int[] codes = new int[5];
        //定义一个循环,循环5次,依次录入一个工号存入对应的位置
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < codes.length; i++) {
            System.out.println("请您输入第" + (i + 1) + "个员工的工号:");
            int code = sc.nextInt();
            codes[i] = code;
        }
        //遍历数组中的每个元素,然后随机一个索引出来,让该元素与随机索引位置处的元素值进行交换(重点:元素交换)
        Random r = new Random();
        for (int i = 0; i < codes.length; i++) {
            int c = r.nextInt(codes.length);
            int temp = codes[c];
            codes[c] = codes[i];
            codes[i] = temp;
        }
        //遍历数组元素,输出
        for (int i = 0; i < codes.length; i++) {
            System.out.print(codes[i] + "\t");
        }
    }
}

数组排序

就是对数组中的元素,进行升序(由小到大)或者降序(由大到小)的操作

数组排序的技术

冒泡排序

选择排序

快速排序

插入排序

数组搜索相关的技术

二分查找

分块查找

哈希表查找

冒泡排序

每次从数组中找出最大值放在数组的后面去

步骤分析

确定总共需要做几轮:数组的长度-1

每轮比较几次:数组的长度-i(轮数)

package com.cjcat.creat;

public class demo4 {
    public static void main(String[] args) {
        int[] arr = {5, 2, 3, 1};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
    }
}

Java内存分配

:栈内存:方法运行时所进入的内存变量也是在这里

:堆内存:new出来的东西会在这块内存中开辟空间并产生地址

方法区:字节码文件加载进入的内存

本地方法栈

寄存器

//两个变量指向同一个数组
package com.cjcat.creat;

public class demo5 {
    public static void main(String[] args) {
        int[] arr1 = {11, 22, 33};
        int[] arr2 = arr1;
        System.out.println(arr1);
        System.out.println(arr2);
        arr2[1] = 99;
        System.out.println(arr1[1]);//99
        System.out.println(arr2[1]);//99
    }
}

数组使用的常见问题

问题一:如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫全栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值