【Java基础笔记】数组

前言

数组

  • 数组是用来存储一批同种类型数据内存区域

1.静态初始化数组

  • 定义数组时直接给数组赋值
	数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}; // 完整格式
	数据类型[] 数组名 = {元素1,元素2,元素3...}; // 简化格式

2.动态初始化数组

  • 定义数组时只确定元素的类型和数组长度,之后再存入具体数据
	数据类型[] 数组名 = new 数据类型[长度];

3.动态初始化数组的元素默认值

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

4.数组的几个注意事项

  • “数据类型[] 数组名“也可以写成“数据类型 数组名[]”
  • 数组只能存储相同类型的数据
  • 定义一个数组后,程序执行的过程中,该数组长度类型无法修改
  • 在IDEA中,【数组名.fori】快速生成遍历数组语句

【数组案例1】猜数字游戏

  • 游戏后台随机生成1-20之间的5个数字(可以重复),用户猜数字,猜中后输出该数字第一次出现的位置,并输出全部5个数字
import java.util.Random;
import java.util.Scanner;

public class ArrayDemo1 {
    public static void main(String[] args) {
        // 定义一个动态初始化的数组data,存储1-20之间随机生成的5个数字
        int[] data = new int[5];
        Random r = new Random();
        // 随机生成1-20之间的5个数字,并存入data数组中
        for (int i = 0; i < 5; i++) {
            data[i] = r.nextInt(20) + 1;
        }
        Scanner sc = new Scanner(System.in);
        OUT:
        // break跳出循环标记点
        while (true) {
            System.out.print("请输入一个1-20之间的整数进行猜测:");
            int guessData = sc.nextInt();
            // 遍历data数组,与用户猜测的数字guessData比较
            for (int i = 0; i < data.length; i++) {
                if (guessData == data[i]) {
                    System.out.println("恭喜您猜中了!您猜中的数字在第" + (i + 1) + "个位置");
                    // 结束while循环
                    break OUT;
                }
            }
            System.out.println("抱歉!" + guessData + "不正确!");
        }
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + "\t");
        }
    }
}
请输入一个1-20之间的整数进行猜测:1
抱歉!1不正确!
请输入一个1-20之间的整数进行猜测:3
恭喜您猜中了!您猜中的数字在第2个位置
13	3	15	6	18	

【数组案例2】随机排序

  • 将一个长度为5的数组中的数据进行随机排序并输出
public class ArrayDemo2 {
    public static void main(String[] args) {
        // 定义一个静态初始化的数组codes,并赋值
        int[] codes = {12, 36, 28, 45, 99};
        System.out.print("原序列:");
        for (int i = 0; i < codes.length; i++) {
            System.out.print(codes[i] + "\t");
        }
        Random r = new Random();
        for (int i = 0; i < codes.length; i++) {
            // 随机生成当前数字将移动到的索引位置
            int index = r.nextInt(codes.length);
            // 随机生成的索引位置与当前数字的位置一样,不作交换
            if (index != i) {
                // 当前数字与索引位置的数字交换
                int temp = codes[index];
                codes[index] = codes[i];
                codes[i] = temp;
            }
        }
        System.out.print("\n新序列:");
        for (int i = 0; i < codes.length; i++) {
            System.out.print(codes[i] + "\t");
        }
    }
}
原序列:12	36	28	45	99	
新序列:36	45	28	99	12	

【数组案例3】冒泡排序(改进版)

  • 第一点是加入了一个布尔值,判断第二层循环中的调换有没有执行,如果没有进行两两调换,说明后面都已经排好序了,已经不需要再循环了,直接跳出循环,排序结束
  • 第二点是第二层循环不再循环到arr.length - 1,因为外面的 i 循环递增一次,说明数组最后就多了一个排好序的大泡泡。第二层循环也就不需要到最末尾一位了,可以提前结束循环

改进后,测试结果发现提升并不大,这是正常的。因为改进后省略的是排序成功后的判断步骤,就算没改进,排序成功后也只不过是对数组进行遍历而已,没有进行数据更新操作,而数组是读取快更新慢,所以和普通版本相比看起来提升不算大

冒泡排序

	public int[] bubbleSort(int[] array) {
        if (array != null && array.length > 1) {
            for (int i = 0; i < array.length - 1; i++) {
                boolean flag = false; // 是否发生交换标记位
                for (int j = 0; j < array.length - i - 1; j++) {
                    if (array[j] > array[j + 1]) {
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        flag = true; // 发生交换
                    }
                }
                // 当前循环未发生交换,说明数组已完成排序,不需要再继续
                if (!flag) {
                    break;
                }
            }
        }
        return array;
    }

5.Java内存分配

Java内存分配

6.数组内存分配

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

7.两个数组变量指向同一个数组对象内存分配

两个数组变量指向同一个数组对象

8.数组常见异常

  • 访问的元素位置超过最大索引,执行时出现:ArrayIndexOutOfBoundsException(数组索引越界异常)
  • 数组变量中没有存储数组的地址,而是null,在访问数组信息时出现:NullPointerException(空指针异常)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值