04数组知识大全

1.数组的定义格式

  1.1第一种格式:数据类型[] 数组名
int[] arr;        
double[] arr;      
char[] arr;
 1.2第一种格式:	数据类型 数组名[]
int arr[];
double arr[];
char arr[];

2.数组的初始化

2.1 动态初始化格式

数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];  //数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

2.2 静态初始化格式

完整版格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化版格式:数据类型[] 数组名 = {元素1,元素2,...};

在这里插入图片描述

3.数组元素访问

3.1什么是索引

   每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。

   这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。 

   格式:数组名[索引];

5.内存分配

5.1内存概述

– 内存是计算机中的重要原件,临时存储区域,作用是运行程序。

​-- 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。

​-- 必须放进内存中才能运行,运行完毕后会清空内存。

​ – Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

5.2 java中的内存分配

在这里插入图片描述

6.数组操作的两个常见问题

6.1 索引越界异常

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        System.out.println(arr[3]);//索引范围是0~2,问了一个3的索引
    }   //将错误的索引修改为正确的索引范围即可!
}

6.2空指针异常

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];

        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
– 解决方案

给数组一个真正的堆内存空间引用即可!

7.数组遍历

数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

public class ArrayTest01 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {11, 22, 33, 44, 55};

        //使用通用的遍历格式
        for(int x=0; x<arr.length; x++) {
            System.out.println(arr[x]);
        }
    }
}

8.数组例题

定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,
偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)
public class Demo8 {
    public static void main(String[] args) {
        //1.定义原数组
        int[] arr = {12,23,34,45,67,78,11,22};
        //2.定义空数组
        int[] brr = new int[arr.length];
        //3.定义变量代表奇数要存放的位置
        int left = 0;
        //4.定义变量代表偶数要存放的位置
        int right = arr.length-1;
        //5.对原数组进行遍历
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] % 2 == 1){
                //5.1如果是奇数就往左边放
                brr[left] = arr[i];
                //5.2存放之后让索引向右移动
                left++;
            }else{
                //5.3如果是偶数就往右边放
                brr[right] = arr[i];
                //5.4存放之后让索引向左移动
                right--;
            }
        }
        //6.打印brr数组
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i] + " ");
        }
    }
}

9.数组的合并

现在给出两个数组:
	数组a:"1,7,9,11,13,15,17,19"
	数组b:"2,4,6,8,10"
	两个数组合并为数组c。 
package day4;

public class day4Test2_9 {
    public static void main(String[] args) {
        int[] a = {1,7,9,11,13,15,17,19};
        int[] b ={2,4,6,8,10};
        int[] c = new int[a.length+b.length];
        for (int i=0,j=0,k=0;i<c.length;i++)
        {
          if (i<a.length)
          {
              c[j]=a[i];
              j++;
          }
          else {
                  c[j]=b[k];
                  k++;
                  j++;
          }
        }
        for (int i=0;i<c.length;i++)
        {
            System.out.print(c[i]+" ");
        }

    }
}

运行结果:
在这里插入图片描述

10.求平均分

B哥去参加青年歌手大奖赛,有10个评委打分,(去掉一个最高一个最低)求平均分是多少? 
评委打分:99,97,96,95,94,92,91,90,88,100
public class day4Test2_10 {
    public static void main(String[] args) {
        double[] score = {99,97,96,95,94,92,91,90,88,100};
        double max = score[0];
        double min = score[0];
        int sum = 0;
        for (int i =0;i<score.length;i++)
        {
            sum+=score[i];
            if (max<score[i])
            {
                max = score[i];
            }
            else if(min>score[i])
            {
                min = score[i];
            }
        }
        System.out.println("最高分为"+max+" 最低分为"+min);
       double ave = (sum-max-min)/(score.length-2);
        System.out.println("(去掉一个最高一个最低)平均分为"+ave);
    }
}

运行结果
在这里插入图片描述

11.求该数组中第二大的数的下标

数据如图:{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
public class day4Test2_11 {
    public static void main(String[] args) {
        int[] num = {1,2,3,4,5,6,7,8,9,0};
        int index = 0;
        int max = num[0];
        for (int i = 0;i<num.length;i++)
        {
            if (max<num[i])
            {
                max = num[i];  //找出最大值
                index= i;    //找出最大值下标
            }
        }
        num[index]=0;   //让最大值为零
        max  = num[0];
        index = 0;   //初始化
        for (int i = 0;i<num.length;i++){
            if (max<num[i])
            {
                max = num[i];  //找出最大值
                index= i;    //找出最大值下标
            }
        }
        System.out.println(index);

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值