数组

1 数组的概述

  • 数组是多个相同类型的数据按照一定的顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
  • 数组本身属于引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 创建数据对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
  • 数组的长度一旦确定,就不能修改。
  • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。

 

  • 数组的分类:
  • ①按照维度:一维数组、二维数组、三维数组……。
  • ②按照元素的数据类型:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)。

 

2 一维数组

2.1 一维数组的声明和初始化

  • 格式:一维数组的声明。
数据类型[] 数组名;
  • 格式:一维数组的初始化(静态初始化:在定义数组的同时就为数组元素分配空间并赋值)。
数组名 = new 数据类型[]{元素1,元素2,……,元素n};
或
数组名 = {元素1,元素2,……,元素n};
  • 格式:数组的初始化(动态初始化:数组声明且为数组元素分配空间与赋值操作分开进行)。
数组名 = new 数据类型[n];//n表示开辟空间的个数
数组名[0] = xx; //赋值
数组名[1] = xx; 
……
数组名[n-1] = xx;

 

  • 示例:静态初始化
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //数组的静态初始化
        String[] str = new String[]{"你好", "世界"};
        
        String[] str2 = {"世界","你好"};
    }
}
View Code

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //数组的动态初始化
        String[] str = new String[5];
        str[0] = "你好";
        str[1] = "我好";
        str[4] = "大家好";

        
    }
}
View Code

2.2 如何调用数组的指定位置的元素

  • 数组只有使用new关键字为之分配空间后,才可以运用数组中的元素。
  • 数组元素的应用方式:
数组名[下标];//其中下标的范围是0-(数组长度-1)

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //数组的动态初始化
        String[] str = new String[5];
        str[0] = "你好";
        str[1] = "我好";
        str[4] = "大家好";

        System.out.println(str[0]);
        System.out.println(str[1]);
        System.out.println(str[2]);
        System.out.println(str[3]);
        System.out.println(str[4]);


    }
}
View Code

2.3 如何获取数组的长度和遍历

  • 每个数组都有一个属性length指明它的长度。数组一旦初始化,其长度是不可变的。

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //数组的动态初始化
        String[] str = new String[5];
        str[0] = "你好";
        str[1] = "我好";
        str[4] = "大家好";

        System.out.println("数组的长度是:" + str.length);


    }
}
View Code

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //数组的动态初始化
        String[] str = new String[5];
        str[0] = "你好";
        str[1] = "我好";
        str[4] = "大家好";

        for (int i = 0; i < str.length; i++) {
            System.out.println("数组的元素是:" + str[i]);
        }

    }
}
View Code

2.4 数组元素的默认初始化值

  • 数组是引用数据类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的元素也被按照成员变量同样的方式被隐式初始化。
  • 对于基本数据类型而言,默认初始化值各有不同。
  • 对于引用数据类型而言,默认初始化值为null。 

2.5 一维数组的练习

  •  示例:网红题
package day05;

/**
 * 公寓单间出租4个月,1550元/月(水电费公摊,网费35元/元),空调、卫生间、厨房齐全。
 * 屋内均是IT行业人士,喜欢安静。所以要求求租者最好是同行或者刚毕业的年轻人,爱干净、安静。
 */
public class ArrayTest {
    public static void main(String[] args) {
        int[] arr = new int[]{8, 2, 1, 0, 3};
        int[] index = new int[]{2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3};
        String tel = "";
        for (int i = 0; i < index.length; i++) {
            tel += arr[index[i]];
        }
        System.out.println("联系方式:" + tel);
    }
}
View Code

 

  • 示例: 
package day05;

import java.util.Scanner;

/**
 * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
 * 如果成绩>=最高分-10,则等级为A。
 * 如果成绩>=最高分-20.则等级为B。
 * 如果成绩>=最高分-30,则等级为C。
 * 其余,等级为D。
 */
public class ArrayTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入学生的个数:");
        int num = input.nextInt();
        int[] scores = new int[num];
        System.out.println("请输入" + num + "个成绩");
        for (int i = 0; i < scores.length; i++) {
            scores[i] = input.nextInt();
        }
        //等级判断
        int max = scores[0];
        for (int i = 0; i < scores.length; i++) {
            if (max <= scores[i]) {
                max = scores[i];
            }
        }
        for (int i = 0; i < scores.length; i++) {
            if (scores[i] >= max - 10) {
                System.out.println("学生" + i + "的分数是" + scores[i] + "等级是A");
            } else if (scores[i] >= max - 20) {
                System.out.println("学生" + i + "的分数是" + scores[i] + "等级是B");
            } else if (scores[i] >= max - 30) {
                System.out.println("学生" + i + "的分数是" + scores[i] + "等级是C");
            }else{
                System.out.println("学生" + i + "的分数是" + scores[i] + "等级是D");
            }
        }

    }
}
View Code

 

3 二维数组

  • java语言里提供了支持多维数组的语法。
  • 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
  • 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。

3.1 二维数组的声明和初始化

  • 格式:二维数组的声明
数据类型[][] 数组名;
  • 格式:二维数组的静态初始化
数组名 = {{元素1,元素2,元素3},{元素4},……,{元素n}}
  • 格式:二维数组的动态初始化
数组名 = new 数据类型[m][n];
//其中m表示二维数组中有多少个一维数组;
//其中n表示二维数组中一维数组的元素的个数;
  • 格式:二维数组的动态初始化
数组名 = new 数据类型[m][];
//其中m表示二维数组中有m个一维数组;
//一维数组需要分别进行初始化;

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //静态初始化
        int[][] arr = {{1,2,3},{4,5,6},{7,8}};
    }
}
View Code

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //动态初始化
        int[][] arr = new int[3][2];
    }
}
View Code

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //动态初始化
        int[][] arr = new int[3][];
    }
}
View Code

3.2 如何调用数组的指定位置的元素

  • 数组只有使用new关键字为之分配空间后,才可以运用数组中的元素。
  • 数组元素的应用方式:
数组名[m][n];//m的范围是0-外层一维数组的长度,m的范围是0-内层一维数组的长度

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //动态初始化
        int[][] arr = new int[3][];

        arr[0] = new int[5];
        arr[1] = new int[9];

        System.out.println(arr[1][2]);

    }
}
View Code

3.3 如何调用数组的指定位置的元素

  • 每个数组都有一个属性length指明它的长度。数组一旦初始化,其长度是不可变的。
  • 外层一维数组的长度是数组名.length。

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //动态初始化
        int[][] arr = new int[3][];

        arr[0] = new int[5];
        arr[1] = new int[9];

        System.out.println("二维数组的长度是:" + arr.length);
        System.out.println("二维数组中第一个一维数组的长度是:" + arr[0].length);
        System.out.println("二维数组中第二个一维数组的长度是:" + arr[1].length);

    }
}
View Code

 

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        //动态初始化
        int[][] arr = new int[3][];

        arr[0] = new int[5];
        arr[1] = new int[9];
        arr[2] = new int[3];

        //赋值
        for (int i = 0; i < arr.length; i++) {
            for (int i1 = 0; i1 < arr[i].length; i1++) {
                arr[i][i1] = i * i1;
            }
        }

        //输出
        for (int i = 0; i < arr.length; i++) {
            for (int i1 = 0; i1 < arr[i].length; i1++) {
                System.out.print(arr[i][i1]+"\t");
            }
            System.out.println();
        }


    }
}
View Code

3.4 二维数组的练习

  • 示例:
package day05;

public class ArrayTest {
    public static void main(String[] args) {
        int[][] arr = {{3, 5, 8}, {12, 9}, {7, 0, 6, 4}};
        int result = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int i1 = 0; i1 < arr[i].length; i1++) {
                result += arr[i][i1];
            }
        }
        System.out.println("和是:" + result);


    }
}
View Code

 

  • 示例:
package day05;

/**
 * 打印杨辉三角
 */
public class ArrayTest {
    public static void main(String[] args) {
        int[][] yangHui = new int[10][];
        for (int i = 0; i < yangHui.length; i++) {
            yangHui[i] = new int[i + 1];
            //给首尾元素赋值
            yangHui[i][0] = 1;
            yangHui[i][i] = 1;
            //给每行的非首尾元素赋值
            if (i >= 2) {
                for (int j = 1; j < yangHui[i].length - 1; j++) {
                    yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
                }
            }

        }


        for (int i = 0; i < yangHui.length; i++) {
            for (int j = 0; j < yangHui[i].length; j++) {
                System.out.print(yangHui[i][j] + "\t");
            }
            System.out.println();
        }

    }
}
View Code

 

转载于:https://www.cnblogs.com/xuweiweiwoaini/p/10803224.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值