43 java基础之数字和数组.docx
- 文档编号:4245372
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:8
- 大小:20.30KB
43 java基础之数字和数组.docx
《43 java基础之数字和数组.docx》由会员分享,可在线阅读,更多相关《43 java基础之数字和数组.docx(8页珍藏版)》请在冰豆网上搜索。
43java基础之数字和数组
4.3数字
为了处理数值类型,你可以使用Number类。
这个Number类是所有在JAVA平台中所有数字类的父类。
它的子类包括Float、Interger等等。
本节教程将讨论java.lang和它的子类中的Number类。
特别地,这节教程要讨论为什么你需要这些类,并指出通用的方法和类变量,以及向你介绍如何将实例转换为字符串。
此外,这节教程还讨论你需要的其它类来处理数字。
比如,如果你需要以某个特殊格式来显示数字的时候,你可以使用在java.test中的NumberFormat和DecimalFormat类来格式化它。
同时,java.lang中的Math包含了类方法来执行数学函数。
这个类还有用于三角函数、指数函数等等的方法。
如图18所示:
(图18)
数字类包含:
1.Number:
这个抽象类Number是Byte、Double、Float、Integer、Long和Short的父类。
Number的子类必须提供将数值转换为byte、double、float、int、long以及short的方法。
2.Byte:
这个类是Number的子类,它是用于字节数值的标准wrapper。
3.Double:
这个Double类在对象中包装了原始类型double。
Double类的对象包含单一类型(double)的对象。
另外,这个类提供了几个用于将double转换为String或者将String转换为double的方法。
4.Float:
这个Float类在对象中包装了原始类型Float。
Float类的对象包含单一类型(Float)的对象。
另外,这个类提供了几个用于将Float转换为String或者将String转换为Float的方法。
5.Integer:
这个Integer类在对象中包装了原始类型Integer。
Integer类的对象包含单一类型(Integer)的对象。
另外,这个类提供了几个用于将Integer转换为String或者将String转换为Integer的方法。
6.Long:
这个Long类在对象中包装了原始类型Long。
Long类的对象包含单一类型(Long)的对象。
另外,这个类提供了几个用于将Long转换为String或者将String转换为Long的方法。
7.Short:
这个类是用于short数值的标准wrapper。
8. BigDecimal:
不可变的、任意精度的有符号的十进制数字。
BigDecimal包含了任意精度的整型数和非负的32位的整型数,BigDecimal提供了用于基本算术运算、比较、格式转换等等的操作。
这个BigDecimal类给了用户对舍入行为的完全控制,并且强迫用户为舍弃精度的操作显性指定一个舍入行为。
基于这个目的有八种舍入模式。
对BigDecimal有两种类型的操作:
比例/舍入操作和十进制点移动操作。
比例/舍入操作返回一个BigDecimal,它的数值大约或者精确地等于运算对象,但是它的数值范围要指定,也就是说,它们可以对它的数值最小的影响来增加或者减少数字的精度。
十进制点移动操作(movePointLeft和movePointRight)返回一个由运算对象创建的BigDecima,它是通过在指定方向和指定距离来移动十进制点的。
为了达到简短和清晰的目的,伪代码用在了BigDecimal方法的描述中。
比如伪代码表达式(ij)就代表了“BigDecimal的数值是由BigDecimali加上BigDecimalj的数值”。
而伪代码表达式(i==j)代表“当且仅当BigDecimali的数值与BigDecimalj相同的时候才为true”。
其它的伪代码表达式也有类似的解释。
BigInteger:
不可变任意精度的整型数。
BigInteger为所有的Java原始整型操作以及所有在java.lang.Math中的相关方法提供相似的操作。
另外BigInteger伪模数运算、GCD计算、位操作等等提供了运算。
算术运算的语义模仿了定义在JAVA语言规范中的Java的整型算术运算。
比如,如果除数为0就会导致ArithmeticException(算术异常)等等。
所有在规范中的溢出都将被忽略,因为BigIntegers将尽量适应运算结果的需要。
而移位操作扩展了Java的移位操作,它允许负方向的移位。
以负的位距来往右移就相当于往左移位。
而无符号的右移运算符(>>>)这里就不再使用。
而按位逻辑操作跟Java的按位操作是相似的。
比较运算执行有符号的整型比较,它跟Java的是相似的。
模数算术运算提供计算余数、执行乘幂等方法。
这些方法总是返回一个非零的结果(介于0到-1之间)。
为了简洁和清晰的目的,伪代码也用在BigInteger方法中。
这个伪代码表达式(ij)代表了“等于BigIntegeri加上BigIntegerj的BigInteger数值”。
而伪代码表达式(i==j)代表了“当且仅当BigIntegeri等于BigIntegerj的时候才返回true”。
其它的数据类型:
1.Boolean:
这个Boolean类在对象中包装了原始类型Boolean。
Boolean类的对象包含单一类型(double)的对象。
另外,这个类提供了几个用于将Boolean转换为String或者将String转换为Boolean的方法。
2.Character:
这个Character类在对象中包装了原始类型Character。
Character类的对象包含单一类型(Character)的对象。
另外,这个类提供了几个用于将字符由小写转换为大写或者由大写转换为小写的方法。
3.Void:
这个Void类是一个占位符类,它保留对代表原始JAVA类void的引用。
非基本算术类型Math:
这个Math类包含了用于执行数值操作的方法,比如初步的指数、对数、平反根以及三角函数。
不象StrictMath类中的有些数值函数,这个Math类的所有函数不是定义为返回bit-for-bit相同的结果。
这允许更好的执行,因为严格的再现情已经不需要了。
缺省地,许多Math函数简单代表了在StrictMath中的等价函数。
代码发生器支持使用特殊平台的本地库或者微处理器指令以提供性能更高的Math函数实行。
这样高性能的执行必须符合Math的规范。
4.4数组
在任何的编程语言中,数组都是一个重要的数据结构。
数组是一个固定长度的结构,它存储多个相同类型的数值。
你可以在数组中集合相同类型的数值。
数组直接被JAVA编程语言所支持,所以没有一个数组类。
数组是一个Object类的一个不明显的扩展,所以你可以指定一个数组给一个类型定义为Object的变量。
JAVA平台集合了它的类到功能包中。
不是编写你自己的类,你可以使用有平台提供的类。
这节教程中要讨论的绝大多数的类都是java.lang包的成员函数。
所有java.lang中的类对你的程序都是有效的。
数组的长度在数组创建的时候就已经确定。
一旦创建以后,数组就有了固定长度的结构,如图19所示:
(图19)
数组元素就是数组中的一个数值,可以通过数组中的位置来访问它。
如果你想在一个结构中存储不同类型的数据,或者如果你需要一个长度可以动态改变的结构,可以使用Collection,比如Vector而不用数组。
本教程中将讨论以下的几个方法:
1.创建和使用数组合
2.对象的数组
3.数组的数组
4.复制数组
4.4.1创建和使用数组合
以下是个简单的程序ArrayDemo,它创建了一个数组,并放置了一些数值在上面,然后进行显示:
publicclassArrayDemo{
publicstaticvoidmain(String[]args){
int[]anArray;//声明一个整型数组
anArray=newint[10];//创建一个整型数组
//为每一个数组元素赋值并打印出来
for(inti=0;i anArray[i]=i; System.out.print(anArray[i]+""); } System.out.println(); } } 这节教程覆盖了以下这些内容: 1.声明一个变量来引用一个数组 2.创建一个数组 3.访问数组元素 4.获得数组的大小 5.数组初始化程序 下一页将加以详细说明。 (1)声明一个变量来引用一个数组 以下的代码是声明一个数组变量: int[]anArray;//声明整型的数组 象声明其它类型的变量,一个数组声明有两个组件: 数组的类型和数组的名字。 数组的类型是这样来写的type[],其中type可以是float、boolean、Object、String等,而[]代表了这是一个数组。 这里记住在数组中的所有元素都是相同类型的。 上面的例程中使用了int[],所以数组anArray就将容纳整型数据了。 以下是声明其它类型的数组: float[]anArrayOfFloats; boolean[]anArrayOfBooleans; Object[]anArrayOfObjects; String[]anArrayOfStrings; 就象声明其它类型的变量,声明数组变量也没有为数组元素分配任何内存。 所以必须在引用数组之前被数组赋值。 (2)创建一个数组 你可以使用JAVA的new运算符来创建一个数组。 下面的语句是为10个整型元素分配一个数组内存: anArray=newint[10];//createanarrayofintegers 总得说来,当创建数组的时候,你可以使用new操作符,后面跟着数组元素的数据类型然后就是用方括号[和]括起来的元素的数目,格式如下所示: newelementType[arraySize] 如果在上面的例程中new语句没有的话,编译器将打印除一个如下的错误是的编译发生错误: ArrayDemo.java: 4: VariableanArraymaynothavebeeninitialized(变量anArray可能还没有初始化。 ) (3)访问数组元素 既然已经给数组分配了内存,我们来为数组元素赋值吧: for(inti=0;i anArray[i]=i; System.out.print(anArray[i]+""); } 这部分的代码给出了怎样引用一个数组元素,或者示为它赋予一个数值,或者访问数值。 在方括号之间的数值指示了要访问的元素的索引。 在JAVA中,数组的索引是从0开始的并且以-1结束。 4)获得数组的大小 为了获得数组的大小,你可以使用下面的代码: arrayname.length 这里还提醒一下: JAVA的新手可能会在length后面加一个圆括号(和)。 这样是否错误的,因为length不是一个方法。 Length是由JAVA平台为所有数组提供的一个属性。 在上面的例程中的for循环在anArray的每一个元素进行循环,并给每个元素赋值。 这个for循环使用了anArray.length来决定什么时候终止循环。 (5)数组初始化程序 JAVA编程语言为创建和初始化数组提供了简捷的语法。 一下是这个语法的例子: boolean[]answers={true,false,true,true,false}; 数组的length(长度)是由大括号{和}之间的数值的数目决定的。 4.4.2对象的数组 数组可以保留引用类型。 你可以用创建原始类型数组的方法来创建这样一个数组。 以下是一个小的程序ArrayOfStringsDemo,它创建了一个数组包含了三个String对象并且将这三个字符串以小写字母的形式打印出来: publicclassArrayOfStringsDemo{ publicstaticvoidmain(String[]args){ String[]anArray={"StringOne","StringTwo","StringThree"}; for(inti=0;i System.out.println(anArray[i].toLowerCase()); } } } 这个程序中用单一的语句创建和操作了数组。 但是,你可以创建一个数组而不用在里面放置任何元素。 这对于JAVA新手将是一个容易出错的地方。 假如有以下的代码: String[]anArray=newString[5]; 一旦这条语句被执行了,数组anArray就存在了并且有充足的空间来容纳5个String对象。 但是,数组并不包含任何的字符串,它是空的。 程序必须显性地创建字符串并将他们放置到数组中。 这本来示很显然的事情,但是许多JAVA的新手会以为上面的语句已经创建了数组并创建了5和个空的字符串在里面了。 这样他们会象如下进行编写代码,结果只会导致一个NullPointerException的异常错误: String[]anArray=newString[5]; for(inti=0;i //错误: 下面的行将导致一个运行错误 System.out.println(anArray[i].toLowerCase()); } 4.4.3数组的数组 数组可以容纳数组。 以下的例程ArrayOfArraysDemo创建一个数组并使用一个初始化程序来包含四个子数组: publicclassArrayOfArraysDemo{ publicstaticvoidmain(String[]args){ String[][]cartoons= { {"Flintstones","Fred","Wilma","Pebbles","Dino"}, {"Rubbles","Barney","Betty","BamBam"}, {"Jetsons","George","Jane","Elroy","Judy","Rosie","Astro"}, {"ScoobyDooGang","ScoobyDoo","Shaggy","Velma","Fred","Daphne"} }; for(inti=0;i System.out.print(cartoons[i][0]+": "); for(intj=1;j System.out.print(cartoons[i][j]+""); } System.out.println(); } } } 这里注意,所有的子数组都有不同的长度。 子数组的名字是否cartoons[0]和cartoons[1]等等。 跟对象的数组一样,你必须显性地在数组中创建子数组。 因此如果你不使用初始化程序的话,你必须编写一些的代码: publicclassArrayOfArraysDemo2{ publicstaticvoidmain(String[]args){ int[][]aMatrix=newint[4][]; for(inti=0;i aMatrix[i]=newint[5];//createsub-array for(intj=0;j aMatrix[i][j]=i+j; } } //打印 for(inti=0;i for(intj=0;j System.out.print(aMatrix[i][j]+""); } System.out.println(); } } } 你必须在创建数组的时候为主数组指定长度。 你可以让子数组的长度未指定直到创建了它们。 4.4.4复制数组 使用系统的arraycopy方法来有效地从一个数组复制数据到另外一个数组中去。 这个arraycopy方法需要5个参数: publicstatic voidarraycopy(Objectsource, intsrcIndex, Objectdest, intdestIndex, intlength) 其中两个Object参数指定了从哪个数组复制以及要复制到哪个数组。 三个整型参数指示了每个源数组和目标数组的开始位置,以及要复制的元素的数目。 如图20所示说明了复制是如何发生的: (图20) 下面的程序ArrayCopyDemo使用了arraycopy方法来从copyForm数组复制元素到copyTo数组: publicclassArrayCopyDemo{ publicstaticvoidmain(String[]args){ char[]copyFrom={'d','e','c','a','f','f','e', 'i','n','a','t','e','d'}; char[]copyTo=newchar[7]; System.arraycopy(copyFrom,2,copyTo,0,7); System.out.println(newString(copyTo)); } } 程序中调用arraycopy方法,开始复制所以为2的源数组元素。 因为数组的索引是从0开始的,所以复制是从第3个元素开始的,即从'c'开始。 Arraycopy方法将复制的元素复制到目标数组中,目标数组的索引是从0开始的,即复制到目标数组的第一个元素开始。 这个程序一共复制了7个元素'c'、'a、'f'、'f'、'e'、'i'和'n'。 实际上arraycopy方法是从"decaffeinated"复制"caffein",如图21所示: (图21) 这里注意,目标数组必须在调用arraycopy之间分配内存,而且这个内存空间必须足够大以容纳被复制的数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 43 java基础之数字和数组 java 基础 数字 数组