【从浅到深的算法技巧】3.数组

1.1.5数组

数组能够顺序存储相同类型的多个数据。除了存储数据,我们也希望能够访问数据。访问数组中的某个元素的方法是将其编号然后索引。如果我们有N个值,它们的编号则为0至N-1。这样对于0到N-1之间任意的i,我们就能够在Java代码中用a[i]唯一地表示第i 个元索的值。在Java中这种数组被称为一维数组。

1.1.5.1创建并初始化数组

在Java程序中创建一个数组需要 三步:

1.声明数组的名字和类型;

2.创建数组;

3.初始化数组元素。

在声明数组时,需要指定数组的名称和它含有的数据的类型。在创建数组时,需要指定数组的长度(元素的个数)。例如,在以下代码中,“完整模式”部分创建了个有N个元素的double数组,所有的元素的初始值都是0.0。第一条语句是数组的声明,它和声明一个相应类型的原始数据类型变量十分相似,只有类型名之后的方括号说明我们声明的是一个数组。第二条语句中的关键字new使Java创建了这个数组。我们需要在运行时明确地创建数组的原因是Java编译器在编译时无法知道应该为数组预留多少空间(对于原始类型则可以)。for语句初始化了数组的N个元素,将它们的值置为0.0。在代码中使用数组时,一定要依次声明、创建并初始化数组。忽略了其中的任何一步都是很常见的编程错误。

声明、创建并初始化一个数组
//完整模式double[] a;//声明数组a = new double[N] ; //创建数组for (int i=0; 1 <N; i++)a[i] = 0.0;//初始化数组//简化写法:double[] a = new double[N];//声明初始化:int[]a={1,1,2,3,5,8};
1.1.5.2简化写法

为了精简代码,我们常常会利用Java对数组默认的初始化来将三个步骤合为一条语句, 即上例中的简化写法。等号的左侧声明了数组,等号的右侧创建了数组。这种写法不需要for循环,因为在一个Java数组中double类型的变量的默认初始值都是0.0,但如果你想使用不同的初始值,那[8]么就需要使用for循环了。数值类型的默认初始值是0,布尔型的默认初始值是false。 例子中的第三种方式用花括号将一列由逗号分隔的值在编译时将数组初始化。

1.1.5.3 使用数组

典型的数组处理代码请见下表在声明并创建数组之后,在代码的任何地方都能通过数组名之后的方括号中的索引来访问其中的元素。数组一经创建, 它的大小就是固定的。程序能够通过a. length获取数组a[]的长度,而它的最后一个元素总是a[a.1ength - 1]。 Java 会自动进行边界检查一如果你创建了一个大小为N的数组,但使用了一个小于0或者大于N-1的索引访问它,程序会因为运行时抛出ArrayOutOfBoundsException异常而终止。

典型的数组处理代码
任务实现(代码片段)
找出数组中最大的元素doube max=a[0]; for(int i=0; i<a.length; i++){ if (a[i] > max) max=a[i]; }
计算数组元素的平均值int N=a. length; double sum=0.0; for (int i =0: i <N; i++){ sum+=a[i]; double average = sum / N; }
复制数组int N=a. length; double[] b= new double[N]; for (int i =0: i <N; i++){ b[i]=a[i]; }
颠倒数组元素的顺序int N=a. length; for (int i =0: i <N/2; i++){ double temp=a[i]; a[i] = a[N-i-1] ; a[N-i-1] = temp; }
矩阵相乘 a[] [] * b[] []=c[] []int N=a. length; double[][] [] [] c=new double[N]; for (int i =0: i <N; i++){ for(int j=0;j<N; j++){ for Cint k=0;k<N; k++) c[i] [j] += a[i] [k]*b[k] [j];
1.1.5.4起别名

请注意,数组名表示的是整个数组——如果我们将 -个数组变量赋予另-一个变量, 那么两个变量将会指向同一个数组。例如以下这段代码:

int[] a= new int[N];a[i] = 1234;int] b= a;b[i]= 5678; // a[i]的值也会变成5678

这种情况叫做起别名,有时可能会导致难以察觉的问题。如果你是想将数组复制一份, 那么应该声明、创建并初始化一个新的数组,然后将原数组中的元素值挨个复制到新数组。

1.1.5.5二维数组

在Java中二维数组就是一维数组的数组。二维数组可以是参差不齐的(元素数组的长度可以不致),但大多数情况下(根据合适的参数M和N)我们都会使用M*N,即M行长度为N的数组的二维数组(也可以称数组含有N列)。在lava中访向二维数组也很简单。二维数组a[] []的第i行第j列的元素可以写作a[i] [j]。声明二维数组需要两对方括号。创建二维 数组时要在类型名之后分别在方括号中指定行数以及列数,例如:

double[] [] a = new double[M] [N];

我们将这样的数组称为M*N的数组。我们约定,第一维是行数,第二维是列数。和一维数组一样,Java会将数值类型的数组元素初始化为0,将布尔型的数组元素初始化为false。默认的初始化对二维数组更有用,因为可以节约更多的代码。下面这段代码和刚才只用一行就完成创建 和初始化的语句是等价的:

double[][] a;a = new double[M] [N];for (int j=0; j <N; j++)a[i] [j]=0.0;

在将二维数组初始化为0时这段代码是多余的,但是如果想要初始化为其他值,我们就需要嵌套的for循环了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序for循环中key值的作用?

在小程序的 for 循环中&#xff0c;key 值有两个主要作用&#xff1a; 识别列表项的唯一性&#xff1a;当在列表渲染时使用 for 循环&#xff0c;每个列表项都应该具有一个唯一的 key 值。这个 key 值用于帮助小程序识别每个列表项的唯一性&#xff0c;以便在列表发生变化时进行…

OpenWrt 编译入门(小白版)

编译环境 示例编译所用系统为 Ubuntu 22.04&#xff0c;信息如下 编译时由于网络问题&#xff0c;部分软件包可能出现下载问题&#xff0c;还请自备网络工具或尝试重新运行命令 编译步骤 下图为官网指示 编译环境设置&#xff08;Build system setup&#xff09; 这里根据我…

【小沐学NLP】Python实现K-Means聚类算法(nltk、sklearn)

文章目录 1、简介1.1 机器学习1.2 K 均值聚类1.2.1 聚类定义1.2.2 K-Means定义1.2.3 K-Means优缺点1.2.4 K-Means算法步骤 2、测试2.1 K-Means&#xff08;Python&#xff09;2.2 K-Means&#xff08;Sklearn&#xff09;2.2.1 例子1&#xff1a;数组分类2.2.2 例子2&#xff1…

MySQL:主从复制

准备两台服务器&#xff1a;安装好mysql mysql1&#xff1a;192.168.2.222 master mysql2&#xff1a;192.168.2.226 slave 1、主从服务器分别作以下 1.1、版本一致 1.2、初始化表&#xff0c;并在后台启动mysql 1.3、修改root的密码 2、修改主服务器master #vi /etc/my…

安装torch(GPU版本)并在Pycharm中配置

零.前置环境 1.NVIDIA GPU Computing Toolkit已安装 版本为&#xff1a;11.6 已添加到环境变量 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\libnvvp 在cmd中查看cuda版本 方法1&#xff1a…

海康visionmaster-渲染控件:渲染控件加载本地图像的方法

描述 环境&#xff1a;VM4.0.0 VS2015 及以上 现象&#xff1a;渲染控件如何显示本地图像&#xff1f; 解答 思路&#xff1a;在 2.3.1 中&#xff0c;可以通过绑定流程或者模块来显示图像和渲染效果。因此&#xff0c;第一步&#xff0c; 可以使用在 VM 软件平台中给图像源模…

Golang leetcode707 设计链表 (链表大成)

文章目录 设计链表 Leetcode707不使用头节点使用头节点 推荐** 设计链表 Leetcode707 题目要求我们通过实现几个方法来完成对链表的各个操作 由于在go语言中都为值传递&#xff0c;&#xff08;注意这里与值类型、引用类型的而区别&#xff09;&#xff0c;所以即使我们直接在…

Apache Doris (五十五): Doris Join类型 - Colocation Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理

UTF-8编码详解

UTF-8编码详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入探讨编程中常见的字符编码方式之一——UTF-8。作为一种广泛使用的字符…

MFC消息机制详细剖析

易语言程序的破解99%的时候都需要用到FF55FC5F5E这个特征码 新建一个MFC应用程序&#xff1a; 去编辑MFC的.rc资源文件来DIY窗体 静态编译的&#xff0c;把很多静态库的代码都添加进去了 &#xff0c;所以速度很慢 消息机制针对的是GUI程序&#xff08;比如窗口程序&#xf…

基于UDP的网络编程

UDP服务端 #ifdef _WIN32 #define _WINSOCK_DEPRECATED_NO_WARNINGS #define close closesocket #include <winsock2.h> #else #include <arpa/inet.h> #include <netdb.h> #include <netinet/in.h> #in…

leetcode中sql题目分类与总结

基础50题 聚合函数 项目员工&#xff0c;连接 avg group by各项函数用户的注册率&#xff1a;直接单表操作&#xff0c;count函数的使用&#xff0c;结合round进行保留小数。1211. 查询结果的质量和占比&#xff1a;简单的avg, sum(if(,,))的使用1193. 每月交易 I&#xff…

高颜值的第三方网易云播放器

嗨喽&#xff01;GitHub科技的各位小伙伴们&#xff0c;为了能够第一时间及时送达到大家手上&#xff0c;大家记得给博主点点关注每天会送上各种好评技术干货推文 &#xff01; 本期推荐开源项目目录&#xff1a; YesPlayMusic eDEX-UI&#xff1a;超炫酷终端工具 Calculato…

微软开源,全平台通用:Shell 自动补全工具 | 开源日报 No.132

microsoft/inshellisense Stars: 7.6k License: MIT inshellisense 是一个为 Shell 提供 IDE 风格自动补全的工具。它是一个终端本地运行时自动完成&#xff0c;支持 600 多个命令行工具&#xff0c;并且可以在 Windows、Linux 和 macOS 上使用。主要功能包括安装后可通过运行…

FTP的基本介绍

FTP ftp的介绍&#xff1a; ftp是一个可以提供共享文件的服务器&#xff0c;他可以通过iis.msc也就是windows 的服务器管理器来打开&#xff0c;或者通过cmd命令行打开 如何使用iis.msc打开ftp&#xff0c;如何使用cmd打开ftp &#xff0c;如何匿名登录ftp&#xff0c;ftp和…

Android Studio实现课表

本文章主要展示课表的实现&#xff0c;里面包含很多控件的用法&#xff0c;比如吐司Toast、通知Notification、ListView&#xff0c;数值选择器NumberPicker&#xff0c;SeekBar同editText的关联。抽屉导航栏 还有一些其他的功能&#xff0c;比如InputFilter自定义的字符过滤器…

C语言中的递归函数的简单应用

C语言中的递归函数的简单应用 递归函数简介注意 使用示例求n的阶乘分析问题&#xff1a;代码示例&#xff1a; 求Fibonacci数列分析问题&#xff1a;代码示例 求最大公约数分析问题&#xff1a;代码一&#xff1a;辗转相减法&#xff1a;代码二&#xff1a;辗转相除法&#xff…

第十一章 创建Callout Library - 使用 J 链接类型传递标准计数字符串

文章目录 第十一章 创建Callout Library - 使用 J 链接类型传递标准计数字符串使用 J 链接类型传递标准计数字符串使用 J 连接传递字符串 第十一章 创建Callout Library - 使用 J 链接类型传递标准计数字符串 使用 J 链接类型传递标准计数字符串 iris-callin.h 头文件定义了计…

SSM框架(Spring + SpringMVC + Mybatis)

MVC即model view controller。&#xff08;模型&#xff0c;视图&#xff0c;控制器&#xff09; entity层(model层&#xff0c;domain层) 用于存放我们的实体类&#xff0c;类中定义了多个类属性&#xff0c;并与数据库表的字段保持一致&#xff0c;一张表对应一个类。主要用…

排序整形数组--------每日一题

大家好这是今年最后的一篇了&#xff0c;感谢大家的支持&#xff0c;新的一年我会更加努力地。 文章目录 目录 文章目录 题⽬描述&#xff1a; 输⼊10个整数&#xff0c;然后使⽤冒泡排序对数组内容进⾏升序排序&#xff0c;然后打印数组的内容 一、题目解读 冒泡排序是⼀种基础…