一维、二维数组

目录

一维数组

一、数组静态初始化

1.介绍

2.格式

二、数组元素访问

1.介绍

2.格式

三、数组的遍历

1.介绍

2.格式

3.数组遍历的场景

4.案例

四、数组动态初始化

五、静态初始化和动态初始化的区别

六、Java内存分配介绍

方法的参数传递问题

七、数组常见问题

1.数组索引越界异常(ArrayIndex0utofBoundsException)

2.空指针异常(NullPointerException)

二维数组

一、静态初始化

1.格式

2.访问格式

二、二维数组遍历

1.打印

2.求和

三、二维数组动态初始化

1.格式

2.案例


一维数组

数组 : 一种容器,可以存储同种数据类型的多个值。

数组的使用场景 : 发现手里的数据有多个,并且这多个数据还属于同一组数据,就可以考虑使用数组容器进行维护。

一、数组静态初始化

1.介绍

初始化 : 在内存中,为数组容器开辟空间,并将数据存入容器的过程。

  • 格式一:数据类型[ ] 数组名; 如:int[ ] array;

  • 格式二:数据类型 数组名[ ]; 如:int array[ ];

注意:这种定义格式,定义出来的,只是数组类型的变量而已,内存中还没有创建出数组容器

2.格式

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

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

二、数组元素访问

1.介绍

索引是数组容器中空间的编号,编号从0开始,逐个+1增长

2.格式

数组名[索引]

三、数组的遍历

1.介绍

数组遍历: 将数组中所有的内容取出来,取出来之后可以(打印,求和,判断..)

2.格式

数组名.Length

动态获取到数组的长度 (元素的个数)

数组遍历的快捷键:数组名.fori + 回车

3.数组遍历的场景

如果要完成的需求,是需要操作到数组中的每一个元素,就需要对数组进行遍历操作

4.案例

求最大值

package Test;
​
public class ArrayTest2 {
    public static void main(String[] args) {
​
        int[] arr1 = {33,55,11,22,44};
        int[] arr2 = {100,99,66,88,77};
​
        int max = getMax(arr1);
        System.out.println("最大值为:" + max);
​
    }
​
    public static int getMax(int[] arr){
​
        //1.第一个选手上台(假设第一个元素就是最大值)
        int max = arr[0];
        //2.遍历数组,获取到每一个元素
        for (int i = 1; i < arr.length; i++) {
            //3.逐个比较
            if(arr[i] > max){
                //4.记录更大的数据
                max = arr[i];
            }
        }
        return max;
    }
}

学生成绩

批量修改变量名:Shift + F6 + Fn

package Test;
​
    /*
        需求:
            已知班级学生成绩为
            int[] arr = {100,50,20,90,90};
            1.找出数组最大值,并打印在控制台
            2.找出数组最小值,并打印在控制台了。
            3.求总成绩,并打印在控制台
            4.计算出平均值,并打印在控制台
            5.统计出低于平均值元素的个数
     */
​
public class ArrayTest2 {
    public static void main(String[] args) {
​
        int[] arr = {100,50,20,90,90};
​
        int max = getMax(arr);
        System.out.println("最高分为:" + max);
​
        int min = getMin(arr);
        System.out.println("最低分为:" + min);
​
        int sum = getSum(arr);
        System.out.println("班级总成绩为:" + sum);
​
        double avg = getAvg(arr);
        System.out.println("班级平均分为:" + avg);
​
        int count = getCount(arr);
        System.out.println("低于平均分的人数为:" + count);
    }
​
    /**
     *1.从数组中找最大值
     */
    public static int getMax(int[] arr){
​
        //1.第一个选手上台(假设第一个元素就是最大值)
        int max = arr[0];
        //2.遍历数组,获取到每一个元素
        for (int i = 1; i < arr.length; i++) {
            //3.逐个比较
            if (arr[i] > max) {
                //4.记录更大的数据
                max = arr[i];
            }
        }
        return max;
    }
​
    /**
     *2.从数组中找最小值
     */
    public static int getMin(int[] arr){
        //int[] arr = {5,44,33,55,22};
​
        //1.第一个选手上台(假设第一个元素就是最大值)
        int min = arr[0];
        //2.遍历数组,获取到每一个元素
        for (int i = 1; i < arr.length; i++) {
            //3.逐个比较
            if(arr[i] < min){
                //4.记录更大的数据
                min = arr[i];
            }
        }
        return min;
    }
​
    /**
     *3.数组求和
     */
    public static int getSum(int[] arr){
        int sum = 0;
        for (int i = 1; i < arr.length; i++){
            sum += arr[i];
        }
        return sum;
    }
​
    /**
     *4.数组求平均值
     */
    public static double getAvg(int[] arr){
​
        int sum = getSum(arr);
​
        //计算平均分
        double avg = (sum * 1.0) / arr.length;
​
        return avg;
    };
​
    /**
     * 5.统计低于平均值元素的个数
     */
    public static int getCount(int[] arr){
        //1.定义计数器变量
        int count= 0;
        //2.计算平均分
        double avg = getAvg(arr);
        //3.统计
        for(int i = 0;i < arr.length;i++){
            if (arr[i] < avg){
                count++;
            }
        }
        return count;
    }
}

运行结果

四、数组动态初始化

1.介绍

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

2.格式

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

范例:int[] arr = new int[3];

②默认值类型:

  • 整数 : 0

  • 小数 : 0.0

  • 布尔 : false

  • 字符 :'\u0000' --->Unicode字符 --->常见的体现是空白字符

  • 引用数据类型 : null(引用数据类型:数组、类(如String)、接口)

五、静态初始化和动态初始化的区别

  • 动态初始化:手动指定数组长度,由系统给出默认初始化值。(只明确元素个数,不明确具体数值)

  • 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。(如果要操作的数据,需求中已经明确给出了,直接静态初始化)

抽取方法的快捷键:Ctrl + Alt + M

六、Java内存分配介绍

 

方法的参数传递问题

1.基本数据类型: 传递的是数据值

解决方法:return

2.引用数据类型: 传递的是地址值

七、数组常见问题

1.数组索引越界异常(ArrayIndex0utofBoundsException)

原因: 访问了不存在的索引。

例如:

package exception;
​
public class ArrayIndex0utofBoundsException {
    public static void main(String[] args) {
        int[] arr = {11,22,33};
        
        for(int i = 0;i <= arr.length;i++){
            //i = 0,1,2,3
            System.out.println(arr[i]);
        }
    }
}

2.空指针异常(NullPointerException)

原因: 当引用数据类型的变量,被赋值为null之后,就代表跟堆内存的连接被切断了。这时候还想去访问堆内存的数据,就会出现空指针异常。

例如:

package exception;
​
public class NullPointerException {
    public static void main(String[] args) {
        int[] arr = {11,22,33};
​
        arr = null;
        
        System.out.println(arr[0]);
    }
}

二维数组

二维数组:是一种容器,该容器用于存储一维数组。

使用思路:今后若要操作的多组数据,属于同一组数据就可以考虑使用二维数组进行维护

一、静态初始化

1.格式

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

  • 范例: int[ ] [ ] arr = new int[ ] [ ]{{11,22},{33,44}};

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

  • 范例:int[ ] [ ] arr = {{11, 22},{33,44}};

细节: 二维数组在存储一维数组的时候,具体存储的是一维数组的地址值

2.访问格式

格式:数组名[索引] [索引];

范例:int[ ] [ ] arr = new int[ ] [ ]{{11,22},{33,44}};

arr[1] [0];

二、二维数组遍历

1.打印

需求:已知一个二维数组arr = { {11 , 22 , 33} , {33 , 44 , 55} };遍历该数组,取出所有元素并打印

分析:

  • 遍历二维数组,取出里面每一个一维数组

  • 在遍历的过程中,对每一个一维数组继续完成遍历,获取内部存储的每一个元素

package Array;
​
public class ArrayTest1 {
    public static void main(String[] args) {
        int[][] arr= {
                {11, 22, 33},
                {33, 44, 55}
        };
        printArray(arr);
    }
​
​
    public static void printArray(int[][] arr) {
​
​
        for (int i = 0; i < arr.length; i++) {
            //arr[i] 每一个一维数组
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
​
        }
    }
}

2.求和

需求:已知一个二维数组arr = { {11 , 22 , 33} , {33 , 44 , 55} };对内部存储的元素累加求和,并将结果输出在控制台

分析:

  • 定义求和变量

  • 遍历二维数组,取出里面每一个一维数组

  • 在遍历的过程中,对每一个一维数组继续完成遍历,获取内部存储的每一个元素

  • 求和累加

  • 打印求和结果

package Array;
​
public class ArrayTest1 {
    public static void main(String[] args) {
        int[][] arr= {
                {11, 22, 33},
                {33, 44, 55}
        };
        printArray(arr);
​
        int sum = getSum(arr);
        System.out.println("求和结果为:" +sum);
    }
​
​
    public static void printArray(int[][] arr) {
​
​
        for (int i = 0; i < arr.length; i++) {
            //arr[i] 每一个一维数组
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
​
        }
    }
​
    public static int getSum(int[][] arr){
        int sum = 0;
​
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                sum += arr[i][j];
            }
        }
​
        return sum;
​
    }
}

三、二维数组动态初始化

1.格式

数据类型 [ ] [ ] = new 数据类型[m] [n];

m表示这个二维数组,可以存放多少个一维数组

n表示每一个一维数组,可以存放多少个元素

范例:int[] [] arr = new int[2] [3];

2.案例

能否将提前创建好的一维数组,直接存入二维数组中?

package Array;
​
public class ArrayTest2 {
    public static void main(String[] args) {
​
        int[] arr1 = {11,22,33};
        int[] arr2 = {44,55,66};
​
        int[][] arr = new int[2][3];
​
        arr[0] = arr1;
        arr[1] = arr2;
​
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值