Java程序设计资料_第1页
Java程序设计资料_第2页
Java程序设计资料_第3页
Java程序设计资料_第4页
Java程序设计资料_第5页
已阅读5页,还剩201页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章概述1.若程序中公有类的名字是OneApp,则保存该程序的文件名是【】A.OneappB.Oneapp.classC.OA.OneappB.Oneapp.classC.OneAppC中使用typedef进行类型定义,在中已经去掉了。另外三个选项都是的特点。5.下列关于程序的叙述中,正确的是A.程序必须配合HTML文件才能执行B.JVM解释执行源程序C.程序中可以使用指针6.下列选项中,不是程序主函数main()前面的修饰符的是【】A.classB.staticC.void第一行中,即类头中。mainO不是类,是类中的函数。main(前三个修饰符的次序可稍做变7.下列概念中,属于面向对象重要概念和机制之一的是【】1.假设程序保存在文件MyTest.中,则编译这个程序的命令是。2.类Testll经编译程序编译后,产生的文件是。答案:字节码文件Testll.class。答案:虚拟机,英文是VirtualMachine。4.程序主函数mainO前面的修饰符是。5.源文件经编译后生成的二进制文件称为。字节码文件是类文件。参见教材第一章第一节中的内容。6.编写好的源程序在计算机上运行需依次经历两个阶段,分别是和解释执行。解答:是通用的、面向对象的,并具有分布性、安全性和(1)语法简单,功能强大的语法非常像C++,同时去掉了C++中不常用且容易出错的地方,解释器只占用很少(2)与平台无关一个非常重要的特点就是与平台的无关性,虚拟机(VirtualMachine,简称JVM)是编译器将程序编译成虚拟机能够识别的字节码(bytecode)。字节码就是虚拟机的机器指令,它与平台无关,有统一的格式,不依赖于具体的硬件环境,只运行在JVM上。在任何安装运行时环境的系统上,都可以执行这些代码。JVM在执行字节码文件时,把字节码解释成具体平台上的机器指令执行。所以程序在不同的平台上运行时,不需要重新编译。(3)解释编译两种运行方式程序可以经编译器得到字节码。在现在的版本中又加入了编译功能(即justintime编译器,简称JIT编译器),JIT编译器将字节码转换成本机的机器代码,然后可以以较高速度执(4)多线程内置了级多线程功能,提供现成的类Thread,只要继承这个类就可以编写多线程的程(5)动态执行兼有丰富的API文档及类库瘦客户机架构,减少维护工作。为用户提供了详尽的API文档说明,开发工具包中的类库包罗万象,类库与时俱进,随时更新,增加的新方法和其2.为什么说是平台无关的?不同的目标文件。而JVM屏蔽了具体平台的差异。编译器将程序编译成虚拟机能够识别的字节码(bytecode)。字节码就是虚拟机的机器指令,它与平台无关,有统一的格式,不依赖于具体的硬件环境,只运行在JVM上。在任何安装运行时环境的系统上,都可以执行这些代码。JVM在执行字节码文件时,把字节码解释成具体平台上的机器指令执行。所以程序在不同的平台上运行时,不需要重新编译。为程序跨平台的无缝移植提供了很大的便利。3.什么是虚拟机?解答:虚拟机(VirtualMachine,简称JVM)是一台虚拟计算机,是通过在实际的计CPU指令,包括算术运算、流控制和数组元素访问等。JVM的具体实现包括:指令集(等价于CPU的指令集)、寄存器组、类文件格式、栈、虚拟机规范提供了编译所有代码的硬件平台。因JVM的代码格式为压缩的字节码,因而效率较高。由JVM字节码表示的程序必须保持执行符合JVM定义的类文件格式的任何类文件。4.查阅API文档,列出API文档中4个包名。用到这4个包,后续章节中也会提及。5.查阅API文档,列出.lang中4个类。到这4个类,后续章节中也会提及。6.查阅API文档,列出.awt.event中4个接口。解答:.awt.event是处理事件的包,选出4个常用接7.查阅API文档,列出.lang.Math类中4个常用方法。解答:lang.Math类中包含了许多常用函数,选出4个常用方法如下。staticdoublerandom():返回大于等于0.0且小于1.0的一个正的double型值。8.查阅API文档,列出.lang.String类中4个常用方法。booleanequals(ObjectanObject):将本串与指定对象anObject进行比较。返回指定子串str在本串中第一次出现的索引。9.查阅API文档,列出.util.Random类中2个常用方法。doublenextDouble):根据本随机数生成器,从0.0到1.0之间、均匀分布的double型伪intnextInt(intbound):根据本随机数生成器,从0(含)到指定值bound(不含)之间、10.查阅API文档,列出.awt.Color类中2个构造方法。Color(intr,intg,intb):使用指定的范围在(0-255)间的红色、绿色和蓝色值r,g,b,创第二章数据和表达式一、单项选择题1.以下选项中,能作为关键字的字符串的是【】A.defineB.typeC.includeD.switchdefine可以进行宏定义,是C中预处理命令中的一种,在中已经丢弃。C中使用include语句包含h文件,中使用的是import语句。switch用在多重分支语句中。参看教材第三章第二2.以下标识符中,不是关键字的是【】A.waitB.newC.long使用new调用类的构造方法来创建对象。long表示长整型类型。switch是多分支语句,其用法参见教材第三章第三节的内容。3.以下字符串中,能作为程序中的标识符的是【】A.ValB.OK#C.2ValOK#中含有特殊字符#。2Val是以数字2开头。catch是关键字。它们都不能用作标识符。4.以下字符串中,能作为程序变量名的是【】A.defaultB.final变量名必须是一个合法的标识符,CASE是全大写的,全小写的case是关键字,两者是不相同的。default用在多重分支语句中,final用在异常处理语句中。long表示长整型类型。5.下列选项中,能作为注释的是【】类似的,选项D也是没有结束标记*/。选项C的结束标记符号不正确。6.标识符MAIN不能用作【】A.类名B.接口名C.程序名程序中,主函数名必须是main,且全小写。MAIN是正确的标识符,可以用作类名、接口7.不属于基本数据类型的是【】记录型是C中由程序员通过typedef定义的,中除了整型、浮点型、布尔型等基本数据类型外,程序员仅能定义类类型(由class标识)和接口(由interface标识)。8.以下数据类型转换中,必须进行强制类型转换的是【】int比char的位数多,所以不能进行自动类型转换,必须进行强制类型转换。选项B、C和D都是由位数少的类型转换为位数多的类型,可以自动完成。9.以下数据类型转换中,必须进行强制类型转换的是【】A.long→byteB.short→floatC.int→longD.byte→short10.以下选项中,不是转义字符的是【】二、填空题1.用来声明布尔变量(逻辑变量)的保留字是。2.方法内定义的变量称作答案:自动变量,或是局部变量/临时变量/栈变量。自动变量需要由程序员为其初始化。3.逻辑与和逻辑或运算符有一个特殊的功能,当左侧操作数能决定表达式的值时,跳过右侧操作数的运算。这个功能是4.一个byte类型的操作数和一个int类型的操作数进行运算,结果的类型是不同类型的量进行混合运算时,要先转换为同一种类型,然后再进行运算。通常是位数少的类型转换为位数多的类型。byte类型的操作数要先转换为int类型的,进行运算后的类型也为int类型的。5.当不同数值类型的数据进行运算时,表示范围较小的类型转换为表示范围较大的类型的转换称作。答案:自动类型转换。数的表示范围小于浮点数的表示范围。整型转为浮点型也是自动进行的。6.当不同数值类型的数据进行运算时,表示范围较大的类型转换为表示范围较小的类型的转换称作。不符合自动类型转换规则的数据进行混合运算时,如果需要进行类型转换,必须标注目标类型,进行强制类型转换。7.表达式“45&20”的十进制值是。45的二进制表示为101101,20的二进制表示为10100,两个数进行位与运算,即对应位进行与运算,两个位都为1时结果为1,其余为0。101101&10100=000100,即是4。8.表达式1==1>>>32;的值是_。移位运算符>>>的优先级高于比较运算符==,所以先计算1>>>32。对于int型量,移位操作的位数对32取模,即1>>>32不移位,结果仍是1。这个结果再与1进行比较,相等,所以结果是true。三、简答题1.支持的数据类型有哪些?列出中所有的基本数据类型。本数据类型共有8种,分为4小类,分别是逻辑型、字符型、整型和浮点型。复合数据类型类型,分别是:单精度浮点数float(4字节)及双精度浮点数double(8字节)。关。例如,int型整数总是32位的,而不管是在Linux、Windows还是Android环境下。这4位十六进制数,范围为0~65535。char类型的常量值必须用一对单引号(")括起来。例byte表示的数的范围为-128~127,short表示的数的范围为-32768~32767,int表示的数的范围为-2³¹~2³¹-1,long表示的数的范围为-2³~2³-1。整型常量可用十进制、八进制或十六进制形式表示,以1~9开头的数为十进制数,以0开头的数为八进制数,以0x开头的数为十六进制数。中4种整型量都是有符号的。float表示的数的范围约为1.4e⁴⁵~3.4e³,double2.中常用的运算符有哪几类?每类列出几个,并说明其含义。解答:运算符有算术运算符、关系运算符、逻辑运算符、位运算符,每类列出3个。此外还有几个特殊的运算符。如表2-1所示。表2-1部分运算符及其含义类别运算符运算符含义算术运算符+加法减法加1关系运算符<小于大于等于=等于逻辑运算符逻辑与逻辑或!逻辑非位运算符&位与A位异或左移特殊运算符对象实例字符串连接赋值条件运算符或赋值3.中运算符优先级是如何定义的?举例说明。解答:将全部运算符按从高到低划分了15个等级,每个等级中包含少则一个多则十余个的运算符。比如,数组下标运算符,后缀形式的加1和减1运算符具有最高优先级,扩展次序。各运算符的优先次序见教材的表2-8。abstract,bit,boolean,case,character,comment,double,else,end,endy,float,for,generic,goto,if,implements,import,inner,instanceof,interface,line,ve,new,null,old,oper,outer,package,print,private,rest,return,short,static,suphronized,this,throw,throws,transient,var,void,volatile,abstract,boolean,case,double,else,false,final,finally,float,for,gmport,inner,instanceof,interface,long,native,new,null,outer,package,private,rt,static,super,switch,synchronized,this,throw,throws,transient,vbit,character,comment,end,endif,extend,line,loop,old,oper,print,var,w5.请叙述标识符的定义规则。指出下面给出的字符串中,哪些不能用作标识符,并说明原(1)标识符是以字母、下划线(_)或美元符($)开头,由字母、数字、下划线(_)或美元符($)组成的字符串。仅能含有这些字符。(2)标识符区分大小写。(3)标识符的长度没有限制。(4)注释和空白不能插在一个标识符之中。(5)有许多关键字,它们都有各自的特殊意义和用法,不得用它们作为标识符。题目所给的标识符中,不正确的有this和2tol,其中this是中的关键字,不能用作标识6.转义字符是什么?列举几个转义字符。殊格式表示的有特殊含义的字符。表2-2中列出了几个转义字符。表2-2几个转义字符及其含义转义字符含义退格键(Backspace换行符回车符水平制表符(Tab)反斜杠\\单引号'双引号"7.中的类型转换是指什么?支持变量数据间的自动任意转换,有时必须显式地进行变量类型的转换。如果同为整数类型,或同为浮点数类型,那么,转换的原则是位数少的类型可以转换为转换规则的类型转换,都必须标注出目标类型的名字,这属于强制类型转换。8.>>>与>>有什么区别?举例说明。解答:提供两种右移运算符。逻辑右移运算符(也称无符号右移运算符)>>>只对位进行操作,而没有算术含义,它用0填充移位后左侧的空位。运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。右移的结果为:每移一位,第一个操作数被2整除一次,移动的次数由第二个操作数确定。比如,-256>>4得到-16,-256>>>4得到268435440,9.下列表达式中,找出每个操作符的计算顺序,在操作符下按次序标上相应的数字。解答:在中,在对一个表达式进行计算时,如果表达式中含有多个运算符,则要按运算符的优先顺序从高向低依次进行,同级运算符则按结合律进行。括号可以改变运算次序。各表中aa(+2+3ab/1b/11C3*2*2+2)ddC3d10.什么是变量声明?解答:中,通过在对象类型后紧跟一个变量名来对变量进行声明。例如;intnum。变量声明也叫变量说明。【延伸阅读】根据变量是基本数据类型还是复合数据类型,其声明的效果也分两种结果。对于简单类型的变量,声明即为创建,也就是在内存中分配了适当的存储空间。完成初始化后可以直接使用。而对于复合数据类型变量,声明只是定义了对所声明变量的一个引用,这个引用还没有指向任何可用的存储单元,还需要通过new运算符来实例化该对象,也就是分配内存,并让引用指向这个存储区的首地址。四、程序分析题阅读下列程序片段,请写出程序片段的执行结果。解答:>>>与>>都是右移运算符,它们的不同之处在于使用不同位填充移位后左侧的空白。>>运算使用符号位填充左侧的空位,而>>>使用零填充空位。也就是说,>>运算保持操作数的符号不变,而>>>运算则可能改变原数的符号。分析上面的程序段。初始时,b1和b2都是int型的变量,占32位,初值均为1,两个变量分别向左移动31位,两个值变为:10000000000000000000000000000000,在计算机使用>>运算符将bl向右移动任何位,它的值都不使用>>>运算符则有所不同。>>>使用零填充左侧的空位,所以将b2向右移动31位后,它的值为:00000000000000000000000000000001,即b2的值为1。再向右移动1位,则它的值为:00000000000000000000000000000000,即b2的值为0。第三章流程控制语句include语句是C中用来包含头文件的语句。中引入包的语句是import语句。A.break语句B.continue语句C.goto语句D.for语句goto语句使得程序的执行流程混乱,程序的易读性降低,中已经不再使用该语句。3.设i的初值为6,则执行完j=i-;后,i和j的值分别为【】A.6,6B.6,5C.5,6给j赋值时,使用的是i原来的值,即6。赋值后,i的值减1,为5。4.在一个if语句中,下列选项中正确的是【】C.if的个数一定少于else的个数D.if的个数可能多于else的个数if语句是允许嵌套的,而且else语句是可选的。当在一个if语句中又嵌套了if语句时,就会出现多个if的情况。而因为else是可选的,所以它的个数少于等于if的个数。5.switch语句中,大多数情况下,每个case块中最后一条语句应该是【】A.defaultB.continuebreak语句,保证执行了该块中的语句后控制流转到switch语句之后继续执行。如果进入最后一个case块执行,则写不写break语句,控制流都转到switch语句之后,所以这个break7.switch语句中,如果没有相匹配的条件,则执行【】A.任一个case后的语句B.default之后的语句A.ClassNotFoundExceptionB.ArithmeticExceptionC.FileNotFoundExceptionD.IOException9.下列选项中,与try语句配套使用的语句是【】A.defaultB.catchC.breakD.casetry-catch语句是异常处理语句,用try语句括住可能会出现异常的语句,后面使用catch语句A.defaultB.catchcatch语句的最后通常是finally语句。不论是否捕获到异常,都要执行finally后面的语句。I和Ⅲ中,使用的分别是&和运算符,这是位运算符,没有短路功能,所以&或运算符的前后子表达式都要执行。如果s是空串,则调用s.length()时会发生异常。Ⅱ和IV中,使用的是逻辑运算符&&和|,具有短路功能。对于具有短路功能的运算符,如果运算符前面的子表已经能够决定整个表达式的结果为true,不用去计算s.length(),所以二、填空题2.能替换if语句的语句是if语句与switch语句都是分支语句,switch语句中的表达式与if语句中的条件表达式不完全3.switch语句中,表示条件的表达式只能是类型或类型。5.流控制语句有3类,对应于顺序流的语句是流控制分为3类:顺序流、循环流和分支流。对应于顺序流的是赋值语句。这3种语句都是循环语句。这两种语句都是分支语句。8.如果想使用其他包中的类,则需要在程序的开头使用语句。]switch语句的执行过程是:计算表达式的值,用该值依次和cl、c2、…、ck相比较。如果该值等于其中之一,例如ci,那么执行caseci之后的语句组i,直到遇到break语句跳到switch之后的语句。如果没有相匹配的ci,则执行default之后的语句。2.程序3.1中如果某个break语句不写,则程序执行时的输出是什么?举例说明。解答:如果某个break语句不写,则当前执行的case块执行完毕,会继续执行下一个case块内的语句,直到遇到break语句时结束。举例来说,在程序3.1中,如果第一组case对应的语句块内不写break语句,即不写第一个break语句,则当输入命令行第一个参数的首字符是数字时,比如输入“234”,那么输条输出是不应该出现的。3.请说明嵌套的if语句中,else语句的对应规则。解答:规定else子句属于逻辑上离它最近的if语句,也就是同一块中还没有匹配else的最近的if。4.请简要说明while语句与do-while语句的不同之处。解答:while语句和do-while语句的语法格式是不同的,while中条件表达式写在前面,do-while中条件表达式写在后面。两种语句条件表达式的判断时间也不同。while语句先判断条件表达式的值,然后根据值的真假决定是否执行循环体。do-while语句先执行循环体,再判断条件表达式的值,以决定是否再次执行循环体。两种语句中循环体的执行次数也不同。while中,循环体语句可能一次也不执行,do循环中的循环体至少执行一次。5.请简要说明while语句与for语句的适用情况。解答:for语句中,可以以执行次数来控制循环体的执行,当明确了次数后,可以选用for语句。而有时只知道循环体执行的前提条件,但执行次数并不明确,此时可以使用while解答:把程序运行中可能遇到的错误分为两类,其中一类是非致命性的,通过某种修正后程序还能继续执行。这类错误称作异常(Exception)。生成的异常对象传递给运行时系统,运行时系统寻找相应的代码来处理这一异常。生成异常对象并把它提交给运行时系统的这一过程称为抛出(throw)一个异常。运行时系统从生成对象的代码块开始进行回溯,沿方程称为捕获(catch)。7.是如何处理异常的?地,当发生异常时,有3种方法可以处理抛出的异常。(1)可以忽略它,这将导致程序中断,并输出一条信息。(2)在发生异常的地方处理它。根据异常所属的类,找到对应的catch语句,然后执行其后的语句序列,完成对异常的处理,恢复(3)运行时系统从生成异常对象的代码块开始,沿方法的调用栈逐层回溯,在调用层次中更高层的方法中捕获并处理异常。8.try及catch语句的作用是什么?语法格式如何?解答:对于可能抛出异常的代码段,要使用try语句括住,用catch语句指明要捕获的}其中,异常类型1、异常类型2、…、异常类型k是产生的异常类型。根据发生异常所属的类,找到对应的catch语句,然后执行其后的语句序列,完成对异常的处理,恢复程序的执9.在什么情况下执行try语句中finally后面的代码段?在什么情况下不执行?解答:在执行try语句时,不论是否捕获到异常,都要执行finally后面的语句。try后面大括号({})中的代码称为保护代码。如果在保护代码内执行了System.exit()方法,则程序将退出,此时不执行finally后面的语句,这是不执行finally后面语句的唯一一种情况。10.你能说出中常见的几个异常吗?它们表示什么意思?在什么情况下引起这些异常?(1)ArithmeticExceptio整数除法中,如果除数为0,则发生该类异常。虚拟机遇到这样的错误时会自动中止程下面的程序将引发ArithmeticException异常。result=numerator/denomi}(2)NullPointerException如果一个对象还没有实例化,那么访问该对象或调用它的方法时将导致NullPointerException异常。因此使用一个变量前,要先检查一下它是否为null。第一行创建了有4个元素的数组im,每个元素都是image类型的,系统为其进行初始化,每个元素中的值为null,表明它还没有指向任何实例。第二行要访问im[0],由于访问如果元素个数是个负数,则会引发NegativeArraySizeException异常。据length值自动检查下标的大小。如果数组下标越界,则将导致11.以下语句要打印从7开始不大于7的正奇数,但程序中有错误,请改正,然后写出此循当打印完值1后,k值修改为-1,而且后面的执行只会使k值越来越小,永远不会等于0,即(k!=0)永远为true,循环会一直执行下去,进入死循环。循环次数是4次。四、程序填空题1.某人以年利率r向银行存款m元,一年后存款额为m*(1+r),他想知道存多少年后,存款额会达到原来的k倍。以下方法已知m、r和k,计算至少多少年后存款额大于等于m*k。解答:①money<=m*k2.方法voidFibonacci(intm)的功能是输出不大于m的Fibonacci数列中的元素。注:Fibonacci数列的前两个数都是1,从第三个数开始,数列的每个数是其前面两个数之和。voidFibonacci(intm)解答:①return五、程序设计题称为n的阶乘,并且规定0!=1。试编制程序计算2!,4!,6!,8!和10!,并显示计算结果。解答:阶乘函数这是一个递归定义,因为阶乘本身又出现在阶乘的定义中。对于所有的递归定义,一定要有一个递归结束的出口,这既是定义的最基本情况,也是程序执行递归结束的地方。本定义中的第一行即是递归出口。当一个函数使用递归定义的时候,往往直接使用递归方法实现它。阶乘的递归实现如下//输出结果分析式子可以看出,S是由n项相加得到的。所以循环体的执行次数为n。S的初始值为0,循环变量i从1增大到n,将1/i加到S中,即可得到最终结果。}3.已知变量n,请写出使用for语句计!代码。分析式子可以看出,S是由n+1项相加得到的。可以将S的初始值设置为1,即第1项的值。这样,循环体的执行次数为n。循环变量i从1增大到n,将1/(3xi)加到S中,即可得到最终结果。}4.编写程序打印下面的图案。解答:从图中可以看出,该图以中间行为基准,上下对称。首先看看要打印的总行数,如果每行都不同,则需要定制各行的打印内容。如果有重复或是对称内容的话,则可以简化语句的处理。观察本题中要输出的内容,一共要输出7行,以initNum变量来表示。第1行和第7行一样,第2行和第6行一样,第3行和第5行一样,实际上只需要定制4个不同的行即可。从1开始计行号。各行的星号数与行号i的关系为:当i<=(initNum+1)/2,相应行的星号之间有两个空格。再看每行最左侧的空格数与行号的关系:当i<=(initNum+1)/2,相应行PrintAstpa=newPrintAst();intinitNum=7;for(intm=1;m<=3*(i-1);for(intm=21-3*i;m>0;m-)pa.printSpace();for(intk=1;k<=2*i-initNum;k++)pa.printAstar();publicvoidprintAstar){System.out.printpublicvoidprintSpace(){System.out.prin5.编写程序打印下面的图案。水*同样地,需要先判定输出的总行数,本题中是10行。接下来,确定每行输出的星号数及起始位置。从图中看出,起始位置都是从第一列开始。第一行输出10个星号,以后逐行递减程序实现如下:publicstaticvoidmain(for(intj=0;j<initNum-i;j++)//总共输出10行解答:乘法口诀表是学习算术时入门级的知识,主要内容是10以内的两个数相乘的结publicstaticvoidmain(String[]ar{MultipleTablemt=newfor(intk=1;k<i;k++){//输出共9行res=i*j;publicvoidprintFormula(i{if(res>9){//对齐7.编写程序,要求判断从键盘输入的字符串是否为回文(回文是指自左向右读与自右向左如何判断一个字符串是回文呢?有很多的方法,下面介绍其中比较简单的两种实现。方法二:设字符串为w,将字符串全部反转变为wl。例如字符串“abcdefg”反转后的if(str[i]==str[j])net++;}InputStreamReaderreader=newIn}catch(IOExceptione){//IOException是个标准异常booleanbw=hw1.isHuiWen(pm.toCharArray),pm.length());System.out.println("Itisnothuiwe第二种方法可以让读者熟悉字符串及字符数组的使用,其实现程序如下:/分配一个新的字符数组}HuiWen2hwl=newHuiWen20;InputStreamReaderreader=newInSystem.out.print("give8.编写程序,判断用户输入的数是否为素数。素数是指只能被1和自身整除的正整数。解答:素数是只能被1和本身整除的整数。换句话说,除1和本身外,素数没有其他因子。这点可以作为判定素数的规则。对于一个正整数n,如果2~n-1之间的任何一个整数都不能整除n,则n为素数。进一步的分析可知,仅需判定2~√n之间的任何一个整数都不能整除n,即可判定n为素数。这样可以减少循环的执行次数。if(pm%i=0){}}publicstaticvoidmain(Stringargs[InputStreamReaderreader=newIni=Integer.valueOf(inpubooleanbl=prim.isPrim9.编写程序,将从键盘输入的华氏氏温度转换为摄氏温度。同样地,因为要处理键盘输入,所以添加了异常处理。转换程序的实现如下:TempConvertertc=ntry{/定义输入源InputStreamReaderreader=newInSystem.out.print("giveyourfahtmp=Double.valueOf(input.readLine());//将输入转为双精度数System.out.println("thecelsiusof10.编写程序,读入一个三角形的三条边长,计算这个三角形的面积,并输出结果。提示:设三角形的三条边长分别是a、b、c,则计算其面积的公式为:解答:根据平面几何的理论,当三个数能够满足任意两数之和大于第三个数及任意两数之差小于第三个数时,这三个数才能构成三角形的三条边。由三条边的逻辑关系,当上述条件满足一个时,另外一个也必然满足。因此只需要判定任两边之和大于第三边即可。根据题义,程序中定义了Trigsquare类,该类包括三角形的三条边这三个属性,以及判断是否能构成三角形的isTriangle()方法和求解三角形面积的getArea()方法。程序实现如下://x、y、z分别为3条边publicbooleanisTriifthis.x>0&&this.y>0&&this.z>0){//必须是3个正数,边长不能是负值if((this.x+this.y)>this.z&&//任意两边publicdoublegetAreturm(Math.sqrt(s*(s-this.x)*(s-this.y)*(s-thidoubles[]=newdouble[3];//使用一个数组存放3个数InputStreamReaderreader=newInputStreamReader(System.in);System.out.print("输入3个数,每行输入一个:n");for(inti=0;i<3;i++){//输入3个数,每行输入一个Trigsquarets=newTrigsquare(s[0],s[1],s[2]);System.out.println("thenumbersinputcannotbeatr2)从键盘输入一个日期,屏幕上回答是星期几,也以当年为例。3)从键盘输入两个日期,计算这两个日期之间含有多少天。一些基本的方法。本例从GregorianCalendar类派生一个类MyCalender,创建它的实例以得到某个月的月历。计算星期几则采用Calendar类中定义的DAYOFWEEK常量来得到,由diff=(datel.getTime()-date2.getTime程序实现如下:{c=newGregorianCalendar(//闰年的2月份天数System.out.println("--------Calendar:"+yeintfirst=c.get(Calendar.DAY_OF_WEEK);//1日在星期几for(i=1;i<first;i++)System.out.print("");//1日之前的空白if(first++%7==0)System.ouc=newGregorianCalendar(year,month-1,date);intday=c.get(Calendar.DAY_OF_WEEK);//返回该日期是星期几publicintdiffDate(.utilreturnMath.abs((int)((datel.getTime()-date2.getTime())/(24*3600*1000)));InputStreamReaderreader=newInpm=Integer.parselnt(input.readLin}catch(NumberFormatExceptionne){InputStreamReaderreader=newInMyCalendermc=newMyCalender();count=mc.inputNum();//选项号,有4种System.out.print("inputthemonth(1-12):");.util.Datemydate1=new.ut.util.Datemydate2=new.utSystem.out.print("pleaseinputStringdl=mc.inputDmydatel=myFormatter.parse(d1);mydate2=myFormatter.pa+mc.diftDate(mydatel}//endofwhile出这个值的最佳可能,要求使用的币值个数最少。例如,给出1.46元,将得到下列结果:1.46元=的人民币有如下面值:1元、5角、2角、1角、5分、2分、1分。publicstaticvoidmain(/分别对应的钱币的值,以分为单位InputStreamReaderisBufferedReaderbr=newBuasval=Integer.parselSystem.out.println("输入的不是数值!");}System.out.println(val[i]+"分的个数:"+num[i]);13.请编写方法intrevInt(intk),该方法的功能是返回与十进制正整数k的数字顺序相反排列的正整数。如已知正整数是1234,则方法的返回值是4321。解答:要让整数按各位反序重排,需要依次取得原数的各数位,再拼成一个整数。可以从右向左依次取各个数位的值。以1234为例,取得的值是4、3、2、1。再将这些值拼起来,比如先得到的是4,temp=4,然后计算temp×10+3再赋给temp,得到temp=43。继续temp×10+2,得到temp=432,再继续tempx10+1,得到temp=4321。对于整数k,kmod10的结果即得到k的个位,将这个值添加到目标值temp的最后一k=k/10;14.使用.lang.Math类,生成100个0~99之间的随机整数,找出它们之中的最大者及最小者,并统计大于50的整数个数。该方法返回一个0.0~1.0之间的小数,如果要得到其他范围的数,则需要进行相应的转换,例如想得到一个0~99之间的整数,可以使用下列语句:intnum=(int)(100×Math.random());解答:提示中已经说明了,可以使用Math.random()方法得到随机数,但这个随机数是一个0.0~1.0之间的浮点数,首先需要将数的范围变化到0~99之间,然后再将得到的数转程序中,使用了两个变量MAXof100、MINof100分别记录这100个整数中的最大值和最小值。先生成前两个随机整数,较大者放入MAXof100中,较小者放入MINof100中。随后使用一个循环生成剩余的98个随机整数,然后分别与MAXof10新生成的数如果大于MAXof100,则将MAXof100修改为新的数。同样如果新生成的数小于MINof100,则让MINof100记下这个数。程序中使用count记录大于50的随机数的个数,初始时,它的值为0。{MAXof100=(int)(100*Math.MINof100=(int)(100*Math.rSystem.out.print(MAXof100+"");num=MINof100;MAXof100=num;num=(int)(100*Math.rand//控制每输出10个数即换行/l更小的数记入MINof100//记录下大于50的个数System.out.println("Thenumberofrandom第四章面向对象程序设计1.假设满足访问权限的前提下,下列关于实例方法和静态方法的说法中,错误的是【】B.静态方法能直接引用静态变量C.实例方法能直接引用实例变量D.静态方法能直接引用实例变量2.下列关于实例方法和静态方法的叙述中,正确的是【】B.类中的静态方法可以直接调用实例方法D.类中的静态方法不可以互相调用实例方法之间可以互相调用,静态方法之间也可以互相调用,所以选项A和D都排除了。那么实例方法和静态方法之间的调用关系是什么样的呢?要调用实例方法必须通过对象,而3.下列选项中,不是构造方法特点的是A.构造方法的名字与类名相同B.构造方法可以从父类继承C.构造方法中要为所有的变量赋初值A.构造方法可以有多个B.构造方法没有返回值类型C.构造方法的参数列表可以不同D.构造方法的调用方式与普通方法相同构造方法不能由程序员任意调用,实际上,仅在创建对象时由系统调用。A.方法名B.方法参数个数C.方法返回值类型D.方法参数的类型1.方法签名包括方法名称加上方法的。2.同一个类中多个方法有相同的名字及不同的参数列表,这种情况称为。3.每个类都有一类特殊的方法,称为。4.程序中调用方法时,参数传送采用的机制是1.类是如何定义的?解释类的特性及它的几个要素。的类根据实现功能的不同,划分成不同的集合,每个集合称为一个包。核心API中有众多的包。些可利用的手段,即可通过哪些函数来操作这些数据。修饰符class类名[extends父类名]{修饰符类型成员变量1;修饰符类型成员变量2;修饰符类型成员方法1(参数列表)方法体}修饰符类型成员方法2(参数列表)(类型局部变量方法体}类定义的第一行是类头,关键字class表明这里定义的是一个类。class前的修饰符允许类名是用户为该类所起的名字,它应该是一个合法的标识符,并尽量遵从命名约定。extends是关键字。如果所定义的类是从某一个父类派生而来,那么,父类的名字应写在extends之后。如果不写的话,则表明隐式继承于Object类。不允许多重继承,所以如果它可以被同一个包中的对象使用。类还可以是final的,表明它不可以再有子类,与之相对2.在程序中,类和对象有什么区别?以是不同的。所以每个对象有区别于其他对3.static关键字是什么意思?4.什么叫做静态方法和静态变量,它们同普通的成员方法和成员变量之间有何区别?如果在创建类的对象实例前就需要调用类中的某个方法,那么将该方法标记static关键字即可实现。标记了static关键字的方法称为静态方法,或称类方法。个变量,也就是对任何一个实例来讲,这个属性的值都是一样的。这样的变量称为类变量,也叫静态变量。可以说静态变量被类的多个静态变量和静态方法与普通的成员变量和成员方法间的区别主要体现在以下几方面:(1)类的每个对象具有它自己的、在类中定义的所有实例变量的副本,但对于静态变(2)静态变量的生命期和实例变量的生命期也是不同的,每次实例化一个对象时,都量从某种意义上来说相当于其他程序设计中(3)在使用上,成员方法与静态方法的形式也不一样。静态方法可以通过一个指向类(4)静态方法中不能使用this和super关键字,不能调用非静态方法,只能访问所属5.什么情况下使用静态变量?用的访问。8.new操作符完成哪些功能?解答:new运算符创建指定类的一个新实例(对象)。然后调用类的构造方法设置新生9.中访问控制权限分为几种?它们所对应的表示关键字分别是什么?意义如何?默认。这些修饰符既可以用来修饰类,又可以用●public:用public修饰的成分表示是公有的,也就是它可以被其他任何对象访问。●private:和它的名字“私有”一样,类中限定为private的成员只能被这个类本身●protected:用该关键字修饰的成分是受保护的,只可以被同一包内的类及其子类的这3个限定符不是必须写的,如果不写,则表明是默认的,相应的成分可以被所在包中访问权限修饰符列在表4-1中。表4-1访问权限修饰符类型无修饰符同一类是是是是同一包中的子类是否是是同一包中的非子类是否是是不同包中的子类否否是是不同包中的非子类否否否是10.什么是自动装箱、自动拆箱?解答:自动将基本数据类型转为对应的包装类的过程称为自动装箱(Autoboxing)。逆向的自动转换称为自动拆箱(unboxing)。1.阅读下列程序,请写出该程序的输出结果。voidchange3(PassTeSystem.out.printIn("Currentpt.类assTest中定义了3个方法,都是在方法内对带入的参数进行修改,为的是考查修改changel的参数是int型变量,带入的实参是整型变量i,值是22。changel内将形参值修改为100,退出返回到main中后,变量i的值不会改变。为"Right",退出后,变量s的值也不会改变。change3的参数是PassTest类型,带入的实参是对象pt,实际上带入的是pt的地址。在change3内改变的是参数对象中的一个成员变量的值。返回后,实参地址没有变化,但这个引用所指向的内存块内,对应成员变量的值改变了。voidchangel(intpi){pi=100;System.out.println("函数内的形参pi的地址是:"+System.identityHashCode(pi));System.out.println("函数内的形参ps的地址是:"+System.identityHashCode(ps)):}po.m_float=100.0f;System.out.println("函数内的形参po的地址是:"+System.identityHashCode(po));System.out.println("函数外的实参i的地址是:"+System.identityHashCoSystem.out.println("函数外的实参pt的地址是:"+System.identityHashCode(pt));System.out.printIn("Currentpt.m_floatis"+pt.m函数外的实参i的地址是:1159190947函数内的形参pi的地址是:1528902577函数外的实参s的地址是:1927950199函数外的实参pt的地址是:9891100442.阅读下列程序,请写出该程序的输出结果。}}publicclassjex6_8{System.out.println(qSystem.out.println(q2.System.out.printIn(q3.}构造方法中要对成员变量赋初值,不同的构造方法可以有不同的赋初值的过程。对象使用固定值10和20进行赋值。创建对象q3时带了一个本类类型的实参,所以调用的是第三个构造方法。使用实参的成员变量的值为新构造的对象赋值。因为是在同一个类中,可以在第三个构造方法中直接访//直接访问r//直接访问r的成员变量,而不是使用r.width)//直接访问r的成员变量,而不是使用rheight)}1.设计并实现一个Course类,它代表学校中的一门课程。按照实际情况,将这门课程的相最后使用主函数测试这个类,并修改课程的学分。/定义课程类别Course(StringcourselD,StrinStringcourseType,intclasthis.courseID=courseID;this.courseName=cthis.courseType=courseType;this.classHour=classHour;publicvoidsetCredit(fthis.credit=credit;/得到课程学分数System.out.println("TSystem.out.println(System.out.println("couSystem.out.printIn("courSystem.out.println("classHSystem.out.println("cSystem.out.println("-----------------------publicstaticvoidmain(Stringl)args){//System.out.println("----------------------cs.setCredit(4.0f);//修改课程学分,由3分改为4分2.完善例4.10中类Point的定义,增加几个基本方法,例如计算给定点到(0,0)的距离、给定两点间的距离、判断给定的三个点是否能构成一个等腰三角形等。解答:点的横纵坐标表示为(x,y),该点到原点的距离d表示为给定两个点的横纵坐标分别为(xj,yi)和(x₂,y₂),则两个点间的距离d表示为调用Math包中的函数sqrt,可以计算开平方。对于给定的三个点,根据坐标可以计算三个点之间的距离。三条边能构成三角形的条件是:任何两边之和大于第三边,或是任意两边之差小于第三边。等腰三角形的条件是,其中两条边的长度相等。程序实现如下:Point(doublex1,doubley1){publicvoidsetX(doublexl)result=Math.sqrt((tempx*tempx+tempy*tempy));doubletempx1,tempy1,tempx2,tempy2;result=Math.sqrt(tempx1-tempx2)*(tempx1-tempx2)+(tempy1-tempy2)*(tempb=p2.TwoPointDistance(if(((a+b>c)&&(b+c>a)&&(b==c||a==c))result=true;System.out.println("}}Point(Pointp){//获取横坐标//获取横坐标//构造方法1,两个默认端点MyLine(Pointpl,Pointp2)}doublex1,yl,x2,y2;//构造方法2,两个端点//构造方法3,从原点出发的线段publicbooleanIsOnLine(Pointp)if((p.getYO-y1)/(y2-yl)=(p.getX)-x1)(publicdoubledisPL(Point}publicstaticvoidmain(SSystem.out.println(booleanresult=line.Is4.设计并实现一个MyCircle类,它表示圆。圆心及半径是它的属性,定义一些基本方法,解答:圆的面积、周长的计算都非常简单。如果圆心之间的距离大于两个圆半径之和,则两个圆是相离的。否则就是相交的。本题中,用到了题2中的Point类和题3中的MyLine类。程序实现如下:}}}}}}}publicdoubleTwoPointDistance(Pointp){//求到另一点的距离}e2=newPoint(0.0,0.}//线段的两个端点//构造方法1,两个默认端点MyLine(Pointpl,PoinMyLine(Pointpl){//构造方法2,两个端点//构造方法3,从原点出发的线段publicbooleanIsOnLinif(p.getYO-y1)/(y2-y1)=(p.getX()-x1)/(dis=Math.abs(a*p.getX()+b*p.getYO+c)/Ma}}publicbooleanIsOverlap(MyCirclemc){dis=this.getCenter().TwoPointDif(dis<=this.getRadius()+mc.getRadius())returntrue;publicvoidLineAndCircle(MyLinePointp=newPoint(x,y);MyCirclemy2=newMyCircle(p,r);第五章数组和字符串等号左侧的方括号与数组名的位置是可以交换的,故4个选项中等号左侧的格式都是允许的。对于二维数组,等号右侧是两对方括号,选项A中只有一对方括号。2.下列选项中,能够实例化一个数组的是A.intarrayl={2,3,4,5,6,7};B.intarray2[]={2,3,4,5,6,7,C.int]array3=int[30];D.int选项A中,声明变量array1时没有使用方括号。选项C中没有关键字new。选项D中没有3.设字符串变量sl=newString(""),s2=newString(""),则以下表达式的值为真的是【】A.pareTolgnoreCase(s2)B.s1.equals(s2)C.pareTo(s2)值。compareTo方法返回的也是int值。另外,==判定两个对象是不是同一个。题目中所给的s1和s2是分别创建的两个对象,两者4.以下程序代码中,能正确创建数组的是=newint[5];。选项B存在语法错误。选项D中,左侧方括号中不能出现5。A.intd[4]={1,2,3,4};C.intc={1,2,3};参见第4题的解释。I中,声明了含5个字符串的数组,然后通过循环语句给各数组元素赋值空串。Ⅱ中直接给数组初始化了5个空串。Ⅲ中有语法错误,IV中创建的字符串数组中保存的是字符串null,二、填空题1.提供的用于处理可变字符串的字符串类是3.使用运算符==判定两个String类型的对象是否相等,此时判定的是。答案:两个对象在内存中的存储空间是否相等。或者说,两个对象是不是同一个对象。4.数组静态初始化是指答案:在数组声明的同时给数组元素赋初值。5.数组动态初始化时,必须使用分配空间。6.数组下标可以是。答案:整型常量或表达式。答案:026668。replace是将所有的3替换为6。三、简答题1.在中是如何完成数组边界检查的?解答:在中,数组下标从0开始,数组中的元素个数记录在变量length中,这是数组对象中唯一的数据成员变量。使用new创建数组时系统自动给length赋值。数组一旦创建完毕,其大小就固定下来。程序运行时可以使用length进行数组边界检查。如果发生越界访问2.请简述数组创建的过程。如何创建一个对象数组?解答:数组的创建分两个步骤,一是定义,二是初始化。定义一个数组只是对数组的声明,此时系统还没有为数组分配任何内存空间,因此还不能访问它的任何元素。必须经过数组初始化后,才能应用数组的元素。定义加初始化这个过程就是数组的创建过程。从数组的创建过程中可以看出,初始化是很关键的一步。数组的初始化分为静态初始化和动态初始化两种。所谓静态初始化就是在定义数组的同时对数组元素进行初始化,静态初始化可用于任何元素类型,初值块中每个位置的每个元素对应一个引用。定义数组并进行静态初始化的格式如下:将需要赋给数组元素的值列在大括号中,并以逗号分隔。与之相对应的,动态初始化是使用运算符new为数组分配空间,这和所有对象是一样的。数组说明中方括号内的数字表示数组元素个数。类型[]数组名=new类型[数组大小];如果前面已经对数组进行了声明,则此处的type可以不写。比如,已经声明了字符类型的这一行创建了有20个字符的数组。对于复合数据类型的数组,使用运算符new只是为数组本身分配空间,并没有对数组的元素进行初始化。所以对于复合数据类型的数组,需要经过两步进行空间分配。类型数组名[]=new类型[数组大小];若有Point类定义如下:}}}在声明Point[]points;后,语句points=newPoint[100];只创建了有100个Point型变量points[0]=newPointSystem.out.println("p[0].x="+points[0].xSystem.out.println("p[1].x="+points[1].x3.数组的内存分配是如何完成的?4.程序5.2的for语句中使用的两个常数(

温馨提示

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

评论

0/150

提交评论