数组

数组

1、相同数据类型的【数据容器】
2、顺序排列

创建

1、 数据类型[] 数组名 = {数据1,数据2,数据3…数据n};

//数组的创建
//第一种方式:数据类型[] 数组名 = {数据1,数据2,数据3,......数据n};
    int[] a = {1,2,3,4,5,6,7,8};

2、 数据类型[] 数组名 = new 数据类型[数组长度]; // 数组长度通过int数据指定。

//第二种方式:数据类型[] 数组名 = new 数据类型[数组长度];
    int[] n = new int[6];

3、不常用创建数组的方式

//不常用的创建方式
    int[] b; //这种方式如果用的话 只能new
        
    int[] c = new int[] {1,2,3,4,5,5,4};
遍历

1、指定索引遍历

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

2、for循环

for(int index = 0; index < a.length; index++) {
        System.out.println(a[index]);
}
数组常见问题

1、数组下标越界异常

//报错:ArrayIndexOutOfBoundsException
//意思就是  最后一位数的 下标是6  我们寻找的是下标是9的 所以没有
int[] c = new int[] {1,2,3,4,5,5,4};
System.out.println(c[9]);

2、空指针异常

//报错:NullPointerException
///在不常用数据类型的时候 如下图 没有值默认就是null
int[] a;
System.out.println(a[1]);
常用算法

1、寻找数组中的最大值或最小值

//定义数组
int[] c = {1,2,3,4,5,5,4,9,89,8,9,7,12,8,8,8,8,23};
//自定义变量 d也就是数组中的第一个数
int d = c[0];
for(int i = 1;i < c.length; i++) {
 //用数组中的第一个数 与数组中的第二个数比较  三目运算符。以此类推 最大值  或者最小值
    d = d > c[i]?d:c[i];
}
    System.out.println(d);

2、冒泡排序:比较相邻2个数 然后进行位置替换,每一轮比较只能得出一个最大值,然后再比较一轮再得出一个最大的,一直比较到不需要再比较 。
外层循环控制轮数:length-1
内存循环控制次数:比较次数 第i轮 比较次数:length-i-1

int[] c = {1,2,3,4,5,5,4,9,89,8,9,7,12,8,8,8,8,23};
        //用于替换的变量
        int bb ;
        //外层控制循环次数: length-1
        for(int i = 0;i < c.length-1; i++) {
            //内层控制  比较的次数  length-i-1
            for(int j = 0;j < c.length-i-1; j++) {
                //第一个 大于第二个
                if(c[j] > c[j+1]) {
                    //赋值给变量  进行替换
                    bb = c[j];
                    c[j] = c[j+1];
                    //最大的放后面
                    c[j+1] = bb;
                }
            }
        }
        for(int i = 0;i < c.length; i++) {
            System.out.println(c[i]);
        }

3、二分查找法(首先是有序排列才可以)

/**
*1、确定查找范围  最小下标----最大下标
*2、计算中间下标   (最小 +  最大下标)/2
*3、比较中间下标:中间数据大 则最大下标 = 中间下标 - 1
*             :中间数据小   则最小下标 = 中间下标 + 1
*4、当最小下标 > 最大下标时 , 说明数据不存在
*/
public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6,7,8,9,10,11,12,13,45};
        
        //要查找的数据
        int a = 5;
        
        //最关键的3个变量
        // 最小范围的下标
        int minIndex = 0;
        
        //最大范围的下标
        int maxIndex = nums.length-1;
        
        //中间下标
        int centerIndex = (minIndex + maxIndex)/2;
        
        //因为循环的轮数不确定 所以写一个死循环
        while(true) {
            //中间数据较大
            if(nums[centerIndex] > a) {
                maxIndex = centerIndex -1;
            //中间数据较小
            }else if(nums[centerIndex] < a) {
                minIndex = centerIndex +1;
            //找到了数据 : 数据的位置是 centerIndex
            }else {
                
                break;
            }
            
            //最小下标 大于  最大下标
            if(minIndex > maxIndex) {
                //也就是没有数据
                centerIndex = -1;
                break;
            }
            //当位置发生变化的话  更新中间下标
            centerIndex = (minIndex + maxIndex)/2;
        }
        
        System.out.println("需要找到的数据下标是:"+centerIndex);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SMALLc鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值