首页 - 网校 - 万题库 - 直播 - 雄鹰网校 - 团购 - 书城 - 模考 - 学习通 - 导航 -
首页网校万题库直播雄鹰网校团购书城模考论坛实用文档作文大全宝宝起名
2015中考
法律硕士
2015高考
MBA考试
2015考研
MPA考试
在职研
中科院
考研培训
专升本
自学考试 成人高考
四 六 级
GRE考试
攻硕英语
零起点日语
职称英语
口译笔译
申硕英语
零起点韩语
商务英语
日语等级
GMAT考试
公共英语
职称日语
新概念英语
专四专八
博思考试
零起点英语
托福考试
托业考试
零起点法语
雅思考试
成人英语三级
零起点德语
等级考试
华为认证
水平考试
Java认证
职称计算机 微软认证 思科认证 Oracle认证 Linux认证
公 务 员
导游考试
物 流 师
出版资格
单 证 员
报 关 员
外 销 员
价格鉴证
网络编辑
驾 驶 员
报检员
法律顾问
管理咨询
企业培训
社会工作者
银行从业
教师资格
营养师
保险从业
普 通 话
证券从业
跟 单 员
秘书资格
电子商务
期货考试
国际商务
心理咨询
营 销 师
司法考试
国际货运代理人
人力资源管理师
广告师职业水平
卫生资格 执业医师 执业药师 执业护士
会计从业资格
基金从业资格
统计从业资格
经济师
精算师
统计师
会计职称
法律顾问
ACCA考试
初级会计职称
资产评估师
高级经济师
注册会计师
高级会计师
美国注册会计师
审计师考试
国际内审师
注册税务师
理财规划师
一级建造师
安全工程师
设备监理师
公路监理师
公路造价师
二级建造师
招标师考试
物业管理师
电气工程师
建筑师考试
造价工程师
注册测绘师
质量工程师
岩土工程师
注册给排水
造价员考试
注册计量师
环保工程师
化工工程师
暖通工程师
咨询工程师
结构工程师
城市规划师
材料员考试
消防工程师
监理工程师
房地产估价
土地估价师
安全评价师
房地产经纪人
投资项目管理师
环境影响评价师
土地登记代理人
宝宝起名
缤纷校园
实用文档
入党申请
英语学习
思想汇报
作文大全
工作总结
求职招聘 论文下载 直播课堂
您现在的位置: 考试吧 > 计算机等级考试 > 计算机二级考试 > JAVA > 复习资料 > 正文

2015计算机等级考试二级Java入门教程第五章(7)

来源:考试吧 2015-01-19 9:26:46 考试吧:中国教育培训第一门户 模拟考场
考试吧整理了“2015计算机等级考试二级Java入门教程”,望给备考2015年计算机等级考试的考生带来帮助!

  点击查看:2015计算机等级考试二级Java入门教程章节汇总

  点击查看:2015计算机等级考试二级Java入门教程第五章汇总

  5.7 使用对象

  让我们建立一个例子来实现一些简单的二维图形,这将会给我们一个使用更多类的机会。我们定义两个类;一个是点对象类,另一个是线对象类,然后使用这两个类确定线的交点。我们将称此例子为TryGenmetry,因此你要将程序文件存储在该名字的目录或文件夹下。该例子中包括了大量的代码行,我们将逐步地把它们集中在一起,并且试着理解每段代码的执行过程。

  试试看--Point类

  我们首先为点对象定义一个很基本的类:

  class Point

  {

  //Coordinates of the point

  double x;

  double y;

  //Create a point from coordinates

  point (double xVal,double,yVal)

  {

  x=xVal;

  y=yVal;

  }

  //Create a point from another Point object

  Point(final Point oldPoint)

  (

  x=oldPoint.x; //Copy x coordinate

  y=oldPoint.y; //Copy y coordinate

  }

  //Move a point

  void move (double xDelta,double yDelto)

  {

  //Parameter values are increments to the current coordinates

  x+=xDelte;

  y+=yDelte;

  }

  //Calculate the discance to another poine

  double distance(fina) Point aPoint

  {

  return

  (x-aPoint.x)*(x-aPoint.x)+(y + aPoint.y)*(y-apoint,y);

  }

  //Convert a point to a string

  public string tostring ( )

  {

  rsturn Double.tostring()

  }

  }

  应该将Point.java保存到目录TryGeometry中。

  如何操作

  这是一个简单的类,它仅有两个实例变量x和Y,作为Point对象的坐标。在此,我们有两个构造函数:一个是通过自变量传递一对数值来建立一个点;另一个是根据一个己存在的点来建立一个新的Point对象。

  在类中包含有三个方法。第一个是move方法,它可以为每个坐标值加上一个增量来将Point移动到另一个位置上。另一个是distance()方法,它可以计算从当前的Point对象到自变量传入的Point对象之间的距离。这个方法应用勾股定理计算距离,如下图所示。

  

  最后一个是toString()方法,它可以返回一个描述当前点坐标的字符串。如果一个类定义了toString)方法,那么这个类的对象就可以作为字符串连接运算符十的一个操作数,因此,你可以在任何类中实现这个方法,并使对象按照这种方式应用。在必要的时候,编译器将自动地插入一个对toString()的调用。例如,假定thePoint是一个Point类型的对象,我们编写语句

  system.put.println(The point is at +thePoint);

  taString()方法将被自动地调用来把thePoint型转换为String型。其结果将被追加到String文字中。我们己经把taString()方法说明为public,在这里要让这个类能够通过编译,这样处理是必要的。我们将在本章稍后解释其原因。

  注意,我们是如何使用定义在类Double中的静态toStringf( )方法,将x的值转换成String型的。编译器将为"+"操作左面的操作数y自动地插入一个对相同方法的调用,来把它转换成String对象。

  试试看--Line类

  我们可以在Line类中定义使用Point对象:

  Class Line

  {

  point start //Start point of line

  point end //End point of line

  //Create a line from two points

  line(final Point start,final Point end)

  (

  this.start =new Point(Start);

  this.end=new point(end);

  )

  //Create a line form two coordinate pairs

  Line(double xStart.double ystart,double xEnd,double y End)

  {

  start=new point(xStart,ystart); //Create the start point

  通常你应该避免在两个对象之间存在这种隐含地依赖关系。

  在Line类的toStrins方法中,我们可以在一个Line对象的String表示形式中直接地使用Point对象,这是因为Point类也定义了toString方法。

  我们现在已经定义了两个类。在这些类定义中,包括了定义每个类对象的基本数据。我们还定义了一些被认为很有用的方法,并且增加了几个有不同输入参数的构造函数。注意,在Line类的定义中是如何应用Point类的。用两个Point对象来定义一条线是非常自然的,这要比完全用单独的x和Y坐标来定义Line类更加简单、更易于理解。为了进一步说明类如何相互作用,如何直接地利用类来解决问题,让我们设计一个方法,用它来计算两个Line对象的相交点。

  由两条直线建立一个点

  我们可以把这个方法增加到Line类中。下面的示意图说明了数学运算的操作过程。

  

  如果你愿意的话,可以忽略这个数学运算的过程,因为它并不是本例中最主要的内容。如果你不希望对这个新的构造函数中的代码进行深究的话,就可以侧随下面的"试试看".换句话说,如果你对高中所学过的知识还比较熟悉的话,就不会感觉太困难。

  获得两条直线交点的一种方法,是使用上图额度那些方程式。他们之所以被称作参数方程式,是因为他们使用了一个参数值(s和t)作为决定每条直线上点的变量。参数s和t早0到1之间变化,用他们给出位于定义的起点和终点之间的直线上点。当一个参数s或t为0时,方程式给出了每条直线起点的坐标;为1时,给出终点的坐标。

  在直线的交叉位置,直线方程式一定会产生相同的(x,y)的坐标值,所以,在这点上,两条直线方程式右面的x值一定会相等,同理y值也一定相等。这就给出了两个关于s和t的方程式。使用代数代换,你可以除去s而只保留所示的t方程式,然后可以用定义的linel方程式替代t,从而得到交点x和y的坐标。

  试试看--计算两条直线的交点

  我们可以利用这些结果为Line类编写其他的方法。把下列代码添加到Line.java的定义中:

  // Return a point as the intersection of two Lines- called form a line object

  Point intersecta(final line line)

  {

  Point localPoint=new Point(0,0);

  double num=

  (this.end.y=this.start.y)*(this.start.x-line1.start.x)

  (this.end.x=this.start.x)*(this.start.y-line1.start.y)

  double denom =

  (this.end.y=this.start.y)*(this.start.x-line1.start.x)*num/denom;

  (this.end.x=this.start.x)*(this.start.y-line1.start.y)*num/denom;

  return localPoint;

  }

  由于在Line类定义中引用了Point类,所以Line类在与它相关的其他类无效时是不能被编译的。在你编译Line类时,编译器也将编译其他的类。

  如何操作

  intersects()方法在一个Lure对象中被调用,并以另一个Line对象作为自变量。在代码中,局部变量num和denam是示意图中t表达式的分子和分母。然后我们使用这些值来计算交点x和y的坐标。

  假如两条直线是平行的,t表达式中的分母就为0,所以你一定要在代码中检查这个值,现在,我们先忽略它,若发生这种情况,我们就以Infinity(无穷大)结合。

  注意我们是如何获得定义直线的Point对象的坐标值的。当你想引用一个成员的成员时,只要重复使用点标记引用对象成员即可。例如,对于对象line1,表达式line1.start引用直线的开始端Point对象。因此,linel.start.x引用它的x坐标,而linel.start.y则存取它的y坐标。

  现在,我们有一个Line类,可以计算两个Line对象的交点。我们需要一个程序来测试这段代码。

  试试看--TryGeometry类

  我们可以在main( )方法中用下列语句演示一下已经定义的两个类:

  public class TryGeometry

  {

  public static void main(string[ ] args)

  (

  //Create two points and display them

  Point start=new Point(0.0,1.0);

  Piont end=new Point(5.0,6.0);

  System.out.Println(Points created are + start +and +and);

  //Create two lines and display them

  Line line1=new Line(start,end);

  Line line2=new Line(0.0,3.0,3.0,0.0);

  system.out.println(Lines oreated are + linel + and + line2);

  //Display the intersection

  system.out.println("Intersection is + line2.intersects(line1);

  //Now move the end point of linel and show the new intersection

  endmove(1.0-5.0);

  system.out.println(Intersection is + linel.intersects(line2));

  }

  }

  程序产生的输出为:

  Points created are 0.0.1.0 and 5.0,6.0

  Lines created are(0.0.1.0):(5.0,6.0)and (0.0.3.0):(3.0.0.0)

  Intersection is 1.0.2.0

  Intersection is 1.0.2.0

  如何操作

  我们首先建立两个Point对象,这两个对象将在后面建立对象line 1的时候使用,然后使用Println()方法显示这两个点。我们在Point类中定义的touring()方法被自动地用来产生每个Point对象的String表示形式。

  依据两个点建立line 1之后,我们使用Line类中的另一个构造函数,根据两对坐标建立Line2然后显示这两条直线。这里line类的tostring()成员被调用来建立每个Line.对象的String表示形式,这个方法中又依次使用Point类中的toString()方法。

  下一条语句用line2调用intersects()方法,并且返回两条直线line 1和line2交点的Poitlt对象,然后将该Paint对象作为println()方法的自变量显示输出。正像你看到的,我们得到这个Point对象时,并没有强迫保存它,这里我们仅用它来建立被显示的字符串。

  我们使用类Point中的move()方法来修改。end对象的坐标,利用这个对象建立line 1,然后再获得两条直线的交点,这次要用linel调用intersects(}方法。输出的结果表明line 1不依赖于对象end,因此,移动这个点不会对交点产生影响。

  如果你把Line类的构造函数改成以前的版本,定义直线时不建立新的Point对象,你可以再次运行这个例子来看看结果。结果输出为:

  Ponts created are 0.0.1.0 and 5.0,6.0

  Lines created are(0.0.1.0):(5.0.6.0)and(0.0.3.0):(3.0.0.0)

  Intersection is1.0.2.0

  Intersection is2.0.1.0

  现在,改变end对象就变换了这条直线,所以在移动end点之后,我们就得到了两条直线的一个不同交点。这是因为Line型对象line 1中包括对定义在main()中的Point对象的引用,而不独立于Point对象。

  相关推荐:

  2015计算机等级考试二级Java入门教程章节汇总

  2014计算机二级Java程序设计真题及答案(网友版)

  考试吧特别策划:2015年计算机等级考试报考指南

文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。
Copyright © 2004- 考试吧计算机等级考试网 All Rights Reserved 
中国科学院研究生院权威支持(北京)
在线模拟试题
考证通关杀器
考试最新资讯
一次通关技巧