清华大学java程序设计基础第四版课后习题答案

上传人:小** 文档编号:153623242 上传时间:2022-09-19 格式:DOC 页数:36 大小:383KB
收藏 版权申诉 举报 下载
清华大学java程序设计基础第四版课后习题答案_第1页
第1页 / 共36页
清华大学java程序设计基础第四版课后习题答案_第2页
第2页 / 共36页
清华大学java程序设计基础第四版课后习题答案_第3页
第3页 / 共36页
资源描述:

《清华大学java程序设计基础第四版课后习题答案》由会员分享,可在线阅读,更多相关《清华大学java程序设计基础第四版课后习题答案(36页珍藏版)》请在装配图网上搜索。

1、第3章Java语言基础本章主要内容:数据类型。变量。基本类型变量。数据类型的转换规则。从键盘输入数据的语句格式。运算符。本章主要介绍编写Java程序必须掌握的若于语言基础知识,包括数据类型、变量、常量、表达式等。学握这些慕础知识,是编写正确Java程序的前提条件。3.1数据类型程序在执行的过程中,需要对数据进行运算,也需要存储数据。这些数据可能是山使用者输入的,可能是从文件中取得的,也可能是从网络上得到的。在程序运行的过程中,这些数据通过变量存储在内存中,以便程序随时取用。数据存储在内存中的一块空间中,为了取得数据,必须知道这块内存空间的位置,为了方便使用,程序设计语言用变量名来代表该数据存储

2、空间的位置。将数据指定给变量,就是将数据存储到对应的内存空间,调用变量,就是将对应的内存空间中的数据取岀来使用。一个变量代表一个内存空间,数据就存储在这个空间中,使用变量名来取得数据非常方便,然而山于数据在存储时所需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来存储,因此,对不同的数据用不同的数据类型来区分。在程序设计中,数据是程序的必要组成部分,也是程序处理的对象。不同的数据有不同的数据类型,不同的数据类型有不同的数据结构和存储方式,并且参与的运算也不相同。通常计算机语言将数据按其性质进行分类,每一类称为一种数据类型(datatype)。数据类型定义了数据的性质、取值范围、存储

3、方式以及对数据所能进行的运算和操作。程序中的每一个数据都属于一种类型,定义了数据的类型也就相应决定了数据的性质以及対数据进行的操作,同时数据也受到类型的保护,确保对数据不进行非法操作。Java语言中的数据类型分为两大类:一类是基本数据类型(primitivetypes);另一类是引第3章Java语言基础27用数据类型(referencetypes),简称引用类型。基本数据类型是山程序设计语言系统所定义、不町再划分的数据类型。基本数据类型的数据所占内存的大小是固定的,与软硬件坏境无关。慕本数据类型在内存中存放的是数据值本身。引用数据类型在内存中存放的是指向该数据的地址,不是数据值本身,它往往山多

4、个基本数据组成,因此,对引用数据类型的应用称为对象引用,引用数据类型也被称为复合数据类型,在有的程序设计语言中称为指针。基本数据类型有整型、浮点型、逻辑型和字符型;引用数据类型包括类、数组和接口等。本节只介绍基本数据类型,引用数据类型在5.1节再进行介绍。Java语言的数据类型实际上都是用类实现的,即引用对象的使用方式,同时Java语言也提供了类似C语言中简单类型的使用方式,即声明类型的变量。Java语言定义了4类共8种基本类型,其中有4种整型、2种浮点型、1种逻辑型和1种字符型,它们的分类及关键字如下:整型包括byte、short、intlongo浮点型包括float和doubleo逻辑型为

5、booleano字符型为chato1.整型整数有正整数、零、负整数,其含义与数学中的含义相同。Java语言的整数有3种进制的表示形式。 I进制:用多个09之间的数字表示,如123和-100,其首位不能为0。八进制:以0打头,后跟多个07之间的数字,如0123。 I六进制:以Ox或0X打头,后跟多个09之间的数字或af之间的小写字母或AF之间的大写字母,af或AF分别表示值1015,如0X123E。Java语言定义了4种表示整数的类型:字节型(byte)、短整型(short)、整型(hit).长整型(long)o每种整型的数据都是带符号位的。口va语言的每种数据类型都对应一个默认的数值,使得这种

6、数据类型变量的取值总是确定的,体现了其安全性。它们的特性如表3.1所示。表3Java语言的整数类型类型数据位范围byte(字节型)8-128127,EIP-27夕-1short(短整型)16-3276832767,即-中2】5-1int(整型)32-2147483648-2147483647,即-2刃2引-1long(长整型)64-92233720368547758089223372036854775807,H|J-263-263-l一个整数隐含为整型(int型)。当要将一个整数强制表示为长整数时,需在后面加字母1或L。所以若声明long型变量的值超过ii】t型的取值范围时,如果数的后而不加1

7、或L,系统会认是int型而出错。2.浮点型Java语言用浮点型表示数学中的实数,也就是说既有整数部分又有小数部分的数。浮点数有两种表示方式。标准记数法:由整数部分、小数点和小数部分构成,如3.0、3.1415等。科学记数法:山I进制整数、小数点、小数和指数部分构成,指数部分山字母E或e跟上带正负号的整数表示,如123.45可表示为1.2345E+2。浮点数用于需要小数位精确度高的计算。例如,计算平方根或三角函数等,都会产生浮点型的值。Java语言的浮点型有单精度浮点(float)和双精度浮点(double)两种。它们的宽度和范围如表3.2所示。表3.2Java语言的浮点数类型类型数据位范围fl

8、oat(单精度浮点)32负数范鬧:-3.4028235E+38-1.4E-45正数范鬧:14E-453.4028235E+38double(双稱度浮点)64负数范鬧:-1.7976931348623157E+308-49E-324正数范鬧:49E-3?41.79769313486?3157E+308一个浮点数隐含为double型。若在一个浮点数后加字母f或F,将其强制转换为float型,所以若声明float型变量时如果数的后而不加f或F,系统会认为是double型而岀错。double型占8个字节,有效数字戢长为15位,之所以称它为double型,是因为它的精度是float型精度的两倍,所以又称

9、为双精度型。3. 逻辑型逻辑型(boolean)用来表示逻辑值,也称为布尔型。它只有true和false两个取值。其中,true代表“真”,false代表“假”,true和false不能转换成数字表示形式。所有关系运算(如ab)的返回值都是逻辑型的值。逻辑型也用于控制语句中的条件表达式,如if、while、for等语句。4. 字符型字符型(chai,)用来存储单个字符。Java语言中的字符采用的是Unicode字符集编码方案,在内存中占两个字节,是16位无符号的整数,一共有65536个,字符的取值范围从065535,表示其在Unicode字符集中的排序位置。Unicode字符是用“u0000”

10、到“uFFFF”之间的T六进制数值来表示的,前缀“u”表是一个Unicode值,后而的4个|六进制值表示是哪个Unicode字符。Unicode字符表的前128个字符刚好是ASCH表。每个国家的字母表的字母都是Unicode表中的一个字符。Etl于Java语言的字符类型采用了Unicode这种新的国际标准编码方案,便于中文字符和西文字符的处理。因此,与其他语言相比,Java语言处理多语种的能力大大加强。说明:(1)字符型数据的声明只能表示单个字符,且必须使用单引号将字符括起来。(2)Java语言中所有可见的ASCD字符都可以用单引号括起来成为字符,如W、B、咿等。要想得到一个字符在Unicod

11、e字符集中的取值,必须强制转换成int类型,如(int)W。(3)由于字符型用来表示Unicode编码中的字符,所以字符型数据可以转化为整数,其值介于065535之间。但要取得该取值范围的数所代表的Unicode表中相应位置上的字符,必须强制转换成char型,如intc=20320;chars=(char)c;现将Java语言的4类8种基本数据类型总结归纳成表3.3。表3.3Java语言的基本数据类型数据类型关键字占用字节数默认数值取值范围逻辑型boolean1falsetrue,false字节型byte10-128127短整型short00-3276832767整型int40-2147483

12、648-2147483647长整型long80L-92233720368547758089223372036854775807单精度浮点型float40.0F负数范围:-34028235E+38-1.4E-45正数范围:14E-453.40?8235E+38双精度浮点型double80.0D负数范围:-1.7976931348623157E+308-4.9E-324正数范围:49E-3241.7976931348623157E+308字符型charu00001AuOOOOWff1为了使用上的方便,Java语言提供了数值型数据的最大值与放小值的标识符及常量值,如表3.4所示。表3.4数值型常最的

13、特殊值代码数据类型所在的类最小值代码最大值代码bytejava.lang.ByteByte.NflN.VALUEByteMAX_VALUEshortjava.lang.ShortShort.MIN_VALUEShort.MAX.VALUEintjava.lang.IntegerIiiteger.NUN.VALUEIntegerMAX.VALUElongjava.lang.LongLongNIIN.VALUELong.MAX_VALUEfloatjava.lang.FloatFloatMIN_VALUEHoat.MAX.VALUEdoublejava.lang.DoubleDouble.l/UN

14、.VALUEDouble.MAX.VALUE说明:表3.4中表示浮点数float和double的最小值和最大值的常量分别为正数范围的最小值和最大值。如若取得负数范围的最小值或最大值可用加负号的方法获得,如取得double型的最小负数可用如下语句:doublemin=-DoubleMAX_VALUE3.2关键字与标识符1.关键字关键字(keyword)是Java语言中被赋予特定含义的一些单词,它们在程序中有着不同的用途,因此Java语言不允许用户对关键字赋T其他含义。Java语言定义的关键字如表3.5所示。表3.5Java语言定义的关键字abstractassertBooleanbreakbyt

15、ecasecatchcharclasscontinuedefaultdodoubleelseenumextendsfalsefinalfinallyfloatforifimplementsimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttruetryvoidvolatilewhile2.标识符标识符(identifier)是用来表示变最名、类名、方法名、数组名和文件名的

16、有效字符序列。也就是说,任何一个变量、常量、方法、对象和类都需要有名字,这些名字就是标识符。标识符可以山编程者自山指定,但是需要遵循一定的语法规定。标识符要满足如下的规定:(1)标识符可以由字母、数字和下划线(_)、美元符号($)等组合而成。(2)标识符必须以字母、下划线或美元符号开头,不能以数字开头。在实际应用标识符时,应该使标识符能在一定程度上反映它所表示的变量、常量、对象或类的意义,这样程序的可读性会更好。例如,订、i2、count.value_add等都是合法的标识符,因关键字不能当作标识符使用,所以2count.high#、mill等都是非法的标识符。同时,应注&Java语言是区分大

17、小写的语言。例如,class和Class、System和system分别代表不同的标识符,在定义和使用时要特别注意这一点。用Java语言编程时,经常遵循以下的编码习惯(不是强制性的):类名首字母大写;变量、方法及对象的首字母小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如,TliisIsAClassName、thisIsMethodOiFieldName。若定义常量时,则大写所有字母,这样便町标志岀它们属于编译期的常数。Java包(Package)属于一种特殊情况,它们全都是小写字母,即便中间的单词亦是如此。3.3常量常量存储的是在程序中不能被修改的固定值

18、,也就是说常量是在程序运行的整个过程中保持其值不改变的量。Java语言中的常量也是有类型的,包括整型、浮点型、逻辑型、字符型和字符串型。1. 整型常量整型常量可以用来给整型变量赋值,整型常量町以采用I进制、八进制或I六进制表示。I进制的整型常量用非0开头的数值表示,如80,-30;八进制的整型常量用以0开头的数字表示。如,016代表|进制的数字14;I-六进制的整型常量用Ox或0X开头的数值表示,如0x3E代表|进制的数字62o(第3章Java语言基础29整型常量按照所占用的内存长度,又可分为一般整型常屋和长整型常量,其中一般整型常量占用32位,长整型常量占用64位,长整型常量的尾部有一个字母

19、1或L,如-32L、0L、3721L。2. 浮点型常量浮点型常量表示的是可以含有小数部分的数值常量。根据占用内存长度的不同,可以分为一般浮点(单精度)常量和双精度浮点常量两种。其中,单精度常量后跟一个字母f或F,双精度常量后跟一个字母d或D。双精度常量后的d或D可以省略。浮点型常量可以有普通的书写方法,如3.14f、-2.17d;也可以用指数形式,如2.8e-2表示2.8X10-2,58E3D代表58xlO3(双精度)。3. 逻辑型常量逻辑型常量也称为布尔常量,包括true和false,分别代表真和假。4. 字符型常量字符型常量是用一对单引号括起的单个字符,如W、9。字符可以直接是字母表中的字

20、符,也可以是转义符,还可以是要表示的字符所对应的八进制数或Unicode码。转义符是一些有特殊含义、很难用一般方式来表达的字符,如回车、换行等。为了表达清楚这些特殊字符,Java语言中引入了一些特别的定义。所有的转义符都用反斜线()开头,后面跟着一个字符来表示某个特定的转义符,如表3.6所示。表3.6常用的转义字符转义字符所代表的意义f换页(formfeed),走纸到下一页b退格(backspace),后退一格n换行(newlme),将光标移到下一行的开始r回车(carnagereturn),将光标移到当前行的行首,但不移到下一行t横向跳格(tab),将光标移到下一个制表符位置反斜线字符(ba

21、ckslash),输出一个反斜杠Y单引号字符(singlequote),输出一个单引号a,双引号字符(doublequote),输出一个双引号uxxxx14位十六进制数(xxxx)所表示的unicode字符ddd13位八制数(ddd)所表示的unicode字符,范围在八进制的000377之间5字符常量字符串常量是用双引号括起的一串若干个字符(可以是0个)。字符串中口J以包括转义符,标志字符串开始和结束的双引号必须在源代码的同一行上。如您好,刘女士!nn6常量的声明常量声明的形式与变量的声明形式基本一样,只需用关键字thud标识,通常fiiud写在放前面。例如,finalintMAX=10;fi

22、nalfloatPI=314f;Java语言建议常量标识符全部用大写字母表示。上式MAX声明为值是10的整型常量,PI声明为浮点数常量。程序中使用常量有两点好处:一是增加可读性,从常量名可知常量的含义;二是增强可维护性,程序中多处使用常量时,当要对它们进行修改时,只需在声明语句中修改一处即可。3.4变量在程序中使用的值大多是需要经常变化的数据,用常数值表示显然是不够的。因此,每一种计算机语言都使用变量(variable)来存储数据,变量的值在程序中是町以改变的,使用变量的原则是先声明后使用”,即变量在使用前必须先声明。1. 变量声明计算机程序是通过内存变量来操纵内存中的数据,所以程序在使用任何

23、变量之前首先应该在该变量和内存单元之间建立联系,这个过程称为变量的声明或称变量的定义。因此也可以说变量存储的是在程序中可以修改的值。变量具有4个基本要索:名字、类型、值和作用域。Jaw语言的每个变量都有一个名字,称为变量的标识符,所以对变量的命名一定要遵守标识符的规定。每个变最都具有一种类型,变量的类型决定了变量的数据性质和范围、变最存储在内存中所占空间的大小(字节数)以及対变量可以进行的合法操作等。声明变量包括指明变量的数据类型和变最的名称,必要时还町以指定变量的初始数值。变量声明语句后要加分号“;”。1)变量声明格式一个变量111标识符、类型和可选的初始化值共同定义。变量声明的格式如下:类

24、型变量名=初值,变Mi=初值其中,“变量名”是一个合法的标识符,变量名的长度没有限制,“类型”是变量所属的数据类型,中的是可选项。例如,“inti;”表示声明了标识符i是int类型的变量。声明后,系统将给变量分配内存空间,每一个被声明的变量都有一个内存地址值。当有多个变量同属一个类型时,各变量可在同一行定义,且它们之间用逗号分隔。例如,intifjfk;表示同时声明了3个int类型的变量i,j,ko2)变量初始化在声明变量的同时也可以对变量进行初始化,即赋初值。例如,inti=0;表示声明的i是int类型的变量,且i的初值为0。此时i称为已初始化的变量。一个变量被初始化后,它将保存此值直到被改

25、变时为止。Java语言程序中可以随时定义变量,不必集中在执行语句之前。(第3章Java语言基础33同样也可声明其他类型变屋。例如:floatx=314f;doublev=31415926;booleantruth=true;charc=1A1;2. 变量的赋值当声明一个变量并没有赋初值或需要重新对变量赋值时,就需要使用赋值语句。Java语言的赋值语句同其他计算机语言的赋值语句相同,其格式为:变量夕尸值;下而举例来说明。byteb=55;shorts=128;booleant=true;intxzy=8;longz=1234567890123L;floatf=2doubled=31415;cha

26、rc;c=Tu0031f;x=12;/声明byte型变呈并赋值/声明short型变量并赋值/声明boolean型变量并赋值/声明int型变量/声明丄ong型变呈n并赋值/声明float型变量并赋值/声明double型变量并赋值/声明chai:型变呈/为chai:型变蚩:赋值/为int型变量x赋值3.5数据类型转换Java语言的数据类型在定义时就已经决定,因此不能随童转换成其他的数据类型,但Java语言允许用户有限度地做类型转换处理,这就是所谓的数据类型转换,简称类型转换。类型转换就是在Jaw程序中,常数或变量从一种数据类型转换到另一种数据类型,但这种转换是有条件的,并不是一种数据类型能任意转换

27、为另一种数据类型。1. 数值型不同类型数据的转换山于数值型也分为不同的类型,所以数值型数据也有类型转换问题。数值型数据的类型转换分为隐含类型转换(或称缺省类型转换)和强制类型转换两种。凡是把占用比特数较少的数据(简称较短的数据)转换成占用比特数较多的数据(简称较长的数据),都使用隐含类型转换,即类型转换山编译系统自动完成,不需要程序做特别的说明。但如果把较长的数据转换成较短的数据时,就要使用强制类型转换,否则就会产生编译错误。1)自动类型转换在程序中已经定义好的数值型的变量,若是想以另一种数值类型表示时,Jaw语言会在下列条件同时成立时,自动进行数据类型的转换:(1)转换前的数据类型与转换后的

28、类型兼容。(2)转换后的数据类型的表示范围比转换前的类型大。条件(2)说明不同类型的数据进行运算时,需先转换为同一类型,然后进行运算。转换从“短”到“长”的优先关系为:byte-*short-*char-*int-*long-*float*double低k髙举例来说,若是想将short类型的变量a转换为int类型,山于short与int皆为整数类型,符合上述条件(1),而int的表示范围比short来得大,亦符合条件(2),因此Java语言会自动将原为short类型的变量a转换为int类型。值得注意的是,类型的转换只限该语句本身,并不会影响原先变量的类型定义,而且通过自动类型的转换,可以保证数

29、据的精确度,它不会因为类型转换而损失数据的内容。这种类型的转换方式也称为扩大转换(augmentedconversion)。在一个表达式中若有整数类型为short或byte的数据参加运算,为了避免溢出,Jaw会将表达式中的short或byte类型的数据口动转换成int类型,这样就可以保证其运算结果的正确性,这也是Java语言所提供的“扩大转换”功能。山于boolean类型只能存放true或false,与整数及字符不兼容,因此是不可能做类型的转换。接下来看一看当两个数中有一个为浮点数时,其运算的结果会变成如何?【例3.1】数据类型的自动转换。类型自动转换/定义类App3-1/输岀刃b的值/输岀a

30、/b的值1 /filename:App3.1java2 publicclassApp3_l3 4 publicstaticvoidmain(Stringargs)5 6 inta=155;7 floatb=21Of;8 System.outpirintJLn(a=+a+,b=rr+b);9 System.outprintin(rra/b=rr+(a/b);10 11 输出结果为:a=155zb=210a/b=7.3809524程序中第8、9两行的System.out.printlnO语句的功能是输出括号中表达式的值,然后换行。山运行的结果可以看到,当两个数中有一个为浮点数时,其运算的结果会直接

31、转换为浮点数。当表达式中变量的类型不同时,Java会自动将较小的表示范围转换成较大的表示范围后,再进行运算。也就是说,假设有一个整数和双精度浮点数作运算时,Java会把整数转换成双精度浮点数后再进行运算,运算结果也会变成双精度浮点数。2)强制类型转换如果要将较长的数据转换成较短的数据时,就要进行强制类型转换。强制类型转换的格式如下:(欲转换的数据类型)变量名这种强制类型的转换,因为是直接编写在程序代码中,所以也称为显性转换(explicitcast)。经过强制类型转换,将得到一个括号里声明的数据类型的数据,该数据是从指定变量名中所包含的数据转换而来的,但是指定的变量及其数据本身将不会因此而转变

32、。下而的程J第3童些密语宣基砂35序说明了在Jaw语言中,是如何进行数据类型强制转换的。【例3.2】整型与浮点数据类型的转换。1 /filename:App3_2.java整数与浮点数的类型转换2 publicclassApp3_23 -4 publicstaticvoidmain(Stringargs)5 6 inta=155;7 intb=9;8 floatgrh;9 System.outprintin(,ra=rr+a+rrzb=rr+b);/输岀azbfKj佳i10 g=a/b;/将a除以b的结果放在g中11 System.out.printin(rra/b=n+g+Mn,r);/输岀

33、g12 System.outprintin(rra=M+a+n,b=+b);/输岀azb佳i13 h=(float)a/b;/先将a强制转换成f丄oat类型后再参加运算14 System.outprintin(rra/b=,+h);/输岀h15 16 程序执行结果如下:a=155fb=9a/b=170a=155fb=9a/b=17迂231当两个整数相除时,小数点之后的数字会被截断,使得运算的结果保持为整数。但th于这并不是预期的计算结果,因此想要使运算的结果为浮点数,就必须将两个整数中的一个或是两个强制转换为浮点数类型,例如下而的3种写法均成立:(float)a/b/将整数a强制转换成浮点数,

34、再与整数b相除a/(float)b/将整数b强制转换成浮点数,再以整数a除之(float)a/(float)b/将整数a与b同时强制转换成浮点数只要在变量名前面加上欲转换的类型,程序运行时就会自动将此行语句里的变量做类型转换的处理,并不影响原先定义的类型。此外,若是将一个大于变量可表示范围的值赋值给这个变量时,这种转换称为缩小转换(nanowingconversion)。山于缩小转换在转换的过程中可能会因此损失数据的精确度,Java并不会自动做这种类型的转换,此时就必须要山程序员做强制性的转换。注意:在程序设计过程中,不推荐从较长数据向较短数据的转换,因为在较长数据向较短数据转换的过程中,由于

35、数据存储位数减小,将导致计算数据精度降低。2. 字符申型数据与整型数据相互转换1)字符串转换成数值型数据数字字符串型数据转换成byte、short、int、float、doublelong等数据类型,或将字符串truefalse转换成相应的逻辑类型,可以分别使用表3.7所提供的Byte、ShortIntegerFloat、Double、Long和Boolean类的parseXXX()方法完成。表3.7字符串转换成数值型数据的方法转换的方法功能说明ByteparseByteO将数字字符串转换为字节型数据ShortparseShortO将数字字符串转换为短整型数据IntegerparselntO将

36、数字字符串转换为整型数据LongparseLongO将数字字符串转换为长整型数据Float.parseFloatO将数字字符串转换为浮点型数据Double.parseDoubleO将数字字符串转换为双精度型数拯Boolean.parseBooleaiiQ将字符串转换为逻辑型数据例如:StringmyNumber=rr1234567rr:/左义字符串型变量myNumberfloatmyFloat=FloatpafseF丄oat(myNumber);第2条语句是将字符串型变量myNumber的值转换成浮点型数据后,赋给变量myFloato2)数值型数据转换成字符串在Java语言中,字符串可用加号“

37、+”来实现连接操作。所以若其中某个操作数不是字符串,该操作在连接之前会口动将其转换成字符串。所以可用加号来实现自动的转换。如,intmylnt=1234;/泄义整型变SmylntStringmyString=,f+mylnt;/将整型数据转换成了字符串其他数值型数据类型也町以利用同样的方法转换成字符串。3.6从键盘输入数据在程序设计中,经常需要从键盘上读取数据,这时就需要用户从键盘输入数据,从而可以增加与用户之间的交互。利用键盘输入数据,Java语言提供了两种方式。1.数据输入方式1利用键盘输入数据,其基本格式如下:importjavaio*;publicclassclass_name/类名利

38、;publicstaticvoidmain(Stringargs)throwsIOExceptionStringstr;/声明s为String类型的变量BufferedReaderbuf;/声明buf为BufferedReader类的变量/该类在java,io类库中buf=nev?BufferedReader(newInputStreamReader(System.in);/创建buf对彖str=buf.readLine();/JIJreadLine()方法读入字符串存入stf中/且须理工OException异常(第3章Java语言基础39这个输入数据的某本结构是固定的格式,其中的有关输入语句

39、的功能将在第10章介绍。利用上述格式从键盘输入的数据,不管是文字还是数字,九va皆视为字符串,因此若是要从键盘输入数值则必须再经过转换。该格式中的相应语句可写成如下的格式,其作用完全相同。importjavaio*;publicclassclass_name/类名秒;publicstaticvoidmain(Stiringargs)throwsIOExceptionStringstr;/声明str为String类型的变量InputStreamReaderinp:/声明inp为InputStreamReader类的变量,该类在java,io类库中inp=newInputStreamReader(

40、System.in);/创建inp对彖BufferedReaderbuf;/声明buf为BufferedReader类的变iiL该类在java,io类库中buf=newBufferedReader(inp);/创建buf对彖str=bufreadLine();/用readLine()須去读入芥彳串存入str中,IOException异常这种格式中的sti-buf.readLineO;语句是利用buf调用readLine0方法将从键盘上读取的数据均作为字符串来处理,当然也町以利用readO方法从键盘上读取单个的字符型数据。如设c是定义成char型的变量,则语句“c=(char)buf.read(

41、):”将从键盘上读取一个字符,赋给字符型变量Co下而举例来说明如何山键盘输入文字、数字以及两个以上的数据。1)输入字符串从键盘输入的所有文字、数字,Jave皆视为字符串,因此程序在处理上很简单,只要将输入的内容赋值给一个变量即可。【例3.3】从键盘输入数据。1 /filename:App3_3.java从键盘输入字符串2 importjava.io.*;/加载java,io类库里的所有类3 publicclassApp3.34 5 publicstaticvoidmain(Stringargs)throwsIOException6 7 BufferedReaderbuf;8 Stringstr

42、;9 buf=newBufferedReader(newInputStreamReader(System.in);10 System.outprint(请输入字符串;”);/输出字符串11 str=buf.readLine();/将输入的文字指泄给字符串变量str存放12 System,out.printin(rr您输入的字符串是:”+stir);/输出字符串13 14 程序运行结果为:请输入字符串;Java语言程序设计/您输入的字符串是:Jmva语汀程序设计说明:其中加有下划线的内容是用户从键盘输入的内容,斜箭头号表示回车符,下同。在程序中,第2行的import命令类似于C/C-H语言中的i

43、nclude,而“importjava.io.*;”则会加载java.io类库中的所有类,以供后而的程序代码使用(程序中的IOExceptioii、IiiputStreaniReader与BufferedReader类均属于该类库)。第10行System.out.print()语句的功能与System.out.printlnO语句的功能基本要相同,也是输出括号中的数据,但其不同的是该语句输出数据后不换行。当程序运行到第11行时,会等待用户输入数据,输入完毕后按下Enter键,所输入的内容赋给字符串变量sti。字符串变量的名称可以是任何合法的Java标识符。说明:若将该程序的第8行改为“char

44、str;,第11行改为“str=(char)buf.readO;则该程序只从键盘上读取一个字符,然后输出。2) 输入数值山于从键盘输入的数据均被视为字符串,所以从键盘上输入的数值型数据,必须先利用表3.7中所提供的方法进行转换后,字符串的内容才会变成数值。【例3.4从键盘输入数字,然后将其转换成数值型数据。1 /filename:App3_4.java由键盘输入整数2 importjava3 publicclassApp3.44 5 publicstaticvoidmain(Stringargs)throwsIOException6 7 floatnum;8 Stringstr;9 Buffe

45、redReaderbuf;10 buf=ne,wBufferedReader(newInputstireamReadGf(System.in);11 System,out.print(谙输入一个实数:”);12 str=buf.readLine();/将输入的文字指左给字符串变量str存放13 num=FloatparseFloat(str);/将str*转换丿j戈float类型后赋给num14 System.outpr*intJLn(彳您输入fKj数为:n+num);15 16 程序运行结果为:请输入一个实数:32.58/您输入的数为:3程序中的第13行语句是利用parseHoat()方法将

46、从键盘输入的数据,转换为浮点型数据。3) 输入多个数据对于多个数据的输入与单个数据的输入基本相同,下而是从键盘输入两个整数,然后将其相乘后的结果输出到显示器上。【例3.5】从键盘输入多个数据。1 /filename:App3.5java从键盘输入多个数据2 importjava3 publicclassApp35匚弟3氢上6语貢基确414 5 publicstaticvoidmain(Stringargs)throwsIOException6 7 intnumlfnum?;8 Stringstrlzs9 InputStreamReaderin;10 in=newInputStreamReade

47、r(System.in);11 BufferedReaderbuf;12 bufnewBufferedReader(in);13 System,out.print(请输入第一个数:”);14 strl=buf.readLine();/将输入的内容赋值给字符串变量strl15 numl=IntegerpairseHnt(strl);/耳各strl转成int类型后赋给numl16 System,out.print(rrin输入第二个数:);17 str2=buf.readLine();/将输入的内容赋值给字符串变量str218 num2=IntegerpairseHnt(str2);/耳各str2

48、转成int类型后赋给num219 System.outprintin(numl+,*rr+ntmi2+=+(numl*num2);20 21 程序运行结果如下:请输入第一个数:3/请输入第二个数:3*6=18程序中的第14、15行为第一个数的输入,第17、18行为第二个数的输入,再赋给适当的变量名及用相应的转换方法进行转换即可。2.数据输入方式2为了简化输入操作,从JavaSE5版本开始在java.util类库中新增了一个专门用于输入操作的类Seamier,nJ以使用该类创建一个对象,然后利用该対象调用相应的方法,从键盘上读取数据。语句格式如下:importjavautil.*;publicc

49、lassclass_name/类名称publicstaticvoidmain(Stringargs)Scannerreader=newScanner(System.in);/用System.in创建个Scanner对象doublenum;/声明double型变量,也可声明其他数值型变呈num=reader.nextDouble();/调用reader对彖的相应方法,读取键盘数据在该结构中用创建的reader対象调用nextDouble()方法来读取用户从键盘上输入的double型数据,也可用reader対象调用下列方法,读取用户在键盘上输入的相应类型的数据:iiextByte()、nextDo

50、ubleOiiextFloat()、nextlntO、nextLongOnextShort()next()nextLine()o上述的nextXXX()方法被调用后,则等待用户从键盘上输入数据并按Enter键(或空格键、Tab键)确认。在从键盘上输入数据时,通常的做法是让readei对象先调用hasNextXXXQ方法判断用户在键盘上输入的是否是相应类型的数据,然后再调用nextXXXO方法读取数据。例如,用户在键盘上输入123.45后按Entei键,hasNextFloat。的值为true,而hasNexthitO的值为falseonext()或nextLine()方法被调用后,则等待用户在

51、键盘上输入一行文本,即字符串,这两个方法返回一个String类型的数据,Strii鸟类型将在5.4节讨论。下而举一个简单的例子,来说明该语句的用法,该语句的其他用法在4.4节讲述循环语句时详细介绍。【例3.6】利用Seamier类从键盘输入多个数据。1 /filename:App3=6.java从键盘输入多个数据2 importjava.util.*;/加载java,util类库里的所有类3 publicclassApp3.G4 5 publicstaticvoidmain(Stringargs)6 7 intnuml;8 doublenum2;9 Scannerreader=ne,wScan

52、ner(System.in);10 System,out.print(请输入第一个数:”);11 numl=reader.nextlnt();/将输入的内容做int型数据赋值给变量numl12 System.outprint(请输入第二个数:);13 num2=reader.nextDouble();/将输入的内容做double型数据赋值给变Mnum214 System.outprintin(numl+u/rr+num2+=+(float)numl*num2);15 16 程序运行结果如下:谙输入第一个数:5/请输入第二个数币5*8.0=40.0【例3.7利用Seamier类,使用next。和

53、nextLine()方法接收从键盘输入字符串型数据。1 /filename:App3_7java从键盘输入多个数据2 importjava,util.*;/加载java,util类库里的所有类3 publicclassApp3_74 -5 publicstaticvoidmain(Stringargs)6 7 Stringslzs2;8 Scannerreader=ne,wScanner(System.in);9 System,outprint(请输入第一个数据:);10 sl=reader.nextLine();/将输入的内容作为字符串型数据赋值给变量si11 System,out.prin

54、t(请输入第二个数据:”);12 s2=reader.next();/按Enter键后next()方法将回车符和换行符去掉13 System.outpirintJLn(”输入是”+sl+”用I”+s2);14 15 程序运行结果如下:38厂ja茴程京擾讦基础(第4请输入第一个数据:abc/请输入第个数据:xyz/输入的是abc和xyz说明:nextO方法一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等,next()方法会自动将其去掉,只有在输入有效字符之后,iiext()方法才将其后输入的空格键、Tab键或Enter键视为分隔符或结束符;而next

55、Liiie()方法的结束符只是Enter键,即nextLineO方法返回的是Enter键之前的所有字符。读者可以将例3.7中的第10行改为调用next()方法,再把第12行改为调用nextLineO方法后再试一下,以加深理解。3.7运算符与表达式在程序设计中经常要进行各种运算,从而达到改变变最值的目的。要实现运算,就要使用运算符。运算符是用来表示某一种运算的符号,它指明了对操作数所进行的运算。按操作数的数目来分,有一元运算符(如卄)、二元运算符(如+、和三元运算符(如?:),它们分别对应于一个、两个和三个操作数。按照运算符功能来分,基本的运算符有下而几类。算术运算符包括+、-、*、/、+、O关

56、系运算符包括A、V、=、V=、=、!=。逻辑运算符包括!、&、II、&、I。位运算符包括、VV、&、|、八、。赋值运算符包括=、扩展赋值运算符,如*、/=等。条件运算符包括?:。其他运算符包括分量运算符、下标运算符、实例运算符instanceof.内存分配运算符new.强制类型转换运算符(类型)、方法调用运算符0等。3.7.1算术运算符顾名思义,算术运算符就是用来进行算术运算的符号。这类运算符是最皋本、放常见的。算术运算符作用于整型或浮点型数据,完成相应的算术运算。Jaw语言的算术运算符分为一元运算符和二元运算符。一元运算符只有一个操作数参加运算,而二元运算符则有两个操作数参加运算。1.二元算

57、术运算符二元算术运算符如表3.8所示。表3.8二元算术运算符运算符功能示例+加运算a+b减运算a-b*乘运算a*b/除运算a/b%取模(求余)运算a%b#(Java8讦基硼丫勅版门对于除号“/”,它的整数除法和实数除法是有区别的:两个整数之间做除法时,只保留整数部分而舍芥小数部分。对于两个整数之间的除法和取模运算,则式子(a/b)*b+(a%b)=a是恒成立的。对取模运算符“”来说,其操作数可以为浮点数。即a%b与a-(int)(a/b)*b)的语义相同,这表示a%b的结果是除完后剩下的浮点数部分。只有单精度操作数的浮点表达式按照单精度运算求值,产生单精度结果。如果浮点表达式中含有一个或一个以

58、上的双精度操作数,则按双精度运算,结果是双精度浮点数。如37.2%10=7.2。值得注意的是Java语言对加运算符进行了扩展,使它能够进行字符串的连接,如”abc”+”de”,得到字符串“abcde”,详见3.7.7节。2. 一元算术运算符一元算术运算符如表3.9所示。表3.9元算术运算符运算符功能示例+正值+a负值-a+加1+a或a+减1a或a加1、减1运算符既可放在操作数之前(如卄i或T),也可放在操作数之后(如i+或i),但两者的运算方式不同。如果放在操作数之前,操作数先进行加1或减1运算,然后将结果用于表达式的操作;如果放在操作数之后,则操作数先参加其他的运算,然后再进行加1或减1运算

59、。例如,inti=10fkrmrn;j=+i;/取原值J!Jj=10k=-i;/取相反符号值,则k=-10m=i+;/先m=i,再i=贝ljm=10,i=llm=+i;/先i=i+lf4?m=iz贝lji=12/m=12n=i-一;/先n=if再i=则n=12,i=lln=i;/先i=i-lf再n=if贝lji=10,n=10说明:一元运算符与操作数之间不允许有空格。加1或减1运算符不能用于表达式,只能用于简单变量。例如,卄(x+1)有语法错误。3.7.2关系运算符关系运算符用于比较两个值之间的大小,结果返回逻辑型的值tee或false,关系运算符都是二元运算符,如表3.10所示。表3.10关

60、系运算符运算符功能示例大于ab=大于或等于续表运算符功能示例小于ab=小于或等于a=b=等于a=b!=不等于a!=b注意:不能在浮点数之间作的比较,因为浮点数在表达上有难以避免的微小误差,精确的相等比较无法达到,所以这类比较没有意义。3.7.3逻辑运算符逻辑运算与关系运算的关系非常密切,关系运算是运算结果为逻辑型量的运算,而逻辑运算是操作数与运算结果都是逻辑型量的运算。逻辑运算符如表3.11所示。表3.逻辑运算符运算符功能示例运算规则&逻辑与a&b两个操作数均为true时,结果才为true1逻辑或a|b两个操作数均为false时,结果才为falseI逻辑非(取反)!a将操作数取反A异或aAb两个操作数同真或同假时,结果才为false&简洁与a&b两个操作数均为true时,结果才为true1简洁或a|b两个操作数均为false时,结果才为false!为一元运算符,实现逻辑非。&、|为二元运算符,实现逻辑与、逻辑或运算。简洁运算(&、|)与非简洁运算(&、|)的区别

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!