`
fox_mt
  • 浏览: 23106 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从零开始学java-(七)for ZCL:java数组

 
阅读更多

    上一篇我们留了一道作业题,就是怎么在main方法里不用new对象的方式来调用另外两个方法,这里我就不给搭理事例了,简单的说一下,static方法中如果想直接调用某个方法,非new出来对象再调用这个对象的方法的话,只能调用同样为static的方法,也就是说,我们的那个例子里面,只要将setIntValue和getIntValue 方法都改成static的就可以了,大家自己试试;

    今天我们要讲的内容是java的数组

在现实生活中,我们经常会遇到这样的情况,一些同类型的东西我们要把他们放在一起,比如说最进本的人,我们的班级,就是把学生这一类的对象都放在了一起,这些人的类型是相同的都是学生, 要对他们的操作也是相同的,都是传授知识,概括起来说,就是一种能够存放大量同性质的并且需要做相同的处理的数据的数据结构;就是数组;简而言之,就是具有相同数据类型的数据集合;从概念上来分析,重点是两个,1是相同数据类型,2是集合。

   说道数组,我们就不得不提到维度,我们求学的时候都学习过,一维,二维,三维,用坐标系来解释就是线,面,空间,四维,五维就比较高端了。暂且不提,数组也可以按维度来划分,如果我们的数组中都是整数的话

 

我们来看看一维数组是什么样的:{1,2,3,4,5,6},这就是一条线上的各个点

再来看看二维数组是什么样子的:{(1,2),(3,4),(5,6)};这就是平面上的各个点

再来看看三维数组是什么样子的:{(1,2,3),(4,5,6),(7,8,9)};这就是空间中的各个点

注意,以上三个仅仅是介绍了概念,实际写法并不是这样

简单的介绍了数组的概念,下面我们进入代码的世界;

java定义变量的时候都要声明类型,这是老生常淡了,那么数组如何来声明呢?

在解决这个问题之前,我们要先解决另一个问题,就是我们要声明的是几维数据?

一切从简,先来说说一维数组的声明

 

数组中数据类型 数组名称 []  或者 数组中数据类型 [] 数组名称

来仔细数说下,首先我们要申请数组中存放的数据的类型,然后是数组的名称,最后又一对中括号

比如我们要声明int类型的数组,那么如下:int a [];或者 int [] a;

这两种方式没有任何区别,看自己喜好就好

既然数组是同一类型的集合,那么有的时候我们肯定想要知道数据的长度是多少

就是 数组名.length,拿我们上面的int型数组来说,他的长度就是 a.length

注意是没有括号的,这个length是数组的一个属性,不是方法

 

上面我们仅仅是讲了如何声明,并没有讲如何初始化,初始化这个概念并不陌生,就是对数据进行赋初值的操作

数据的初始化有两种,可以称之为静态初始化,和动态初始化

静态初始化简单,来看个简单的例子:

public class IntCollection {
	public static void main(String[] args) {
		int [] intCol = {1,2,3,4,5};
		System.out.println(intCol.length);
	}
}

来看运行结果



  

这就是静态赋初值,声明数组的同时对其进行了初始化,这个例子同时也练习了length这个属性

动态初始化的例子稍微麻烦一些,我们来看看

public class IntDynamic {
	public static void main(String[] args) {
		int [] intCol = new int[10];
		for(int i =0 ;i < 10; i ++){
			intCol[i] = i * i;
			System.out.println(intCol[i]);
		}
	}
}

   来看这段代码,我们声明的时候使用了new int[10];因为数据是对象类型的, 所以我们可以通过new关键字来创建对象,因为数组是有长度的,所以我们声明的时候如果不是静态的初始化,那么我们需要声明数组的长度,这里我们把数组的长度声明为10,然后用for循环给数组的中的每个元素赋值,值就是i的平方

看看结果



 

这里我们看到给数组的元素赋值的时候使用的语句是 intCol[i] = i * i

这就有问题了,intCol[i]是什么东西?这就是数组intCol的第i个元素,这个i就是数组的下标,如果我们想直接使用数组的第5个元素,我们应该怎么写呢?intCol[5]么?如果是这样的话,那么你肯定没有注意到下面这个细节

for循环是从0开始的,也就是说intCol的第一个元素是IntCol[0] ;那么第五个元素是什么?intCol[4]就对了吧?

    这里有必要提及的是,这个方括号中的数字是数组中元素的下标,其实跟for循环中的i没有必然联系,仅仅是因为for循环中i的值和数组的下标恰好相同而已,数组的下标是从0开始的,跟我们正常生活中从1开始不同,这一点一定要注意,后面还会遇到类似的情况,那么数组的最后一个元素就是 IntCol[IntCol.length - 1]

这个表达式目测已大家的高智商肯定能理解,IntCol.length是整个数组的长度,长度减1,就是最后一个元素了;

 

现在来一道课堂练习

要求:已知一下两个数组 int [] a = {1,2,3,4,5}; int [] b= {6,7,8,9,0}

输出数组中的每个元素,分别输出数组的长度

输出每个元素的时候

提示:数组中元素的名字可以这样来打印 "a [" + i + "]"

动起来,自己写写

 

看代码:

public class IntLength {
	public static void main(String[] args) {
		int [] a = {1,2,3,4,5};
		int [] b = {6,7,8,9,0};
		for(int i =0; i < a.length; i ++){
			System.out.println("a[" + i + "] = " + a[i]);
		}
		for(int i =0; i < b.length; i ++){
			System.out.println("b[" + i + "] = " + b[i]);
		}
		System.out.println("a[] 的长度为" + a.length);
		System.out.println("b[] 的长度为" + b.length);
	}
}

   我们的for循环使用的判断条件分别是每个数组的长度,第几个元素就是数组名[下标];长度,就是数组名.length ;这都没问题了,这里有一点不知道大家注意到了没有,我们的for循环的变量都是使用int i =0作为开始,那么这两个for循环之间会互相影响么?答案是否定的,不会,因为这两个for代码块是同级的,int i这个变量的作用范围仅限for循环打大括号中,两个for循环不会有任何影响,但是如果这两个for循环是嵌套关系的话,那么肯定就有问题了,有兴趣的同学自己试试

 

来看看运行结果



   

一维数组说完了,咱们来聊一聊二维数组

来个代码

public class TwoDimension {
	public static void main(String[] args) {
		char [] [] a = new char[4][10];
		a[0] = new char[10];
		a[1] = new char[10];
		a[2] = new char[10];
		a[3] = new char[10];
		a[0][0] = 65;
		a[1][0] = 67;
		a[2][0] = 69;
		a[3][0] = 71;

		for(int i =0 ;i < a.length; i ++){
			for(int j = 1; j < a[i].length; j ++){
				a[i][j] = (char)(a[i][j - 1] + 1);
				System.out.print(a[i][j-1]);
			}
			System.out.println();
		}
	}
}

 

  首先我们看,二维数组的声明,

 char [] [] a = new char[4][10];

类型是char类型的,二维的,就是两个方括号,后面new的时候,两个方括号中的数字含义不同,第一个方括号可以理解为行,第二个可以理解为列,就是4行10列的矩阵,矩阵的概念大家自己去了解,这里就不说了

换一种思路就是一个数组长度是4,其中每个元素又是一个长度为10的数组

大家好好理解下

我们对长度为4的数组做了一下初始化,每个元素都是new char[10]这样一个长度为10的一维数组,

然后就相当于是对每行的第一列做了初始化,分别是 65 67 69 71,

一维数组是一层循环,那么二维数组就是两层循环了,我们这个循环是为这个二维数组中的每个元素赋值,这个a[i][j -1] + 1就是拿到前一个元素的值然后加1,作为当前元素的值,打印出来,这个打印注意了,没有ln,只是print()这样的打印是没有换行的

然后我们在内层循环结束后打了一个println()这个是换行的

 

来看看运行结果



 

恩?是不是很奇怪呢?我们从头到尾为也没输入英文字符,这些字符是哪里来的呢?

其实重点就是(char)这里,有一个强转的操作,在ASCII码中,英文字符(区分大小写)都有一个数字与之对应,具体对应表,大家自己找一找,我就不多说了,简单的说就是65对应就是大写A往后加1就是了

 

二维数组如何静态初始化其实跟一维是相同的

如下:

int [] [] s = {{1,2},{3,4},{5,6}}

数组就是用大括号包起来的一组,二维,就是数组套数组,三维就是数组套数组再套数组

那么三维的是什么样,大家就应该都知道了

这里我就不多解释三维数组了,大家自己练习练习就好

 

值得我们注意的是正常的开发中数组的使用并不是很频繁,因为一个重要原因就是一个数组一旦声明了,容量就固定了,也就是说我们声明的时候的长度,固定了之后不容改变,如果想在运行时改变,那么就是另外一种数据结构了,后面我们再讨论,这里大家记住就好;

 

 

 

  • 大小: 8.4 KB
  • 大小: 13.4 KB
  • 大小: 18.9 KB
  • 大小: 14 KB
分享到:
评论

相关推荐

    bekko:ZigBee 应用层(APS、ZCL、ZDP)Java 实现

    纯 Java ZigBee 应用程序框架 Bekko提供用于开发 ZigBee 应用程序的 Java API,并允许用户应用程序与标准 ZigBee 设备进行通信。 与其他“XBee API Java-Wrapper”不同,Bekko 具有 ZDO/ZDP 实现和标准化的 APS 数据...

    Z-Stack ZCL API.PDF

    TI公司的ZCL API函数技术文档。 ZCL = zigbee cluster library.

    ISE IP核使用说明

    很好的ISE IP核说明,写的很好,很详细,很适合初学者的学习

    The document was created with Spire.PDF for Java

    解决生成pdf文件第一页表头产生红色字体: Evaluation Warning : The document was created with Spire.PDF for Java

    Z-Stack ZCL API

    这个应该是zigbee里的开发文档,不知对大家是否有用。

    ist的matlab代码-ATC-Best-Practice-Guide:ABAP测试驾驶舱最佳实践指南

    所有测试类的类别为ZCL_CI_CATEGORY_DSAG 。 ZCL_CI_TEST_DSAG_PRETTY_PRINT 用于检查Pretty Print是否已应用于源代码的类。 ZCL_CI_TEST_COMP_PROCS 用于执行各种基于代码的测试的类(有关详细信息,请参见docu)。...

    abap-openapi-client:ABAP中的ABAP OpenAPI客户端生成器

    注意:生成的代码当前使用ZCL_OAPI_JSON,建议将实现复制到生成的全局类中的本地类 生成旨在在v702上运行 生成的客户端代码旨在在v702上运行 建筑/开发 prerequsites = 12+ 安装npm install npm test =运行单元...

    蓝桥杯单片机——09 定时器设计秒表.rar

    蓝桥杯单片机——09 定时器设计秒表,这个是我学习蓝桥杯单片机时,通过B站上的各种视频资源整理出来的代码。...相关链接《蓝桥杯单片机竞赛各模块总结》:https://blog.csdn.net/ZCL__/article/details/109250325

    蓝桥杯单片机——20 定时器.rar

    蓝桥杯单片机——20 定时器,这个是我学习...模式三:数码管前三位显示-3- 设定的数字开始倒计时,数字为0时蜂鸣器响。 相关链接《蓝桥杯单片机竞赛各模块总结》:https://blog.csdn.net/ZCL__/article/details/1

    zigbee-cluster-library-specification 2012版和最新版

    两份文档: zigbee-cluster-library-specification Document: 07-5123-06 zigbee-cluster-library-specification Document:ZigBee Document 075123r04ZB 2012

    zigbee ZCL开发大礼包

    一个是ZigBee Cluster Library 最新版的ZCL文档英文版,一个是Zigbee协议栈的API接口函数手册,二合一,自己找了好久,分享出来给大家,学习zigbee的人很有帮助,zigbee智能家居必看手册

    易语言ZCL_核库函数模块

    易语言ZCL_核库函数模块易语言ZCL_核库函数模块易语言ZCL_核库函数模块

    zcl/se/zcl.message.h

    这是STM32WB系列,基于IEEE 802.15.4的zigbee信息收发头文件zcl/se/zcl.message.h

    易语言模块ZCL_控件类库1.01.rar

    易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar

    Zigbee_ZCL_07-5123-07-ZigbeeClusterLibrary_Revision_7

    2018年2月的新版的ZCL规范,新增和完善各个cluster的描述

    学习计划模板合集7篇.docx

    学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx

    易语言模块ZCL_多线程类1.01.rar

    易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar

    易语言模块ZCL_核库函数1.01.rar

    易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar

    ZCL_SPEC_R7.pdf

    Zigbee联盟发布的最新版本的ZCL SPEC,可用于查阅zigbee各cluster及下属各中命令和属性,zigbee开发必备工具书.

    ZCL

    ZCL

Global site tag (gtag.js) - Google Analytics