JAVA入门 数组 1

1. 数组的概述

1.1 数组的概念

  • 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

  • 数组中的概念

    • 数组名

    • 下标(或索引)

    • 元素

    • 数组的长度(数组容器中存储元素的个数)

    • 数组的特点:

    • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据 类型。

    • 创建数组对象会在内存中开辟一整块连续的空间。占据的空间的大小,取决于数组的长度和数组中元素的类型。

    • 数组中的元素在内存中是依次紧密排列的,有序的。

    • 数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改

    • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。

    • 数组名中引用的是这块连续空间的首地址。

    • 1.2 数组的分类

      1、按照元素类型分:

    • 基本数据类型元素的数组:每个元素位置存储基本数据类型的值

    • 引用数据类型元素的数组:每个元素位置存储对象(本质是存储对象的首地址)(在面向对象部分讲解)

    • 2、按照维度分:

    • 一维数组:存储一组数据

    • 二维数组:存储多组数据,相当于二维表,一行代表一组数据,只是这里的二维表每一行长度不要求一样。

2. 一维数组的使用

①数组的声明和初始化

②调用数组的指定元素

③数组的属性,length 表示数组的长度

④数组的遍历

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

⑥一维数组的内存解析(难)

2.1 一维数组的声明

格式:

//推荐
元素的数据类型[] 一维数组的名称;

//不推荐
元素的数据类型  一维数组名[];


int[] arr;
int arr1[];
double[] arr2;
String[] arr3;  //引用类型变量数组

数组的声明,需要明确:

(1)数组的维度:在Java中数组的符号是[],[]表示一维,[][]表示二维。

(2)数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的Java的数据类型。例如:int、String、Student等。

(3)数组名:就是代表某个数组的标识符,数组名其实也是变量名,按照变量的命名规范来命名。数组名是个引用数据类型的变量,因为它代表一组数据。

2.2 一维数组的初始化

2.2.1 静态初始化
  • 如果数组变量的初始化和数组元素的赋值操作同时进行,那就称为静态初始化。

  • 静态初始化,本质是用静态数据(编译时已知)为数组初始化。此时数组的长度由静态数据的个数决定。

  • 一维数组声明和静态初始化格式1

  • new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组实体。

    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
    
    或
        
    数据类型[] 数组名;
    数组名 = new 数据类型[]{元素1,元素2,元素3,...};
    
    
    
    //例如,定义存储1,2,3,4,5整数的数组容器。
    int[] arr = new int[]{1,2,3,4,5};//正确
    //或
    int[] arr;
    arr = new int[]{1,2,3,4,5};//正确

    一维数组声明和静态初始化格式2:

    数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写
    
    例如,定义存储1,2,3,4,5整数的数组容器
    int[] arr = {1,2,3,4,5};//正确
    
    int[] arr;
    arr = {1,2,3,4,5};//错误

    举例

    public class ArrayTest2 {
        public static void main(String[] args) {
            int[] arr = {1,2,3,4,5};//右边不需要写new int[]
    
            int[] nums;
            nums = new int[]{10,20,30,40}; //声明和初始化在两个语句完成,就不能使用new int[]
    
            char[] word = {'h','e','l','l','o'};
    
            String[] heros = {"袁隆平","邓稼先","钱学森"};
    
            System.out.println("arr数组:" + arr);//arr数组:[I@1b6d3586
            System.out.println("nums数组:" + nums);//nums数组:[I@4554617c
            System.out.println("word数组:" + word);//word数组:[C@74a14482
            System.out.println("heros数组:" + heros);//heros数组:[Ljava.lang.String;@1540e19d
        }
    }
2.2.2 动态初始化

数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。

动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。

格式:

数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];

或

数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];
  • [长度]:数组的长度,表示数组容器中可以最多存储多少个元素。

  • 注意:数组有定长特性,长度一旦指定,不可更改。和水杯道理相同,买了一个2升的水杯,总容量就是2升是固定的。

  • 举例1:正确写法

    int[] arr = new int[5];
    
    int[] arr;
    arr = new int[5];
    

    举例2:错误写法

    int[] arr = new int[5]{1,2,3,4,5};//错误的,后面有{}指定元素列表,就不需要在[]中指定元素个数了。

    2.3 一维数组的使用

  • 2.3.1 数组的长度
  • 数组的元素总个数,即数组的长度

  • 每个数组都有一个属性length指明它的长度,例如:arr.length 指明数组arr的长度(即元素个数)

  • 每个数组都具有长度,而且一旦初始化,其长度就是确定,且是不可变的。

  • 2.3.2 数组元素的引用
  • 如何表示数组中的一个元素?

    每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)或下标,可以通过数组的索引/下标访问到数组中的元素。

    ​​​​​

    数组的下标范围?

    Java中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]

    数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];

  • 举例

    public class ArrayTest3 {
        public static void main(String[] args) {
            int[] arr = {1,2,3,4,5};
    
            System.out.println("arr数组的长度:" + arr.length);//5
            System.out.println("arr数组的第1个元素:" + arr[0]);//1 下标从0开始
            System.out.println("arr数组的第2个元素:" + arr[1]);//2
            System.out.println("arr数组的第3个元素:" + arr[2]);//3
            System.out.println("arr数组的第4个元素:" + arr[3]);//4
            System.out.println("arr数组的第5个元素:" + arr[4]);//5
    
            //修改第1个元素的值
            //此处arr[0]相当于一个int类型的变量
            arr[0] = 100;
            System.out.println("arr数组的第1个元素:" + arr[0]);//100
        }
    }

    2.4 一维数组的遍历

  • 将数组中的每个元素分别获取出来,就是遍历。for循环与数组的遍历是绝配。
  • 举例1
    public class ArrayTest4 {
        public static void main(String[] args) {
            int[] arr = new int[]{1,2,3,4,5};
            //打印数组的属性,输出结果是5
            System.out.println("数组的长度:" + arr.length);
    
            //遍历输出数组中的元素
            System.out.println("数组的元素有:");
            for(int i=0; i<arr.length; i++){
                System.out.println(arr[i]);
            }
        }
    }

    举例2

    public class ArrayTest5 {
        public static void main(String[] args) {
            int[] arr = new int[5];
    
            System.out.println("arr数组的长度:" + arr.length);
            System.out.print("存储数据到arr数组之前:[");
            //如果int i=1;i<=arr.length-1;i++
            for (int i = 0; i < arr.length; i++) {
                if(i==0){
                    System.out.print(arr[i]);
                }else{
                    System.out.print("," + arr[i]);
                }
            }
            System.out.println("]");
    
    
    
            //初始化
     		/* 
     		arr[0] = 2;
            arr[1] = 4;
            arr[2] = 6;
            arr[3] = 8;
            arr[4] = 10;
            */
    
            for (int i = 0; i < arr.length; i++){
                arr[i] = (i+1) * 2;
            }
    
            System.out.print("存储数据到arr数组之后:[");
            for (int i = 0; i < arr.length; i++) {
                if(i==0){
                    System.out.print(arr[i]);
                }else{
                    System.out.print("," + arr[i]);
                }
            }
            System.out.println("]");
        }
    }

    2.5 数组元素的默认值

  • 数组是引用类型,当我们使用动态初始化方式创建数组时,元素值只是默认值。例如:
    public class ArrayTest6 {
    	public static void main(String argv[]){
    		int a[]= new int[5]; 
    		System.out.println(a[3]); //a[3]的默认值为0
    	}
    } 

    对于基本数据类型而言,默认初始化值各有不同。

  • 数据类型默认初始化值
    整型数组元素0
    浮点型数组元素0.0
    字符型数组元素0
    boolean型数组元素false
    引用数据类型数组元素null
    public class ArrayTest7 {
        public static void main(String[] args) {
            //存储26个字母
            char[] letters = new char[26];
            System.out.println("letters数组的长度:" + letters.length);
            System.out.print("存储字母到letters数组之前:[");
            for (int i = 0; i < letters.length; i++) {
                if(i==0){
                    System.out.print(letters[i]);
                }else{
                    System.out.print("," + letters[i]);
                }
            }
            System.out.println("]");
    
    
    
           //存储5个姓名
            String[] names = new String[5];
            System.out.println("names数组的长度:" + names.length);
            System.out.print("存储姓名到names数组之前:[");
            for (int i = 0; i < names.length; i++) {
                if(i==0){
                    System.out.print(names[i]);
                }else{
                    System.out.print("," + names[i]);
                }
            }
            System.out.println("]");
        }
    }

3. 一维数组内存分析

3.1 Java虚拟机的内存划分

区域名称作用
虚拟机栈用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度 的各种基本数据类型、对象引用,方法执行完,自动释放。
用于存放数组的实体(即数组中的所有元素)。存储对象(包括数组对象),new来创建的,都存储在堆内存。
方法区存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。
本地方法栈当程序中调用了native的本地方法时,本地方法执行期间的内存区域
程序计数器程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址

3.2 一维数组在内存中的存储

1、一个一维数组内存图

2、数组下标为什么是0开始

 因为第一个元素距离数组首地址间隔0个单元格。

3、两个一维数组内存图

两个数组独立

public static void main(String[] args) {
    int[] arr = new int[3];
    int[] arr2 = new int[2];
    System.out.println(arr);
    System.out.println(arr2);
}

4、两个变量指向一个一维数组

两个数组变量本质上代表同一个数组。

public static void main(String[] args) {
    // 定义数组,存储3个元素
    int[] arr = new int[3];
    //数组索引进行赋值
    arr[0] = 5;
    arr[1] = 6;
    arr[2] = 7;
    //输出3个索引上的元素值
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);
    //定义数组变量arr2,将arr的地址赋值给arr2
    int[] arr2 = arr;
    arr2[1] = 9;
    System.out.println(arr[1]);
}

4. 一维数组的应用

案例1:升景坊单间短期出租4个月,550元/月(水电煤公摊,网费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);//18013820100
      }
}

案例2:输出英文星期几

用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词 {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}

public class WeekArrayTest {
    public static void main(String[] args) {

        //1. 声明并初始化星期的数组
        String[] weeks = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};

        //2. 使用Scanner从键盘获取1-7范围的整数
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入[1-7]范围的整数:");
        int number = scanner.nextInt();

        if(number < 1 || number > 7){
            System.out.println("你输入的输入非法");
        }else{

            //3. 根据输入的整数,到数组中相应的索引位置获取指定的元素(即:星期几)
            System.out.println("对应的星期为:" + weeks[number - 1]);

        }
        
        scanner.close();

    }
}

案例3:从键盘读入学生成绩,找出最高分,并输出学生成绩等级。

  • 成绩>=最高分-10 等级为’A’

  • 成绩>=最高分-20 等级为’B’

  • 成绩>=最高分-30 等级为’C’

  • 其余 等级为’D’

提示:先读入学生人数,根据人数创建int数组,存放学生成绩。

public class ScoreTest1 {
    public static void main(String[] args) {

        //1. 根据提示,获取学生人数
        System.out.print("请输入学生人数:");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        //2. 根据学生人数,创建指定长度的数组 (使用动态初始化)
        int[] scores = new int[count];

        //3. 使用循环,依次给数组的元素赋值
        int maxScore = 0; //记录最高分
        System.out.println("请输入" + count + "个成绩");
        for (int i = 0; i < scores.length; i++) {
            scores[i] = scanner.nextInt();
            //4. 获取数组中元素的最大值,即为最高分
            if(maxScore < scores[i]){
                maxScore = scores[i];
            }
        }

        System.out.println("最高分是:" + maxScore);

        //5. 遍历数组元素,输出各自的分数,并根据其分数与最高分的差值,获取各自的等级
        char grade;
        for (int i = 0; i < scores.length; i++) {

            if(scores[i] >= maxScore - 10){
                grade = 'A';
            }else if(scores[i] >= maxScore - 20){
                grade = 'B';
            }else if(scores[i] >= maxScore - 30){
                grade = 'C';
            }else{
                grade = 'D';
            }
            System.out.println("student " + i + " socre is " + scores[i] + ", grade is " + grade);
        }
        //关闭资源
        scanner.close();

    }
}

5. 多维数组的使用

5.1 概述

应用举例1:

某公司2022年全年各个月份的销售额进行登记。按月份存储,可以使用一维数组。如下:

int[] monthData = new int[]{23,43,22,34,55,65,44,67,45,78,67,66};

如果改写为按季度为单位存储怎么办呢?  

int[][] quarterData = new int[][]{{23,43,22},{34,55,65},{44,67,45},{78,67,66}};

 应用举例2:

 高一年级三个班级均由多个学生姓名构成一个个数组。如下:

String[] class1 = new String[]{"段誉","令狐冲","任我行"};

String[] class2 = new String[]{"张三丰","周芷若"};

String[] class3 = new String[]{"赵敏","张无忌","韦小宝","杨过"};

那从整个年级看,我们可以声明一个二维数组。如下:

String[][] grade = new String[][]{{"段誉","令狐冲","任我行"},{"张三丰","周芷若"},{"赵敏","张无忌","韦小宝","杨过"}};
  • 对于二维数组的理解,可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。

  • 其实,从数组底层的运行机制来看,其实没有多维数组。

5.2 声明与初始化

5.2.1 声明

二维数组声明的语法格式:

//推荐
元素的数据类型[][] 二维数组的名称;

//不推荐
元素的数据类型  二维数组名[][];
//不推荐
元素的数据类型[]  二维数组名[];


例如:
public class Test20TwoDimensionalArrayDefine {
    public static void main(String[] args) {
        //存储多组成绩
        int[][] grades;

        //存储多组姓名
        String[][] names;
    }
}

面试:

int[] x, y[];
//x是一维数组,y是二维数组

5.2.2 静态初始化

格式:

int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};

定义一个名称为arr的二维数组,二维数组中有三个一维数组

  • 每一个一维数组中具体元素也都已初始化

    • 第一个一维数组 arr[0] = {3,8,2};

    • 第二个一维数组 arr[1] = {2,7};

    • 第三个一维数组 arr[2] = {9,0,1,6};

  • 第三个一维数组的长度表示方式:arr[2].length;

  • 举例1:

int[][] arr = {{1,2,3},{4,5,6},{7,8,9,10}};//声明与初始化必须在一句完成

int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}};

int[][] arr;
arr = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}};

arr = new int[3][3]{{1,2,3},{4,5,6},{7,8,9,10}};//错误,静态初始化右边new 数据类型[][]中不能写数字

举例2:

public class TwoDimensionalArrayInitialize {
    public static void main(String[] args) {
        //存储多组成绩
        int[][] grades = {
                    {89,75,99,100},
                    {88,96,78,63,100,86},
                    {56,63,58},
                    {99,66,77,88}
                };

        //存储多组姓名
        String[][] names = {
            {"张三","李四", "王五", "赵六"},
            {"刘备","关羽","张飞","诸葛亮","赵云","马超"},
            {"曹丕","曹植","曹冲"},
            {"孙权","周瑜","鲁肃","黄盖"}
        };
    }
}
5.2.3 动态初始化

如果二维数组的每一个数据,甚至是每一行的列数,需要后期单独确定,那么就只能使用动态初始化方式了。动态初始化方式分为两种格式:

格式1:规则二维表:每一行的列数是相同的

//(1)确定行数和列数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
	//其中,m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
	//其中,n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格

//此时创建完数组,行数、列数确定,而且元素也都有默认值

//(2)再为元素赋新值
二维数组名[行下标][列下标] = 值;

 举例

int[][] arr = new int[3][2];
  • 定义了名称为arr的二维数组

  • 二维数组中有3个一维数组

  • 每一个一维数组中有2个元素

  • 一维数组的名称分别为arr[0], arr[1], arr[2]

  • 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;

格式2:不规则:每一行的列数不一样

//(1)先确定总行数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];

//此时只是确定了总行数,每一行里面现在是null

//(2)再确定每一行的列数,创建每一行的一维数组
二维数组名[行下标] = new 元素的数据类型[该行的总列数];

//此时已经new完的行的元素就有默认值了,没有new的行还是null

//(3)再为元素赋值
二维数组名[行下标][列下标] = 值;

 举例:

int[][] arr = new int[3][];
  • 二维数组中有3个一维数组。

  • 每个一维数组都是默认初始化值null (注意:区别于格式1)

  • 可以对这个三个一维数组分别进行初始化:arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2];

  • 注:int[][]arr = new int[][3]; //非法  

  • /*
     1
     2 2
     3 3 3
     4 4 4 4
     5 5 5 5 5
     */
    public class Test25DifferentElementCount {
        public static void main(String[] args){
            //1、声明一个二维数组,并且确定行数
            //因为每一行的列数不同,这里无法直接确定列数
            int[][]  arr = new int[5][];
    
            //2、确定每一行的列数
            for(int i=0; i<arr.length; i++){
    			/*
    			arr[0] 的列数是1
    			arr[1] 的列数是2
    			arr[2] 的列数是3
    			arr[3] 的列数是4
    			arr[4] 的列数是5
    			*/
                arr[i] = new int[i+1];
            }
    
            //3、确定元素的值
            for(int i=0; i<arr.length; i++){
                for(int j=0; j<arr[i].length; j++){
                    arr[i][j] = i+1;
                }
            }
    
            //4、遍历显示
            for(int i=0; i<arr.length; i++){
                for(int j=0; j<arr[i].length; j++){
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println();
            }
    
        }
    }

    5.3 数组的长度和角标

  • 二维数组的长度/行数:二维数组名.length

  • 二维数组的某一行:二维数组名[行下标],此时相当于获取其中一组数据。它本质上是一个一维数组。行下标的范围:[0, 二维数组名.length-1]。此时把二维数组看成一维数组的话,元素是行对象。

  • 某一行的列数:二维数组名[行下标].length,因为二维数组的每一行是一个一维数组。

  • 某一个元素:二维数组名[行下标][列下标],即先确定行/组,再确定列。

    public class Test22TwoDimensionalArrayUse {
        public static void main(String[] args){
            //存储3个小组的学员的成绩,分开存储,使用二维数组。
    		/*
    		int[][] scores1;
    		int scores2[][];
    		int[] scores3[];*/
    
            int[][] scores = {
                    {85,96,85,75},
                    {99,96,74,72,75},
                    {52,42,56,75}
            };
    
            System.out.println(scores);//[[I@15db9742
            System.out.println("一共有" + scores.length +"组成绩.");
    
            //[[:代表二维数组,I代表元素类型是int
            System.out.println(scores[0]);//[I@6d06d69c
            //[:代表一维数组,I代表元素类型是int
            System.out.println(scores[1]);//[I@7852e922
            System.out.println(scores[2]);//[I@4e25154f
            //System.out.println(scores[3]);//ArrayIndexOutOfBoundsException: 3
    
            System.out.println("第1组有" + scores[0].length +"个学员.");
            System.out.println("第2组有" + scores[1].length +"个学员.");
            System.out.println("第3组有" + scores[2].length +"个学员.");
    
            System.out.println("第1组的每一个学员成绩如下:");
            //第一行的元素
            System.out.println(scores[0][0]);//85
            System.out.println(scores[0][1]);//96
            System.out.println(scores[0][2]);//85
            System.out.println(scores[0][3]);//75
            //System.out.println(scores[0][4]);//java.lang.ArrayIndexOutOfBoundsException: 4
        }
    }

    5.4 二维数组的遍历

  • 格式
    for(int i=0; i<二维数组名.length; i++){ //二维数组对象.length
        for(int j=0; j<二维数组名[i].length; j++){//二维数组行对象.length
            System.out.print(二维数组名[i][j]);
        }
        System.out.println();
    }

    举例:

    public class Test23TwoDimensionalArrayIterate {
        public static void main(String[] args) {
            //存储3个小组的学员的成绩,分开存储,使用二维数组。
            int[][] scores = {
                    {85,96,85,75},
                    {99,96,74,72,75},
                    {52,42,56,75}
            };
    
            System.out.println("一共有" + scores.length +"组成绩.");
            for (int i = 0; i < scores.length; i++) {
                System.out.print("第" + (i+1) +"组有" + scores[i].length + "个学员,成绩如下:");
                for (int j = 0; j < scores[i].length; j++) {
                    System.out.print(scores[i][j]+"\t");
                }
                System.out.println();
            }
        }
    }

    数组元素默认初始化值

1).外层元素,默认存储地址值

2).内层元素,默认与一维数组元素的不同类型的默认值规定相同

5.5 内存解析

二维数组本质上是元素类型是一维数组的一维数组。

int[][] arr = {
    {1},
    {2,2},
    {3,3,3},
    {4,4,4,4},
    {5,5,5,5,5}
};

 

5.6 应用举例

案例1:获取arr数组中所有元素的和。

提示:使用for的嵌套循环即可。

int sum=0;
int [][]arr=new int[][]{{3,5,8},{12,9},{7,0,6,4}};
for (int i=0;i< arr.length;i++){
    for (int j=0;j<arr[i].length;j++){
    sum+=arr[i][j];
    }
}
System.out.println("总和为:"+sum);

 案例2:声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是:

声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是:
a)    x[0] = y;                 //no
b)    y[0] = x;                 //yes
c)    y[0][0] = x;              //no
d)    x[0][0] = y;              //no
e)    y[0][0] = x[0];           //yes
f)    x = y;                    //no

提示:
一维数组:int[] x  或者int x[]   
二维数组:int[][] y 或者  int[] y[]  或者 int  y[][]

案例3:使用二维数组打印一个 10 行杨辉三角。

提示:

  1. 第一行有 1 个元素, 第 n 行有 n 个元素

  2. 每一行的第一个元素和最后一个元素都是 1

  3. 从第三行开始, 对于非第一个元素和最后一个元素的元素。即:

    yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
    public class YangHuiTest {
        public static void main(String[] args) {
    
            //1. 动态初始化的方式创建二维数组
            int[][] yangHui = new int[10][];
    
            for (int i = 0; i < yangHui.length; i++) {
                yangHui[i] = new int[i + 1];
    
                //2. 给数组元素赋值
                // 2.1 给外层数组元素中的首元素和末元素赋值
                yangHui[i][0] = yangHui[i][i] = 1;
    
                //2.2 给外层数组元素中的非首元素和非末元素赋值(难)
                //if(i > 1){ //从 i == 2 开始执行
                    for(int j = 1;j < yangHui[i].length - 1;j++){ //非首元素和非末元素的角标范围
                        yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
    
                    }
                //}
            }
    
    
    
            //3. 遍历二维数组
            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();
            }
    
        }
    }

6. 数组的常见算法

7. Arrays工具类的使用

8. 数组中的常见

异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值