Logo

郎哥编程

二维数组

2019-12-11 1152

前面介绍了一维数组。在实际问题中有些数据信息是二维的或者多维的。多维数组元素有多个下标,以标识它在数组中的位置。本课只介绍二维数组,多维数组可由二维数组类推而得到。

声明二维数组

二维数组的声明与一维数组类似,只是需要给出两对方括号,声明二维数组的语法为:

类型说明符   数组名[][];

例如:

int  a[][];
double  score[][];

其中,声明语句的第一个方括号可以称为行数组,第二个方括号可以称为列数组。

二维数组的初始化

同一维数组类似,二维数组在使用前也要进行初始化。初始化也分为动态初始化和静态初始化。

1、静态初始化

静态初始化是在数组声明时,对声明的数组元素赋初值的过程。

例如:

int  array[][] = {{3,-9,6},{8,0,1},{11,9,8}};

声明并初始化数组array,它有3个元素,每个元素又都是有3个元素的一维数组。外层大括号对里面的元素是行数组的元素,因为行数组元素是一维数组,因此每个行数组元素也用大括号对包括起来,里面的元素是列数组的元素。

另外,用指定初值的方式对数组进行初始化时,列数组元素的个数可以不同。

例如:

int  array[][] = {{3,6},{8,0,1},{11,9,8}};

此时,第一个列数组的元素个数是2,第二个和第三个列数组的元素个数是3个。

2、动态初始化

动态初始化同一维数组相同,也是先声明数组,然后通过new运算符分配内存。语法格式为:

类型说明符  数组名[][] = new 类型说明符[数组长度][];

或:

类型说明符  数组名[][] = new 类型说明符[数组长度][ 数组长度];

例如:

int  array[][];
array = new int[3][];
array = new int[3][3];

使用数组的最基本操作是数组元素的访问,对数组的使用最终都通过对元素的使用而实现。数组的元素通过数组下标进行访问。前面已经讲过,在Java语言中,数组下标是从0开始的,所以包含n个元素的数组下标的范围是0到n-1。例如:前面定义的数组a,其下标范围为0到4。要访问a数组的元素,可通过a[0]、a[1]、a[2]、a[3]、a[4]访问a数组的各个元素,此时,方括号中的数字是数组的下标,表示访问数组的第几个元素。

二维数组元素的访问

二维数组的元素通过两个下标进行访问,分别是行数组下标和列数组下标,例如:对于二维数组a,可通过a[i][j]进行访问,其中i和j为数组a的下标。二维数组行数组的长度可通过a.length获取,列数组的长度可通过a[i]. length获取。

例如:

int  a[][] = {{3,-9,6},{8,0,1},{11,9,8}};
int  i,j;
for( i = 0; i < a.length; i++ )
{
 for(j=0; j<a[i]. length;j++)
System.out.printf("a[ %d][%d] 数组元素的值为: %d;\n",i,ja[i][j]);   
}

在遍历数组的外层for循环中,循环条件为a.length,a.length就是行数组长度的值,在内层for循环中,循环条件为a[i]. length,a[i]. length为当前行数组第i个元素数组的长度。

二维数组的存储结构

前面array数组的存储结构如下图所示:

 image.png     

                                       

array数组存储结构图

下面通过一个完整的示例,演示如何声明一个二维数组,赋值并输出。

案例1:用二维数组实现同学通讯录。

在PbaseUnit12项目unit包下创建ArraySample2类。代码如下:

/** 
* @Title: ArraySample2.java 
* @Package unit 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.util.Scanner;
 
/** 
* @ClassName: ArraySample2 
* @Description: 数组结构(二维数组)案例1 
* @author 编程训练营 
* @date 
* 
*/
 
public class ArraySample2 {
 
    /**
     * @Title: main
     * @Description:Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型
     * @throws
     */
 
    public static void main(String[] args) {
       /**
        * 声明并初始化存储同学通讯录的二维数组
        * 该二维数组中行数组有3个元素
        * 列数组有2个元素,分别存储姓名、联系电话
        */
       String phone[][] = new String[3][2];
       // count为循环次数
       int count = 3;
       // i为循环变量
       int i;
       Scanner sc = new Scanner(System.in);
 
       // 循环接收用户输入的同学的姓名和电话
       for (i = 0; i < count; i++) {
 
           System.out.printf("请输入 %d 个同学的姓名: ", i + 1);
           phone[i][0] = sc.next();
           System.out.printf("请输入 %d 个同学的电话: ", i + 1);
           phone[i][1] = sc.next();
       }
       System.out.println("*****同学通讯录******");
       // 循环二维数组
       for (i = 0; i < count; i++) {
           System.out.printf("姓名:%s  联系电话:%s \n", phone[i][0], phone[i][1]);
       }
    }
 
}

程序结构分析

程序功能主要是演示二维数组声明、初始化、动态赋值、输出数组元素的使用方法。

程序声明一个二维数组phone,其中行数组有3个元素,存储3个同学的信息,列数组有2个元素,分别存储同学的姓名和电话。程序通过循环依次获取用户输入的3位同学的姓名和电话,并存储到二维数组中。最后,循环输出每位同学的姓名和电话号码。

程序执行结果如下图所示:

image.png

二维数组用于描述多行多列的数据结构。例如:超市的商品货柜可以用二维数组进行描述,商品货柜是由多行和多列组成的网格,商品货柜的行号和列号可以确定唯一的格子单元;再如:学校教室课桌的安排也是多行多列的数据结构,课桌的位置由课桌所在的行数和课桌所在的列数确定。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论