当前位置: 首页 > news >正文

Java一、二维数组

目录

一、一维数组

2、数组的定义和初始化

3、数组的访问,与赋值

1. 数组的访问

2. 数组的赋值、修改

3.获取数组的长度

4. 数组遍历

4、练习

例题1.在一个数组中求最值

案例2:

Math.random() 方法说明


二、二维数组

1、二维数组的定义和初始化

2、二维数组访问、遍历、求行列的长度

3、二维数组案例(练习)


一、一维数组

  • 数组(Array)是一种基本的数据结构,用来存储相同类型的多个元素
  • 数组中的每个元素都有一个索引(从0开始),可以通过索引来访问特定位置的元素
  • 在Java中,数组一旦创建,其长度是固定的

上面我们知道了什么是数组,那么为什么要使用数组?

1、数据组织的需求

        前面我们学习了变量,如果用变量来处理一个班级的成绩太过于麻烦,需要创建上百甚至上千个变量。那么这时就可以使用数组。

2.、批量操作便利

  • 可以通过循环轻松遍历所有元素
  • 统一处理同类型数据集合

3、内存效率

  • 数组在内存中连续存储,访问速度快
  • 相比多个独立变量更节省内存管理开销

Java数组的基本特点

  • 类型安全:只能存储指定类型的元素
  • 固定长度:创建后不能改变大小
  • 索引访问:通过下标快速访问元素,时间复杂度O(1)
  • 内存连续:元素在内存中顺序排列

上面我们了解了数组,那么下面我们来学习数组的定义和初始化

2、数组的定义和初始化

静态初始化数组

定义的时候已经确认了数据元素,定义和初始化同时进行

数据类型 [ ] 数组名 = {元素1, 元素2,元素3.....}

数据类型 [ ] 数据名  = new 数据类型[ ]{元素1, 元素2,元素3.....}

        如果我们一开始不知道数据中的元素,(数组中的数据需要用户属如)上面的定义就有缺陷了。所以就需要使用另一种定义方式。

动态初始化数组:

  • 定义数组时不存入具体的元素值,确认数组存储的数据类型数组的长度。

数据类型[ ] 数组名 = new 数据类型[长度];//这里的长度可以是变量int n = 10;

        上面的定义我们学会了那么疑问来了:如果使用动态初始化数组,在定义的时候我们并没有给数组赋值。如果我们此时访问数组,数组中都是什么值?在Java数组中,动态初始化数组元素默认值规则。

3、数组的访问,与赋值

        此时我们已经学会了数组的定义,接下来我们在讲解数组的使用

1. 数组的访问

  • 数组名[索引]来访问数组。
  • 数组是通过下标索引进行访问的,但是需要注意的是,数组第一个元素的下标为0,最后一个元素的下标为数组长度 - 1(length - 1)。
  • 在访问数组时候一定要注意访问的范围为0 ~ length - 1,不要越界。
  • 如果数组没有初始化,会返回对应类型的默认值。
int[] arr = {1, 2, 3};
int n = arr[1];  //这里n就访问到了数组中的第2个元素2.

2. 数组的赋值、修改

  • 给数组赋值是也是要在对数组做访问。也需要注意下标范围。
int []arr = {1, 32, 3};
arr[1] = 2; //这里对数组中的第二个元素的值进行修改

如果我们使用动态初始化定义的数组那么我们就需要对数组赋值。

public class test {public static void main(String[] args) {int []arr = new int[5];for (int i = 0; i < 5; i++) {arr[i] = i;}}
}

3.获取数组的长度

  • Java中使用:数组名.length 获取数组的长度用int;类型接收。
  • length 是数组的属性,不是方法,所以不需要加括号
  • 这种方式适用于所有类型的数组(一维、多维等)
  • 建议使用 arr.length ,提高代码的健壮性。
public class test {public static void main(String[] args) {int []arr = new int[5];int len = arr.length;System.out.println(len); //5}
}

4. 数组遍历

  • 一个一个访问数组元素

方法1:

public class test {//数组的遍历public static void main(String[] args) {int []arr = new int[]{1, 2, 3, 4, 5};for(int i = 0; i < arr.length; i++){System.out.println(arr[i]);}}
}

 方法2:

public class test {//数组的遍历public static void main(String[] args) {int []arr = new int[]{1, 2, 3, 4, 5};for(int vol: arr){//这里的vol是数组中的元素值System.out.println(vol);}}
}

注意:

  • 增强for循环无法获取当前元素的索引
  • for(int vol: arr) 中的 vol 是数组元素的副本。修改 vol 不会影响原数组元素
  • 适用于只需要访问数组元素值的场景。

4、练习

例题1.在一个数组中求最值

public class test {//数组的遍历public static void main(String[] args) {int []arr = new int[]{9, 2, 99, 4, 5};System.out.println(getMax(arr));}public static int getMax(int[] arr) {int max = arr[0];// 遍历数组找到最大值for (int i = 1; i < arr.length; i++) {int data = arr[i];if (max < data) {max = data;}}return max;}
}
//结果:
//99

案例2:

public class test {//数组的遍历public static void main(String[] args) {start();}//做牌:创建一个动态初始化数组存储54张牌public static void start(){String[] arr = new String[54];//存储花色String[] colors = {"♠","♥","♣","♦"};//存储牌String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};int index = 0;for(int i = 0;i < numbers.length;i++){for(int j = 0;j < colors.length;j++){arr[index++] = colors[j]+numbers[i];}}arr[index++] = "小王";arr[index] = "大王";//打印♠A	♥A	♣A	♦A	♠2	♥2	♣2	♦2	♠3	♥3	♣3	♦3....for(int i = 0;i < arr.length;i++){System.out.print(arr[i] + "\t");}System.out.println();//把牌洗牌// 随机打乱数组元素顺序// 通过遍历数组,为每个位置随机选择另一个位置进行元素交换for(int i = 0;i < arr.length;i++){// 生成一个随机索引j,范围在[0, arr.length-1]int j = (int)(Math.random()*arr.length);//Math.random()生成随机数,范围在[0, 1)// 交换arr[i]和arr[j]两个位置的元素String temp = arr[i];arr[i] = arr[j];arr[j] = temp;}//打印洗牌后的牌for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + '\t');}System.out.println();}
}

Math.random() 方法说明

  • 功能:Math.random() 是Java标准库中的静态方法,用于生成随机数
  • 返回值:返回一个 double 类型的随机数,范围在 [0, 1) 之间(包含0,不包含1)
  • 使用方式:无需创建 Math 类的实例,直接通过类名调用

二、二维数组

前面我们学习了数组,这里我们来学习一下二维数组。

二维数组中的元素还是一个数组。就类似于一张表,有行有列。

1、二维数组的定义和初始化

因为学习了一维数组这里值=只需要类比一维学习即可,所以不详细写了。

//初始化二维数组
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
//二维数组动态初始化数组
int[][] arr2 = new int[5][5];
int[][] arr3 = new int[5][];//不完全初始化,只能省略第二个维度

2、二维数组访问、遍历、求行列的长度

访问

  • 访问方法:数组名[行索引][列索引]
  • 如果二维数组为n行m列,二维数组也是从0开始。最左上角元素索引为[0] [0],最右下角元素索引为[n - 1][m - 1]
//二维数组访问
int arr[][]  = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(arr[0][0]);//结果:1

遍历

        二维数组的遍历需要用到循环嵌套。双层循环。

public class test {public static void main(String[] args) {int arr[][]  = {{1,2,3},{4,5,6},{7,8,9}};//遍历二维数组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();}}
}

求长度

int arr[][]  = {{1,2,3,5},{4,5,6,6},{7,8,9,7}};
System.out.println(arr.length); //行
System.out.println(arr[0].length);//列

3、二维数组案例(练习)

/*** 测试类,包含主方法和相关工具方法*/
public class test {/*** 程序入口方法,调用start方法处理4x4数组* @param args 命令行参数*/public static void main(String[] args) {start(4);}/*** 初始化二维数组并打乱其元素顺序* @param n 二维数组的行列数*/public static void start(int n){// 创建n×n的二维数组int arr[][] = new int[n][n];int ant = 1;// 按顺序填充数组,从1开始递增for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){arr[i][j] = ant;ant++;}}printArray(arr);// 打乱二维数组for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){int random1 = (int)(Math.random() * n);int random2 = (int)(Math.random() * n);int temp = arr[i][j];arr[i][j] = arr[random1][random2];arr[random1][random2] = temp;}}System.out.println("打乱后的数组为:");printArray(arr);}/*** 打印二维数组* @param arr 待打印的二维数组*/public static void printArray(int[] [] arr){for (int i = 0; i < arr.length; i++){for (int j = 0; j < arr[i].length; j++){System.out.printf("%4d",arr[i][j]);}System.out.println();}}
}

注意:数组名的本质

  • Java中的数组名是一个引用(reference),而不是直接的内存地址
  • 这个引用指向堆内存中数组对象的存储位置
http://www.dtcms.com/a/512359.html

相关文章:

  • 企业网站模板观叫湖南岚鸿团队discuz好还是wordpress
  • 定制网站开发系统wordpress 繁简转换插件
  • 饲料网站建设 中企动力怎么做钓鱼网站生成器
  • vue 中 file-saver 功能介绍,使用场景,使用示例
  • 战略选择与系统性杠杆效应
  • @tanstack/react-query中isLoading,isFetchingisRefetching的区别
  • 深入解析C语言中的位域(Bit Fields):原理、规则与实践
  • 从前端到 Java 后端:一份详细转型路线指南
  • 专题学习网站模板虚拟主机网站源码
  • 持久化输出与 ChatMemory
  • 网站建设新手指南营销网站建设企业
  • 网站头页免费申请一个不花钱网站
  • BERT,GPT,ELMO模型对比
  • Memory Decoder: A Pretrained, Plug-and-PlayMemory for Large Language Models
  • 普通服务器都能跑:深入了解 Qwen3-Next-80B-A3B-Instruct
  • 【21】MFC入门到精通——MFC 调试及运行状态下,使用printf() 或者 cout 打印输出信息
  • 使用 rqt_reconfigure 实时控制 ROS 自定义话题参数
  • 公司电脑做网站网站优化平台有哪些
  • 软件公司网站模版网站首页 栏目页 内容页
  • 【论文精读-4】RBG:通过强化学习分层解决物流系统中的大规模路径问题(Zefang Zong,2022)
  • 慢查询优化
  • 什么大型网站用python做的杭州科技公司排名
  • 四个字网站 域名莱芜金点子信息港最新招聘
  • 【算法笔记】暴力递归尝试
  • 一次学会二分法——力扣278.第一个错误的版本
  • 数据结构——二十七、十字链表与邻接多重链表(王道408)
  • 网站公司做的网站被攻击苏州网络推广
  • 网站权重能带来什么作用灰大设计导航网
  • i.MX6ULL Linux内核启动流程深度解析
  • Browser-Use 打造可操作浏览器的 AI 智能体