Java面向对象编程习题总结
Java面向对象编程习题总结(精选9篇)
Java面向对象编程习题总结 第1篇
第一章:抽象和封装
1,为什么使用面向对象
1.1:万事万物皆对象,面向对象就是采用“现实模拟”的方法设计和开发程序。
2,使用面向对象进行设计
2.1:面向对象设计三部曲
1,发现类。
2,发现类的属性。
3,发现类的方法。
经验:在需求中找出名词的方式确定类和属性,找出动词的方式确定方法。
3,创建类的对象
1,通过构造方法来创建对象
2,通过对象名.属性名的方式调用属性。
3,通过对象名.方法名的方式调用方法。
4,Static可以用来修饰属性,方法和代码块。Static修饰的变
量属于这个类所有。即由这个类创建的所有对象共有同一个static变量。类属性,类方法可以通过类名和对象名访问,势力属性,实例方法只能通过对象名访问。
5,在方法里不可以定义static变量,类变量不能是局部变量。6,构造函数的重载
1,构造方法的名字和类名相同,没有返回值类型。构造
方法的作用主要就是在创建对象是执行一些初始化操作,赋值。
2,在没有给类提供任何构造方法时,系统会提供一个无
参的方法体为空的默认构造方法。一旦提供了自定义构造方法,系统将不会提供这个默认构造方法,如果要使用她,必须手动添加。
3,如果同一个类中包含了两个或两个以上方法,它们的方法名相同,方法参数个数或参数类型不同,则称该方法被重载。成员方法和构造方法都可以重载。
4,构造方法没有返回值类型。如果有,就不是构造方法,而是构造方法同名的成员方法。
5,封装
1,封装是类的三大特性之一,就是将类的状态信息隐
藏在内部。
2,封装的具体步骤:为每个属性创建一对一赋值,在赋值方法中,加入对属性的存取控制语句。
3,隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制语句,限制不合理操作。
Java面向对象编程习题总结 第2篇
面向过程,顾名思义,其中心意义在于“过程”二字,比如你要吃饭,那么首先是要选地,播种,施肥,成熟,收获,煮饭,然后才能吃饭,那么面向过程就是从开始到结束,分析出解决问题的需要的每一个步骤,然后用函数将这些步骤一个一个实现,使用的时候一个一个一次调用就行了。
面向对象,同样的,你去饭店吃饭的时候,只需要对服务员说一句你要吃饭就行了,你不需要关心饭是怎么来的,这就是面向对象。那么面向对象就是把组成问题事务分解成一个个对象,建立对象不是为了解决一个步骤,而是用来描述某个事务在解决问题步骤中的行为。面向对象是以功能来划分问题,而不是步骤。
以上的解释来源于书上,对于初学者而言,这样的描述过于抽象,不能很好的理解。下面我举个具体的例子来说明。
从书面上来说,可能面向过程更好理解,但是其实面向对象更符合人们的思考习惯。比如外面去商场买衣服,那么商场的功能就是提供衣服,你不需要关心衣服是怎么来的,你只需要向商场提出你要买衣服的要求就可以。就那贪吃蛇这个游戏而言,对于面向过程:1、吃一个;2、绘制画面;3判断是否死亡,就这样依次调用函数,一个一个步骤进行。
而对于面向对象,建立三个对象:1、蛇;2、画面系统;3、规则系统。首先进行操作,然后将操作后的结果提交至画面系统进行画面绘制,绘制之后的结果提交至规则系统判断是否死亡。这样一招功能来划分问题。
从上面的解释来看,面向对象和面向过程依然难以区分,但是如果我要返回上一步,那么对于面向过程而言,从初始状态到判断是否死亡到现实画面可能都需要改动。而对于面向对象则只需要重新设计画面系统,在里面保存上一步的坐标即可,这里不需要涉及到规则系统和其他操作。
面向对象的功能划分保证了面向对象的可扩展性。比如我需要为贪吃蛇重新改写一套规则,在面向过程中,规则已经渗透到整个程序的各个角落,改写不如重写。那么在面向对象中,则只需要重新设计规则系统即可。
Java面向对象编程习题总结 第3篇
在就业压力越来越大的今天,计算机软件专业的学生能够熟练地使用一门编程语言在就业中的优势是非常明显的。Java语言由Sun公司于1994年推出,然后其开源、丰富的类库、平台无关性等优点吸引了无数的编程爱好者,随着Java语言的不断发展和互联网应用的日益广泛,Java从2001年开始就一直是应用最广泛的编程语言,而且遥遥领先于第二名C语言。美国《信息周刊》刊文评出有史以来最伟大的12款软件,其中Java语言作为唯一入选的编程语言,被排在第五位。综上所述,计算机软件专业的大学生学习好《Java面向对象编程》课程是很有意义的,而实际上学生对于这门课程的掌握情况并不十分理想,这其中有教材选用、教授方式、实践安排等各方面的原因。下面我就这些原因的形成提出解决方案,希望对于本课程的教育教学和学生后来的就业有所帮助。
2. 问题解析
2.1 教材选用
在繁杂的Java编程教材中选取一个适合本科教学和实践的并不是一件容易的事情。有些教材侧重于理论,基本是知识点的罗列和简单验证,这种教材类似于中学时代的数理化课本,学生对此类教材并不喜欢,感觉与实践相去甚远,不能将教材上的知识点与自己未来的工作和实践应用联系起来,因此提不起学习兴趣;有些教材虽然实例很多,也比较注重实践,但是由于讲授内容过浅,学生学过之后感觉教材上的内容已经掌握,但是对于一个简单的应用需求仍然无从下手,从而使学生对自己能力产生疑问;有些教材技术没有及时更新,讲授的内容已经不再适用,从而导致教授过程不理想;还有些教材虽然没有上述的问题,但是提供的基于实践的练习却很少,练习少导致学生书上的例题都可以做出来,但是却不知道如何举一反三加以运用。
2.2 教授方式
本课程的教学效果很大程度上依赖于教师的教授方式和教授方法。区别于其他专业课程,这门课的实践意义要远大于理论意义,所以使用何种教学方式就显得尤为重要。经了解,目前大多数教师采用的教授方式有两种:第一种教授方式是验证式,即教师提出一个知识点,然后用一段程序加以验证该知识点,然后继续提出下一个知识点。这种方式给学生的感觉不是在教授一门实践课程,而是在验证一些理论知识,导致知识点与日后的应用严重脱节。第二种教授方式是总结式,其实就是第一种教授方式的倒序,即先写一段程序,然后总结该段程序中出现的知识点。这种方式要比第一种效果稍好,但是一部分接受能力稍差的学生在这种方式下会感到特别吃力,因为一个知识点还没有被提出,它就要先被应用到一段程序中,有些不知所以。
2.3 实践安排
对于编程类的课程,如何安排实践是重中之重。大部分教材上的习题都过于侧重知识点的考核,而不是如何将知识点加以运用,除了选取合适的教材之外,教师还可以自行安排一些旨在提高学生积极性和动手能力的编程练习,而不是严格地按照教材上的练习安排实践或者随意找些类似考级之类的题目来让学生做。
2.4 其他问题
除了上述三个问题之外,还有一些因素会称为本门课程教学的关键点,比如多媒体教学的使用,IDE工具的选择,知识的及时更新,安排模拟课程设计,等等。
3. 解决方案
针对第2部分提出的本课程教学过程中存在的种种问题,我经过实践和研究,总结出以下解决方案以供参考。
3.1 选用编程从业人员中认知度较高的半工具书
弃用目前广泛使用的本科教材,而改用编程从业人员中认知度较高的半工具书。目前的本科教材存在着严重的问题,比如大部分是知识点罗列,选用例题无新意,练习没有针对性,知识结构老化,等等。另外,由于很多本科教材的编者自身并没有在企业中有过实践经验,因此对一些行业规则和公共规范了解不多,导致采用了很多与行业规则和规范相悖的习惯误导学生。而从业人员中认知度较高的半教程半工具书则不然,直接针对实践,知识点更新速度更快,采用了规范的编程习惯,例题紧贴实践,这些原因使得这一类工具书能够很好地起到教学和实践相结合的作用,我经研究和使用,效果很好。
3.2 采用探索式教授方法
由于目前广泛采用的验证式和总结式教学方法都有其缺陷,因此我提出探索式教授方法。具体方法是,先提出一个现实生活中可能遇到的问题,然后思考现实生活中的解决途径,将此途径用代码模拟实现,经过精心安排,在上述代码中埋下下一个问题的伏笔,然后提出下一个问题,如此反复。探索式教学方法建立在实践问题的基础上,先探索在实践中的解决方案,然后将该方案付诸于代码实现模拟,再总结该代码中出现的新的知识点和涉及的下一个问题,一节课结束之前在讨论该节课涉及的知识点在其他方面的应用。
3.3 合理安排实践和习题
针对实践环节中存在的问题,我提出如下方案。首先,将验证式教学中的教师角色应用到学生身上,在探索式教学的基础上,让学生自行编写例题验证所有的知识点,并将程序保存为自己的类库供以后参考学习。其次,针对知识结构适时安排恰当的练习,比如可以一些经常见到的小应用软件、小游戏,作为实践内容,既生动有趣,又可以锻炼学生解决问题的能力,提高学生的编程技巧。我在实践中就曾经将五子棋、扫雷游戏、货存管理系统、梭哈游戏等作为学生设计实践的练习,效果很好。
3.4 其他
备课尤为重要,教师要不断地更新自己的知识结构,掌握最前沿的技术动向。另外,在IDE工具的选择上,我建议在学习初期最好使用纯文本的编辑工具,以让学生最大限度地了解Java语言的内涵和使用规则,熟悉各个关键字的拼写和使用。而在提高阶段为了提高效率可以适当使用IDE工具,并适当传授一些工具使用的技巧。
4. 结语
对于计算机软件专业的学生而言,《Java面向对象编程》课程的重要性不言而喻,教师应该在教材选择、教授方式、实践安排等各个环节求新求变,争取找到效果最好,最适合自己和学生的教学安排,在提高学生自身能力的同时,为国家的就业问题作出自己的贡献。
摘要:本文针对计算机软件专业学生在《Java面向对象编程》课程中遇到的问题, 提出了编程课程教学的新模式, 以期可以让学生更好地掌握编程技巧, 在教学中将实践能力的提高最大化, 从而最终缓解计算机软件专业毕业生的就业压力。
关键词:《Java面向对象编程》,教学方法,教材改革,实验教学
参考文献
[1]Kathy Sierra, Bert Bates.Head First Java.中国电力出版社, 2007.
[2]李相国等.Java实例精通.机械工业出版社, 2009.
浅谈面向对象编程思想 第4篇
关键词:面向对象;继承;封装;多态
中图分类号:TP311.56文献标识码:A文章编号:1007-9599 (2011) 07-0000-01
Thought of Object-oriented Programming
Liu Jian,Sun Zheng,Hu Guoyu
(Nanjing University of Posts and Telecommunications,Nanjing210046,China)
Abstract:The class is an abstract thing with the same attribute,the object is a specific class of things,it has real property values.Object-oriented principle is the starting point and basic human habits as analog way of thinking,so it is easy to understand,logically,be accepted and recognized by the majority of IT practitioners.
Keywords:Object-oriented;Inheritance;Package;Polymorphism
说到面向对象就不得不提到面向过程。它出现在面向对象之前,是一种以过程为中心的编程思想。就是分析出解决问题所需要的步骤,然后采用分支循环用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。首先必须承认面向过程可以解决所有的编程问题,但是也存在着重用性差、可维护性差、开发过程复杂等缺点。面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是软件开发方法的主流。下文这种对面向对象的编程模式进行探讨。
一、首先介绍面向对象的基本概念
(一)对象。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(二)对象的状态和行为。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
(三)类。具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(四)消息和方法。对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。
二、其次看看面向对象的特点
(一)封装。封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
(二)继承。面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。继承概念的实现方式有三类:实现继承、接口继承和可视继承。
(三)多态。多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
现在看看如何用面向对象的方法来解决这个问题。
建立学生实体类StudentTo其中包括如下属性
//姓名、年龄、性别、身高、学号
private String name;
private int age;
private String sex;
private String height;
private String studentID;
并提供get、set方法,有参、无参构造
在录入方法中实例化学生类对象为student,将姓名、年龄、性别、身高、学号等的属性值赋值给student,并将student传递给老师
StudentTo student=new StudentTo();
student.setName("李辉");
student.setAge(18);
student.setHeight("1.8m");
student.setSex("男");
student.setStudentID("NO.009");
老师接到传递过来的student后将学号改正后提交政教处保存
public void check(StudentTo student){
student.setStudentID("NO.010");}
政教处对学生接受到正确的学生对象后,可以从学生对象中取出姓名、年龄、性别、身高和学号备份留档。这样完整的面向对象解决问题的过程就结束了,从整个流程可以看到我们操作的一直是个实例化的对象,符合逻辑思维,减少了传递的参数,减小了出错的可能性,提升了编程的效率。
综上可以看出,面向对象操作符合人们思维习惯,它对类归纳总结,将类的成员放入对象中,大大减少了参数的传递和出错的可能。面向对象的继承、封装、多态特性也符合思维逻辑,在编程理解方面优势明显。随着时间的推移,近年来人们提出了更为先进的面向服务的概念,但是即使是面向服务也有大量面向对象的思想和影子。可以说面向对象思想直接影响了MVC编程模式,影响了人们的编程逻辑,对计算机语言的贡献无可替代。
参考文献:
[1]马光毅.面向对象方法研究[J].华南师范大学学报
java面向对象的学习心得 第5篇
大三的时候学校组织我们去苏州NIIT参加四个月的java实训,我开始系统的学习期java,之前大学的时候学的比较宽泛,没有专门的正对java的学习。
首先我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭,因为我早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,特别忍受不了Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强。
我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,不知道怎么下手,一不小心,又会回到原来的思路上去。
举个例子,要发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。
然后考虑用Java来实现,既然是OOP,就不能什么代码都塞到main过程里面,于是就设计了三个类:
一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送; 一个类是读邮件内容,MIME编码成HTML格式的,再加上邮件头;
一个主类负责从命令读参数,处理命令行参数,调用发email的类。
把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。
仔细的分析一下,就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或者说,设计类的时候,是自低向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。
这样的分析方法其实是不适用于Java这样面向对象的编程语言,因为,如果改用C语言,封装两个C函数,都会比Java实现起来轻松的多,逻辑上也清楚的多。
我觉得面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。
举一个非常简单的例子:假使现在需要写一个网页计数器,客户访问一次页面,网页计数器加1,计数器是这样来访问的后台有一个数据库表,保存每个id(一个id对应一个被统计访问次数的页面)的计数器当前值,请求页面一次,对应id的计数器的字段加1(这里我们忽略并发更新数据库
表,出现的表锁定的问题)。
如果按照一般从程序实现的角度来分析,我们会这样考虑:首先是从HTTP GET请求取到id,然后按照id查数据库表,获得某id对应的访问计数值,然后加1,更新数据库,最后向页面显示访问计数。
现在假设一个没有程序设计经验的人,他会怎样来思考这个问题的呢?他会提出什么样的需求呢?他很可能会这样想:
我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加1,另外最好还有一个计数器清0的功能,当然计数器如果有一个可以设为任意值的功能的话,我就可以作弊了。
做为一个没有程序设计经验的人来说,他完全不会想到对数据库应该如何操作,对于HTTP变量该如何传递,他考虑问题的角度就是我有什么需求,我的业务逻辑是什么,软件应该有什么功能。
按照这样的思路(请注意,他的思路其实就是我们平时在生活中习惯的思维方式),我们知道需要有一个计数器类 Counter,有一个必须的和两个可选的方法:
getCount()// 取计数器值方法
resetCounter()// 计数器清0方法
setCount()// 设计数器为相应的值方法
把Counter类完整的定义如下:
public class Counter {
public int getCount(int id){}
public void resetCounter(int id){}
public void setCount(int id, int currentCount){}
}
解决问题的框架已经有了,来看一下如何使用Counter。在count.cgi里面调用Counter来计数,程序片断如下:
// 这里从HTTP环境里面取id值
...Counter myCounter = new Counter();// 获得计数器
int currentCount = myCounter.getCount(id);// 从计数器中取计数
// 这里向客户浏览器输出
...程序的框架全都写好了,剩下的就是实现Counter类方法里面具体的代码了,此时才去考虑具体的程序语言实现的细节,比如,在getCount()方法里面访问数据库,更新计数
值。
从上面的例子中看到,面向对象的思维方法其实就是我们在现实生活中习惯的思维方式,是从人类考虑问题的角度出发,把人类解决问题的思维方式逐步翻译成程序能够理解的思维方式的过程,在这个翻译的过程中,软件也就逐步被设计好了。
在运用面向对象的思维方法进行软件设计的过程中,最容易犯的错误就是开始分析的时候,就想到了程序代码实现的细节,因此封装的类完全是基于程序实现逻辑,而不是基于解决问题的业务逻辑。
学习JDBC编程的经典错误问法是:“我怎样封装对数据库的select操作?”
面向对象的设计是基于解决业务问题的设计,而不是基于具体编程技术的设计。我不会去封装select语句的,我只封装解决问题的业务逻辑,对数据库的读取是在业务逻辑的编码实现阶段才去考虑的问题。
回过头看上面那个发广告邮件的例子,应该如何应用面向对象的思维方法呢?
对于一个邮件来说,有邮件头,邮件体,和邮件地址这三个属性,发送邮件,需要一个发送的方法,另外还需要一个能把所有邮件地址列出来的方法。所以应该如下设计:
类JunkMail
属性:
head
body
address
方法:
sendMail()// 发送邮件
listAllMail()// 列邮件地址
用Java来表示:
public class JunkMail {
private String head;
private String body;
private String address;
public JunkMain(){ // 默认的类构造器
// 从外部配置文件读邮件头和邮件体
this.head=...;
this.body=...;
}
public static boolean sendMail(String address){
// 调用qmail,发送email
}
public static Collection listAllMail(){
// 访问数据库,返回一个邮件地址集合}
}
当把JunkMail设计好了以后,再调用JunkMail类完成邮件的发送,将是非常轻松的事情。
如果说传统的面向过程的编程是符合机器运行指令的流程的话,那么面向对象的思维方法就是符合现实生活中人类解决问题的思维过程。
在面向对象的软件分析和设计的时候,要提醒自己,不要一上来就去想程序代码的实现,应该抛开具体编程语言的束缚,集中精力分析我们要实现的软件的业务逻辑,分析软件的业务流程,思考应该如何去描述和实现软件的业务。毕竟软件只是一个载体,业务才是我们真正要实现的目标。
但是在设计过程中,心里却往往在担心,如果我完全不去考虑程序代码的实现的话,那么我怎么知道我的设计一定合理呢?我怎么知道我设计的类、接口一定可以实现呢?所以经常可以看到的现象就是:
在设计过程中,虽然知道不能过早考虑代码实现,但是每设计一个类,一个接口,心里都要不知不觉的用自己熟悉的编程语言大概的评估一下,看看能否编出来,因此,一不小心,就会又回到按照程序功能实现的思路进行设计的老路上去了。
举个例子来说明,在做Web程序设计的时候,经常要遇到分页显示数据的情况。比如说需要把系统中所有的用户都列出来这样的功能。假设使用User类来表示用户,增加用户addUser(),删除用户deleteUser(),查询所有用户listUsers()方法。而数据库中有一个user表,一条记录是一个用户的信息。下面考虑一下User类的方法的实现:
addUser()和deleteUser()方法都好实现,就是对数据库增加记录和删除记录。对于listUsers()方法,其实就是对user表的select,取出一个记录集。但是该怎么从listUsers()方法中得到所有用户的列表呢?
一个方法调用的返回值只有一个,没有多个,所以很多情况下采用的办法就是返回值定义为集合类型,比如Vector。这样就可以在listUsers()方法的具体代码实现的时候,从数据库依次取出一个个记录,插入到Vector里面来。在主程序里面,调用listUsers()方法可以返回一个Vector,然后再对Vector遍历操作,就可以得到用户列表了。
public class User {
public static void addUser(...){
// 数据库insert一条记录
}
public static void deleteUser(...){
// 数据库delete一条记录
}
public Vector listUsers(...){
// 数据库select结果放到一个集合里面
}
}
这样的设计基本合理,但是仍然有点小问题。因为在设计的时候,就考虑到了用Java的集合类Vector来实现对不定长数据集的存放,因而违反了面向对象设计的一个原则:在设计的时候不应过早的考虑具体程序语言的实现。所以必须用抽象的方法,和具体实现无关的方法来表达业务逻辑。
我们知道,通常对具有集合特征的数据结构进行遍历通常可以使用next和hasNext方法,next实现取下一个用户,hasNext判断是否还有元素。因此我们定义一个接口Iterator,这个接口中定义两个方法next和hasNext:
public interface Iterator {
public boolean hasNext(){}
public Object next(){}
}
而User类的listUses方法返回值改为Iterator接口的实现类:
public class User {
...public Iterator listUsers(){
}
...}
这样就把User类的设计和具体的实现方法分离开了,因为此时任何实现了next()和hasNext()方法的类都可以做为listUsers的返回值,都可以被用来表达“用户列表”,而不仅仅可以使用Vector而已。比如,我可以用ArrayList来表达用户列表,因为ArrayList也实现了Iterator,当然我也可以自己专门写一个类来存放用户列表,只要实现next()和hasNext()方法就行了。
这样在具体的编写代码的时候,程序员具有了最大的灵活性,可以根据具体的情况,采用不同的编程方法来存放用户列表。特别是降低了程序的耦合度,提高了程序的可移植性。对于上面那个JunkMail的listAllMail()方法也同样应该改为接口类型。
然后,在主程序里面就这样来使用User类的listUsers方法:
User myUser = new User();
Iterator iterator = myUser.listUsers();
while(iterator.hasNext()){
iterator.next();
}
这样就可以完全不用考虑程序代码实现了,从高层次上把功能抽象出来,定义成为接口,同时又可以把系统设计的很合理,完全根据业务的需求来进行设计。
结语
通过上面的几个例子的设计说明,使用面向对象的思维方法,其实是一个把业务逻辑从具体的编程技术当中抽象出来的过程,而这个抽象的过程是自上而下的,非常符合人类的思维习惯,也就是先不考虑问题解决的细节,把问题的最主要的方面抽象成为一个简单的框架,集中精力思考如何解决主要矛盾,然后在解决问题的过程中,再把问题的细节分割成一个一个小问题,再专门去解决细节问题。
因而一旦牢牢的抓住了这一点,你就会发现在软件设计和开发过程中,你自己总是会不知不觉的运用面向对象的思维方法来设计和编写程序,并且程序的设计和开发也变得不再那么枯燥,而一个合理运用面向对象技术进行设计和架构的软件,更是具备了思维的艺术美感。
java面向对象程序设计教案 第6篇
主讲教师:熊春秀 编写时间:2011-4-30
第一章:概述
第 1、2 节:面向对象的基本概念、面向对象程序设计概述 授课时间:2011-2-
22、23
计划学时数:1 教学任务与目的:让学生理解面向对象的基本概念 教学重点:掌握面向对象的基本概念 教学难点:理解面向对象程序设计的方法 教学方法:多媒体+板书 参考书目:《面向对象程序设计导论》,[美]C.Thomas wu著,电子工业出版社 专业词汇:Java虚拟机、Applet程序 备注
第二章:Java特点及运行环境
第 1、2、3 节:Java语言特点、Java应用程序及运行环境、Java Applet程序及运行环境 授课时间:2011-2-
22、23
计划学时数:3 教学任务与目的:让学生学会JDK的下载、安装与环境配置。教学重点:掌握编译和执行Java程序的基本步骤
教学难点:理解Java程序的入口并能够通过命令行传递参数 教学方法:多媒体+板书 参考书目:《面向对象程序设计导论》,[美]C.Thomas wu著,电子工业出版社 专业词汇:JDK、lib、bin 备注 第三章:Java语言基础
第 1、2 节:Java程序的构成、数据类型、表达式以及流程控制语句 授课时间:2011-3-
1、2
计划学时数:3 教学任务与目的:让学生学会Java基本的数据类型和表示方法、数值类型的运算、逻辑运算和比较、条件执行语句(包括三种条件语句和switch语句)、循环控制语句(包括for、while、do while循环及相应的辅助语句)、字符串类String和BufferString以及数组的声明及使用。
教学重点:掌握Java基本的数据类型和表示方法
教学难点:理解Java程序的循环控制语句(包括for、while、do while循环及相应的辅助语句)
教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社 专业词汇:变量、数据类型、循环控制语句 备注 第三章:Java语言基础 第 3 节:Java与C比较
授课时间:2011-3-
8、9
计划学时数:3 教学任务与目的:让学生在C语言的基本上进一步学习Java语言。教学重点:掌握Java语言与C语言的区别与联系。教学难点:理解Java语言在C语言上的改进。教学方法:多媒体+板书 参考书目:《Java2参考大全(第四版)》,[美]Herbert Schildt著,张玉清、吴浦峰、尚勇等译,清华大学出版社。专业词汇:Java、C 备注 第四章:抽象、封装与类
第 1 节:抽象、封装与Java类的概念
授课时间:2011-3-
15、16
计划学时数:3 教学任务与目的:让学生学会面向对象的基本特征、掌握如何定义一个类以及如何生成对象、深入掌握方法的定义及技巧、深入掌握类的访问权限与封装机制、深入掌握包的定义与包的使用方法。
教学重点:掌握类的定义与对象的生成。教学难点:理解类的抽象与封装机制。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:抽象、封装、类 备注 第四章:抽象、封装与类 第 2 节:系统定义的类
授课时间:2011-3-
22、23
计划学时数:3 教学任务与目的:让学生学会使用系统定义的类,并掌握与用户自定义类的区别。教学重点:掌握如何定义所需要的类。
教学难点:熟悉Java平台定义了哪些经常要用到、而且满足我们需要的类。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:系统定义的类、用户自定义类 备注 第四章:抽象、封装与类
第 3 节:类、域和方法的修饰符
授课时间:2011-3-
29、30
计划学时数:3 教学任务与目的:让学生学会类的声明。
教学重点:掌握如何定义类的修饰和方法的修饰符。教学难点:熟悉类的变量的定义与使用方法。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:成员变量、类变量、成员方法、类方法 备注 第五章:继承与多态
第 1、2 节:Java的继承与派生、域的继承与隐藏 授课时间:2011-4-
5、6
计划学时数:3 教学任务与目的:让学生全面掌握面向对象的基本特征、掌握如何使用继承性来到达软件的重用、深入掌握继承过程中域的隐藏和方法的覆盖技巧。教学重点:掌握如何使用继承性来到达软件的重用。教学难点:熟悉继承过程中域的隐藏和方法的覆盖技巧。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:继承派生、域、隐藏 备注 第五章:继承与多态
第 3、4 节:方法的继承、重载与覆盖、this与super、构造函数的继承与重载 授课时间:2011-4-
12、13
计划学时数:3 教学任务与目的:让学生通过继承可以更有效地组织程序结构,明确类之间的关系,并充分利用已有的类来创建新类,通过继承可以实现代码的重用,以完成更复杂的设计、开发。教学重点:掌握类的重载与覆盖的区别与联系。教学难点:熟悉类的重载与覆盖使用方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:继承、重载、覆盖、this、super 备注 第五章:继承与多态
第 5、6 节:多态性的实现、接口声明与实现 授课时间:2011-4-
19、20
计划学时数:3 教学任务与目的:让学生深入掌握抽象类和抽象方法的定义,掌握多态通过统一多个相关类的对外接口,在运行时根据不同的情况执行不同的操作,提高类的抽象度和灵活性,深入掌握接口的定义和使用技巧。
教学重点:熟悉多态性实现的两种方式以及接口的实现。教学难点:熟悉多态性与接口的实现方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:多态性、接口 备注 第六章:工具类与算法
第 1、2 节:语言基础类库、Applet类与小程序的基本原理 授课时间:2011-4-
26、27
计划学时数:3 教学任务与目的:深入了解Applet生命周期的主要方法和特点、熟练掌握Applet程序的编写方法、深入了解Applet的安全机制及其合理运用。教学重点:熟练掌握Applet程序的编写方法。
教学难点:深入了解Applet的安全机制及其合理运用。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:Applet、生命周期 备注 第六章:工具类与算法
第 3、4 节:数组、字符串、常用算法
授课时间:2011-5-
3、4
计划学时数:3 教学任务与目的:让学生学会字符串类String和BufferString、数组的声明及使用。教学重点:熟练掌握字符串与数组的使用方法。教学难点:深入了解数组的使用方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:数组、字符串 备注 第七章:用户图形界面的设计
第 1、2 节:用户自定义成分、事件驱动设计 授课时间:2011-5-
10、11
计划学时数:3 教学任务与目的:让学生学会使用面向对象的程序设计方法构建图形用户界面、深入了解抽象窗口工具包(AWT)、掌握事件处理基本原理和方法。教学重点:熟练掌握图形用户界面的开发方法。教学难点:深入了解图形界面的各种事件。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:AWT、GUI 备注 第七章:用户图形界面的设计
第 3、4 节:GUI对象,包括:按钮、文本框、鼠标、键盘等事件的处理、布局设计 授课时间:2011-5-
17、18
计划学时数:3 教学任务与目的:让学生深入了解GUI构件及掌握布局控制方法、熟练掌握菜单和对话框、掌握简单绘图方法。
教学重点:熟练使用Java语言提供的布局管理器来管理组件在容器中的布局。教学难点:深入了解组件在程序中安排中位置和大小使用方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:布局管理器、容器 备注 第八章:Java高级编程
第 1、2、3节:异常处理、多线程机制、Java程序对网上资源的访问 授课时间:2011-5-
24、25
Java面向对象编程习题总结 第7篇
Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码:
代码如下:
Account = {balance = 0}
function Account.withdraw(v)
Account.balance = Account.balance - v
end
--下面是测试调用函数
Account.withdraw(100.00)
在上面的withdraw函数内部依赖了全局变量Account,一旦该变量发生改变,将会导致withdraw不再能正常的工作,如:
代码如下:
a = Account; Account = nil
a.withdraw(100.00)--将会导致访问空nil的错误,
这种行为明显的违反了面向对象封装性和实例独立性。要解决这一问题,我们需要给withdraw函数在添加一个参数self,他等价于Java/C++中的this,见如下修改:
代码如下:
function Account.withdraw(self,v)
self.balance = self.balance - v
end
--下面是基于修改后代码的调用:
a1 = Account; Account = nil
a1.withdraw(a1,100.00)--正常工作。
针对上述问题,Lua提供了一种更为便利的语法,即将点(.)替换为冒号(:),这样可以在定义和调用时均隐藏self参数,如:
代码如下:
function Account:withdraw(v)
self.balance = self.balance - v
end
--调用代码可改为:
a:withdraw(100.00)
1. 类:
Lua在语言上并没有提供面向对象的支持,因此想实现该功能,我们只能通过table来模拟,见如下代码及关键性注释:
代码如下:
--[[
在这段代码中,我们可以将Account视为class的声明,如Java中的:
public class Account
{
public float balance = 0;
public Account(Account o);
public void deposite(float f);
}
--]]
--这里balance是一个公有的成员变量。
Account = {balance = 0}
--new可以视为构造函数
function Account:new(o)
o = o or {} --如果参数中没有提供table,则创建一个空的。
--将新对象实例的metatable指向Account表(类),这样就可以将其视为模板了。
setmetatable(o,self)
--在将Account的__index字段指向自己,以便新对象在访问Account的函数和字段时,可被直接重定向。
self.__index = self
--最后返回构造后的对象实例
return o
end
--deposite被视为Account类的公有成员函数
function Account:deposit(v)
--这里的self表示对象实例本身
self.balance = self.balance + v
end
--下面的代码创建两个Account的对象实例
--通过Account的new方法构造基于该类的示例对象。
a = Account:new
--[[
这里需要具体解释一下,此时由于table a中并没有deposite字段,因此需要重定向到Account,
同时调用Account的deposite方法。在Account.deposite方法中,由于self(a对象)并没有balance
字段,因此在执行self.balance + v时,也需要重定向访问Account中的balance字段,其缺省值为0。
在得到计算结果后,再将该结果直接赋值给a.balance。此后a对象就拥有了自己的balance字段和值。
下次再调用该方法,balance字段的值将完全来自于a对象,而无需在重定向到Account了。
--]]
a:deposit(100.00)
print(a.balance) --输出100
b = Account:new()
b:deposit(200.00)
print(b.balance) --输出200
2. 继承:
继承也是面向对象中一个非常重要的概念,在Lua中我们仍然可以像模拟类那样来进一步实现面向对象中的继承机制,见如下代码及关键性注释:
代码如下:
--需要说明的是,这段代码仅提供和继承相关的注释,和类相关的注释在上面的代码中已经给出。
Account = {balance = 0}
function Account:new(o)
o = o or {}
setmetatable(o,self)
self.__index = self
return o
end
function Account:deposit(v)
self.balance = self.balance + v
end
function Account:withdraw(v)
if v >self.balance then
error(“Insufficient funds”)
end
self.balance = self.balance - v
end
--下面将派生出一个Account的子类,以使客户可以实现透支的功能,
SpecialAccount = Account:new()--此时SpecialAccount仍然为Account的一个对象实例
--派生类SpecialAccount扩展出的方法。
--下面这些SpecialAccount中的方法代码(getLimit/withdraw),一定要位于SpecialAccount被Account构造之后。
function SpecialAccount:getLimit()
--此时的self将为对象实例。
return self.limit or 0
end
--SpecialAccount将为Account的子类,下面的方法withdraw可以视为SpecialAccount
--重写的Account中的withdraw方法,以实现自定义的功能。
function SpecialAccount:withdraw(v)
--此时的self将为对象实例。
if v - self.balance >= self:getLimit() then
error(“Insufficient funds”)
end
self.balance = self.balance - v
end
--在执行下面的new方法时,table s的元表已经是SpecialAccount了,而不再是Account。
s = SpecialAccount:new{limit = 1000.00}
--在调用下面的deposit方法时,由于table s和SpecialAccount均未提供该方法,因此访问的仍然是
--Account的deposit方法。
s:deposit(100)
--此时的withdraw方法将不再是Account中的withdraw方法,而是SpecialAccount中的该方法。
--这是因为Lua先在SpecialAccount(即s的元表)中找到了该方法。
s:withdraw(200.00)
print(s.balance) --输出-100
3. 私密性:
私密性对于面向对象语言来说是不可或缺的,否则将直接破坏对象的封装性。Lua作为一种面向过程的脚本语言,更是没有提供这样的功能,然而和模拟支持类与继承一样,我们仍然可以在Lua中通过特殊的编程技巧来实现它,这里我们应用的是Lua中的闭包函数。该实现方式和前面两个示例中基于元表的方式有着很大的区别,见如下代码示例和关键性注释:
代码如下:
--这里我们需要一个闭包函数作为类的创建工厂
function newAccount(initialBalance)
--这里的self仅仅是一个普通的局部变量,其含义完全不同于前面示例中的self。
--这里之所以使用self作为局部变量名,也是为了方便今后的移植。比如,以后
--如果改为上面的实现方式,这里应用了self就可以降低修改的工作量了。
local self = {balance = initialBalance} --这里我们可以将self视为私有成员变量
local withdraw = function(v) self.balance = self.balance - v end
local deposit = function(v) self.balance = self.balance + v end
local getBalance = function() return self.balance end
--返回对象中包含的字段仅仅为公有方法。事实上,我们通过该种方式,不仅可以实现
--成员变量的私有性,也可以实现方法的私有性,如:
--local privateFunction = function() --do something end
--只要我们不在输出对象中包含该方法的字段即可。
return {withdraw = withdraw, deposit = deposit, getBalance = getBalance}
end
--和前面两个示例不同的是,在调用对象方法时,不再需要self变量,因此我们可以直接使用点(.),
--而不再需要使用冒号(:)操作符了。
accl = newAccount(100.00)
--在函数newAccount返回之后,该函数内的“非局部变量”表self就不再能被外部访问了,只能通过
--该函数返回的对象的方法来操作它们。
accl.withdraw(40.00)
print(acc1.getBalance())
Java面向对象编程习题总结 第8篇
关键词:Java语言,学习方法,编程思想
Sun公司在1995年开发出Java语言。它是一种能跨平台的纯面向对象的编程语言。Java名字的由来据说是Sun公司的研发人员在印尼爪哇岛度假喝咖啡时产生的灵感。如今,Java语言同Visual C++语言一样是很多高校计算机专业学生必学的一门编程语言。经过多年的教学实践,笔者认为正如当年的BASIC语言引领众多人学习计算机软件开发那样,Java语言也能让现在的大学生尽快掌握面向对象编程的思想,从而深入学习其它面向对象编程的语言。
1 Java语言相对比较容易学习和使用
相比与另一门面向对象编程的语言VC++,Java语言是比较容易学习和使用的。这也能解释为什么Java语言将成为一门流行的编程语言。
1) 语法简单、功能强大及易于调试
Java语言的优势是其取消了VC++中一些比较难学、难理解的内容[1,2]。比如,在Java语言中没有指针和结构体的概念;程序员不用自己手动释放内存空间,这也就避免了因为内存冲突导致程序崩溃的现象。还有就是程序员利用Java的纯面向对象特性及其提供的丰富的类库,可以像搭积木那样编写出功能强大的程序。
2) 易学易用的API文档[3]
正如微软公司提供的MSDN一样,Sun公司也提供了详细的API文档,且这些文档的结构清晰、简单。由于MSDN包括了许多编程的原则和方法,许多VC++的初学者认为它很难学习和使用。相反,许多的Java初学者发现API文档相当简单、方便使用。并且,利用API文档很容易理解类库里面类与类之间的关系。
3) 程序框架由程序员自己建立
为了节省开发时间,VC++利用应用程序向导帮助程序员建立程序框架。然而,正是由于这些应用程序向导使得初学者不能很好地掌握程序的框架,并增加调试程序的难度。这将成为他们学习VC++的一个重大障碍,并影响他们对VC++的学习兴趣。相反,Java语言的框架是由程序员自己创建的,这看似有些难,但这能让初学者完全掌握程序的整体结构。
另外,虽然类向导能加快程序的开发进度,对于初学这来说,一行接一行地输入某个类代码比用类向导创建代码更容易理解和接受。
2 Java语言的学习方法
对于很多初学者来说,Java语言有着天然易学的优势,但这仅是一个基本条件。为了让学生利用Java语言更好地学习面向对象编程的思想,笔者总结出以下方法。
1) 有个良好的学习开端
很多初学者仅仅知道Java语言是Sun公司开发的编程语言,并不知道其它的相关技术,更谈不上Java语言未来的发展趋势。教师在一开始就应该向学生介绍Java语言在各个领域的应用极其将来的发展方向。比如,J2EE和J2ME当前的应用领域和今后的发展趋势。这样能激励学生学习Java语言的热情和兴趣。
2) 选择开发工具
对于初学这来说,使用纯文本编辑器输入Java源程序,并在命令行方式下编译和运行,能让他们掌握相关的环境变量及程序运行的相关步骤。相反,如果一开始就让初学者使用JBuilder或Elipse之类的集成开发环境,会让他们在开发工具的使用上花费太多的精力,从而分散他们学习Java语言的注意力,甚至,他们根本就不知道Java程序本来的运行步骤。另外,Visual J++更不值得初学者使用,因为它会影响学生理解面向对象编程的概念。
3) 初步了解GUI编程
很多初学者在一开始就想知道GUI界面是怎么来的。这对于VC++来说很容易实现,但初学者并不知道它的实现原理。教师可以在一开始时介绍几个简单的GUI界面程序和普通的GUI编程方法,这样能消除学生对Java语言的陌生感及增强学好Java语言的信心。
4) 重点讲解面向对象编程的思想
Java是一门纯面向对象编程语言。在一学完Java语言的基本语法后,教师就应该通过一些简单的例程重点介绍面向对象编程的方法和思想。另外,因为面向对象的编程思想与现实生活中的很多现象相似,所以可以采样类比的方法讲解相关的概念。比如,继承的概念可以与人类社会的继承类比,蛋糕和模具可以类比于对象和类。同时,要让学生懂得理解面向对象编程思想是学好Java语言的基础。
5) 教会学生如何使用API文档
对于初学这来说,API文档就象学习外语时使用的词典。所以,教师要花一定的时间教会学生如何去下载和参考API文档。当学生学会了如何去使用API文档后,他们会通过API文档里面的类的关系理解面向对象编程的相关内容。这将为他们扫除阅读Java程序时遇到的障碍。同时,为他们进一步学习Java语言打下扎实的基础。作为教师,我们可以在程序里面使用java.lang包里面的Math类提供的常量“π”来计算圆的面积和周长。以此为例,让学生感受API的使用方法。
为了满足初学者编写自己具有自己特点的GUI程序,教师可以引导学生如何结合API提供的类设计自己的界面。比如,可以启发学生如何用自己喜欢的图标代替Java的标志(一杯冒热气的咖啡)。以此激发学生学习Java的热情和兴趣。
3 教学过程中需注意的几个问题
经过多年的教学实践,笔者认为在讲授Java语言的过程中需要注意以下几个问题:
1) 在讲解语法时最好通过程序让学生理解语法的内容,而不应该是机械地记忆语法。比如以下的程序
这个程序看似很简单,但是Java的编译器javac却提示“非法使用unicode编码”。从这个例子我们可以看出,Java语言对语法的要求非常严格。再比如一个使用String类的例子
这个例子强调的是“==”与方法“equals()”的区别。通过这两个例程,学生会很容易理解相关的语法内容。2) 当学生上机操作时,教师可以通过学生遇到的问题追溯到相关的语法知识点,以帮助他们更深刻地理解相关的内容。比如,以下是一个关于“this”关键词使用的例程。
学生可能会被程序的执行结果搞糊涂。教师可以帮学生找到教材上相关的知识点,以让学生深刻理解“this”关键词的用法。3、教师可以通过某些措施激励学生阅读一些优秀的Java程序,以让他们理解写程序就像写作文那样,要多读多写。
4 总结
增强学生面向对象编程思想是计算机软件教学过程中的一项基础工作。如果在教学过程中能恰到好处地利用Java语言,这个问题将会得到很好的解决。这也能帮助学生顺利地完成今后相关的学习任务。
参考文献
[1]Harvey M.deitel and Paul J.Deitel,Java How to program,3E[M].Prentice-Hall,N.J.,1999.
[2]Bruce Eckel,Thinking in Java[M].4th ed.Prentice Hall,N.J.,2007.
JAVA编程习题1 第9篇
JAVA编程习题1
4.test10097求两个数的和
/*输入n表示做n次下面的操作: 输入两个正整数,输出它们的和.例: 输入:
//表示n=2,做两次操作 10 11 20 30 输出: sum=21 sum=50 */
5.test20001求两个数的和与差
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
/*程序填空,不要改变与输入输出有关的语句。输入整数a和b,计算并输出a、b的和与差。例: 输入 2-8 输出 The sum is-6 The difference is 10*/
6.test20002求平方根
//程序填空,不要改变与输入输出有关的语句。输入1个实数x,计算并输出其平方根。例: 输入 1.21 输出
The square root of 1.21 is 1.1
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
7.test20003华氏温度转换成摄氏温度
/*程序填空,不要改变与输入输出有关的语句。
输入华氏温度f,计算并输出相应的摄氏温度c。c = 5/9(f-32).例:括号内是说明 输入
17.2(华氏温度)输出
The temprature is-8.****/
8.test20004计算旅途时间
程序填空,不要改变与输入输出有关的语句。
输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。
有效的时间范围是0000到2359,不需要考虑出发时间晚于到达时间的情况。
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
例:括号内是说明 输入
712 1411(出发时间是7:10,到达时间是14:11)输出
The train journey time is 6 hrs 59 mins.9.test20005数字加密
程序填空,不要改变与输入输出有关的语句。输入1个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。例:括号内是说明 输入 1257 输出
The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601)
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
10.test20006大小写字母转换
程序填空,不要改变与输入输出有关的语句。输入一个大写英文字母,输出相应的小写字母。例: 输入 G 输出 g
import java.io.*;public class T20006 {
public static void main(String[] args)throws IOException
{
char ch;
ch=(char)System.in.read();
/*------------------*/
ch=(char)(ch+32);
// 以ASCII码计算
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
}
System.out.println(ch);
} 11.Test20007计算三门课程的平均成绩
程序填空,不要改变与输入输出有关的语句。
已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。本题无输入。输出示例:
math = 87, eng = 72, comp = 93 average = 84
12.test20008计算存款利息
程序填空,不要改变与输入输出有关的语句。输入存款金额 money、存期 year 和年利率 rate,精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
根据下列公式计算存款到期时的利息 interest(税前),输出时保留2位小数。
interest = money(1+rate)^year10 / 2 =
(数字与运算符之间有一空格)输出 5 10 */ /*补充知识:in.next()与in.nextline()的区别
in.next只接受一个字,不能接受一个带有空格的字符串,如下: 例如输入: Show me--(回车)用next()只能得到Show,因为遇到空格表示结束,但是nextline()则要遇到回车才知道结束.可以看一个例子,演示给大家看,如下:----------
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
import java.util.Scanner;public class Test60011{
public static void main(String []args)
{
String s1_1,s1_2,s2;
Scanner in=new Scanner(System.in);
s1_1=in.next();
System.out.println(s1_1);
System.out.println(“----------”);
in.nextLine();// 把剩余的吃掉
s2=in.nextLine();
System.out.println(s2);
System.out.println(“----------”);
s1_1=in.next();
s1_2=in.next();
System.out.println(s1_1+“
”+s1_2);
} }------------*/
精心收集
精心编辑
精致阅读
如需请下载!
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案
39.求1+1/2!+……1/N!//求1+1/2!+1/3!+....(用方法求n!)
40.求a+aa+aaa+……(用方法)//求a+aa+aaa+aa…a
41.统计一个整数中数字的个数
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0 (repeat=3)-21902 2 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 345543 输出: count=2 (-21902中有2个2)count=1 (有1个2)count=0 (345543中没有2)*/ 42.判断素数(用方法) 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 NO (1不是素数) 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 YES (2是素数)NO (9不是素数)YES (17是素数) 43.统计素数并求和 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。要求定义并调用函数prime(m)判断m是否为素数。例:括号内是说明 输入: (repeat=3)1 10 (m=1, n=10)20 35(m=20, n=35)14 16(m=14, n=16)输出: count=4, sum=17 (1到10之间有4个素数:2,3,5,7)count=3, sum=83 (20到35之间有3个素数:23, 29, 31)count=0, sum=0 (14到16之间没有素数) 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 44.输出Fibonacci序列 /*程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 Fibonacci 序列(第1项起):1 1 2 3 5 8 13 21......要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如,fib(7)的返回值是13。输出语句:System.out.print(f+“ ”); 例:括号内是说明 输入: (repeat=3)1 10 (m=1, n=10)20 100(m=20, n=100)1000 6000(m=1000, n=6000)输出: 1 2 3 5 8 (1到10之间的Fibonacci数)21 34 55 89 (20到100之间的Fibonacci数) 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 1597 2584 4181 (1000到6000之间的Fibonacci数)*/ 45.求完数 /*输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有完数 (完数就是因子和与它本身相等的数)。 要求定义并调用函数factorsum(number),它的功能是返回number的因子和。 例如,factorsum(12)的返回值是16(1+2+3+4+6)。输出语句:System.out.print(i+“ ”);例:括号内是说明 输入: 2 (repeat=2)20 500(m=100, n=400)1 100 (m=1, n=100)输出: 28 496 1 6 288*/ 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 46.求各位数字的立方和等于它本身的数 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 输出语句:System.out.print(i+“ ”);例:括号内是说明 输入: 2 (repeat=2)100 400(m=100, n=400)1 100 (m=1, n=100)输出: 153 370 371(1*1*1+5*5*5+3*3*3=153;3*3*3+7*7*7=370;3*3*3+7*7*7+1*1*1=371)1 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 47.将一个整数逆序输出 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 要求定义并调用函数reverse(number),它的功能是返回number的逆序数。 例如reverse(12345)的返回值是54321。例:括号内是说明 输入 (repeat=4)123456-100-2 99 输出 654321-1-2 99 48。十进制转换二进制 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 程序填空,不要改变与输入输出有关的语句。 输入一个正整数 repeat(0 要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。 输出语句:System.out.print(t); //t为某位二进制数 例:括号内是说明 输入: 3 (repeat=3)15 100 0 输出: 1111 1100100 0 49。求平均值 程序填空,不要改变与输入输出有关的语句。 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 输入一个正整数repeat(0 (repeat=2)3 1 2-6 5 12 2 5 4 0 输出 aver=-1.0 aver=4.6 50。求最大值及其下标 /*输入一个正整数n(1 (设最大值惟一,下标从0开始)。例:括号内是说明 输入 (repeat=3)3 1 6 4 3 10 8 1 5 1 2 5 4 0 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 输出 max=6,index=1 (最大值6的下标是1)max=10,index=0 (最大值10的下标是0)max=5,index=2 (最大值5的下标是2)*/ 51。逆序输出 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (repeat=2)4 10 8 1 2 5 1 2 5 4 0 输出 2 1 8 10 0 4 5 2 1 52。交换最小值和最大值 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 最大值与最后一个数交换,然后输出交换后的n个数。例:括号内是说明 输入 (repeat=3)5 4 3 5 1 2 4 1 5 6 7 5 5 4 3 2 1 输出 1 3 2 4 5 1 5 6 7 1 4 3 2 5 53。排序 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (repeat=3)4 5 1 7 6 3 1 2 3 5 5 4 3 2 1 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 输出 7 6 5 1 3 2 1 5 4 3 2 1 54。矩阵运算 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (2+3+4+5+6+7+8=35) 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 55。加法口诀表 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (repeat=1)3 (n=3)输出: + 56。判断上三角函数 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (上三角矩阵,即主对角线以下的元素都为0, 主对角线为从矩阵的左 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 上角至右下角的连线)例:括号内是说明 输入: (repeat=2)3 1 2 3 0 4 5 0 0 6(n=3)2 1 0-8 2 (n=2)输出: YES NO 57。求矩阵每行元素之和 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (repeat=1)3 2(m=3, n=2)6 3 1-8 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 12 输出: sum of row 0 is 9 sum of row 1 is-7 sum of row 2 is 15 58。找鞍点 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 (repeat=2)4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9(n=4)2 1 7 4 1 (n=2)输出: a[2][1]=6 NO 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 59。求字符串长度 程序填空,不要改变与输入输出有关的语句。连续输入一批以 # 结束的多串字符。统计并输出每串字符的长度。输出使用:System.out.println(len);例:括号内是说明 输入: hello 12#abc+0# (连续输入2串字符“hello 12”和“abc+0”)输出: (“hello 12”的长度是8)5 (“abc+0”的长度是5) 60。统计大写辅音字母 程序填空,不要改变与输入输出有关的语句。输入一个正整数n(0 输入一行字符串,统计并输出字符串中大写辅音字母的个数(大写辅音字母:除“A”,“E”,“I”,“O”,“U”以外的大写字母)。例:括号内是说明 输入: 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 (输入3个字符串)HELLO IT12 uieiaba 输出: (“HELLO”中有3个大写辅音字母)1 (“IT12”中有1个大写辅音字母) 0 (“uieiaba”中没有大写辅音字母) 61。查找字符 程序填空,不要改变与输入输出有关的语句。 先输入一个字符ch。然后输入一个正整数n(0 输入一行字符串,在字符串中查找该字符(ch),如果找到,则输出 该字符在字符串中最后出现的位置(从0开始);否则输出“Not Found”。例:括号内是说明 输入: m (输入一个字符)3 (要输入3行字符串)moon 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 programming 1234 输出: 0 (m在“moon”中最后出现位置是0)7 (m在“programming”中最后出现位置是7)Not Found (“1234”中没有m) 62。字符串替换 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 对应字母 A ──→ Z B ──→ Y C ──→ X D ──→ W …… X ──→ C Y ──→ B 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 Z ──→ A 例:括号内是说明 输入: (输入3行字符串)A flag of USA IT12 oueiaba 输出: Z flag of FHZ RG12 oueiaba 63。十六进制转换十进制 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat(0 个新字符串(十六进制形式),然后将其转换为十进制数后输出。例:括号内是说明 输入: 精心收集 精心编辑 精致阅读 如需请下载! 演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 (输入3行字符串)10 Pf4+1-+A 输出: 16 3905 10 ----------------------- 精心收集 精心编辑 精致阅读
Java面向对象编程习题总结
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


