Ants基础知识
以下资料为java培训为大家整理发布:
了解有关Java包、变量的概念,以及对象通过方法相互交互的方式。
在Wombat对象基础知识和Wombat类基础知识这两篇文章中,您学习
了关于对象、类、方法,以及语言和语法的基础知识。在初级开发人员系列的
第3部分,您将学习:如何编写依赖其他Java类(或JavaAPI)的Java应用
程序、什么是变量、如何使用变量,以及对象通过方法相互交互的方式。
本文中,需要在计算机中安装以下软件:
JavaSE软件
Greenfoot
本文面向对Java编程感兴趣的任何读者,无需编程经验。在开始阅读
本文之前,建议您阅读并遵循Wombat对象基础知识和Wombat类基础知识
中的有关说明。
在Ants中查看包和变量
在本教程中,通过Scenario菜单打开Ants场景,然后选择Open。应该
可以看到scenarios文件夹。选择ants并单击Open,如图1所示:
图1.打开Ants场景
Ants场景将显示在新窗口中。如果您在画面中没有看到沙色的界面,单击
场景主画面底下的CompileAll按钮。
单击Run,当蚂蚁离开蚁丘寻找食物堆时,请仔细观察。当蚂蚁发现食物
并运回蚁丘时,它们就创建了气味路径,或者相当于pheromone路径,随着更
多的蚂蚁发现了食物的路径并返回蚁丘,气味路径变得越来越清晰。和Wombat
场景一样,可以在场景中放置更多的蚂蚁或蚁丘。在ants场景中单击Run,
应该能看到如图2所示的内容。
图2.运行Ants场景
导入声明和包
右键单击Actor类下方的Ant对象,并选择OpenEditor。注意代码的
第一行:
importgreenfoot.*;//(World,Actor,GreenfootImage,and
Greenfoot);;import
tion;or;
这些语句称为导入声明。使用导入声明,Java应用程序可以使用JavaAPI
中已有的类、其他开发人员或自己创建的类。
第一个声明表明此应用程在greenfootpackage中。Java类通过包组织
在一起。您可以使用很多包,这就如同类可以处理数学问题、可在Collection
对象中组织数据和可用于过程的迭代或循环一样。换句话说,包通过函数对类
进行分类。基础类在包中,读取和写入类(输入和输出)在
包中,等等。必须在类的第一行声明包。
JavaAPI库非常庞大,其中提供了许多包供您使用。并且,您需要自己熟
悉有哪些类可用。为此,最好的方式是花些时间去阅读API文档。在本文中,
查阅ckage。在该页面的左侧列表中,请注意Random、List、
Collection和Iterator类。单击这些类的链接并阅读有关内容。看看您能否
指出它们在此应用程序中所完成的功能。注意为每个类所列出的方法,看看您
能否在AntsActorClass的代码中找出那些使用过的方法。您也可以在
Java教程中阅读更多有关这些类的信息。
变量和字段
随后,Ant类中将出现publicclassAntextendsActor行。从前面的
文章可知,这是类声明语句,它告诉您,此类名称为Ant,并且是从Actor类
继承下来的。
随后,你将在类中看到常规的语句,它在代码行之间用/**和*/符号标
记。用/**和*/标记的语句是开发人员插入的注释,这样,就能更容易理解
代码。必须用/**和*/或//符号标记注释,这样,编译器就不会尝试将这
些语句读取为Java代码。
请看以下代码块,阅读注释,该注释对代码描述的功能作出说明:
/**Randomnumbergenerator*/
privatestaticfinalRandomrandomizer=domizer();
/**Everyhowmanystepscanweplaceapheromonedrop?*/
privatestaticfinalintMAX_PH_LEVEL=18;
/**Howlongdowekeepdirectionafterfindingpheromones?*/
privatestaticfinalintPH_TIME=30;
/**Thespeedatwhichtheantmoves--inpixelsperupdate*/
privatestaticfinalintSPEED=3;
//Currentmovement
privateintdeltaX=0;
privateintdeltaY=0;
/**Locationofhomeanthill*/
privateAntHillhomeHill;
/**Indicatewhetherwehaveanyfoodwithus.*/
privatebooleancarryingFood=fal;
/**Howmuchpheromonedowehaverightnow?*/
privateintpheromoneLevel=MAX_PH_LEVEL;
/**Howwelldowerememberthelastpheromone--largernumber:more
recent.*/
privateintfoundLastPheromone=0;
所有的代码行都使用变量,并且这些特殊的变量在此Ant类中定义
了field。字段声明由三个部分构成,依次是:
零个或多个修饰符,例如public或private
字段类型
字段名称
但在理解字段之前,需要了解更多有关变量的内容。变量是什么?在
程序设计中,variable需要被赋值,该值要么改变,要么不改变。因为它们表
示的值经常发生改变,故称为变量。在上面的代码中,变量SPEED被赋值为3。
赋给变量的值写在等号的右边,变量写在左边。
这些特殊的变量定义了对象的状态。这就如同现实世界中的对象,现
实中,球的状态要么是红色的,要么是直径为3英尺。您也许会将变量dog的
状态赋值为睡着或醒的。对Ant类而言,所指的状态为:每只蚂蚁在某个方向
的移动速度为3个像素。
蚂蚁用Pheromones气味寻找食物,并提示其他蚂蚁哪里能收集食物。
在此应用程序中,Ant类定义了有关信息素的层次信息,以及蚂蚁在碰面时通
过字段变量如何操作。例如,MAX_PH_LEVEL字段定义了滴下一个信息素时,蚂
蚁能移动的最大步数;foundLastPheromone定义:通过使用高或低的编号,蚂
蚁如何适当地记忆信息素。
通常,将变量的初始值设为0,或为空。然后,随着用户运行程序,
这些值将发生改变。
变量类型
您也许已经注意到,在该类和其他类的变量前面的关键字private、
static和final。这些关键字定义了变量的类型。无关键字的变量称作
instancevariables,该变量的值与类中的每个instance值都不相同——对每
个对象而言,也是这样。另一方面,staticvariable说明即使对类进行了多
次实例化,或者创建了实例,此变量仅存在一个副本。
Localvariables是那些仅在一个方法或代码块中使用的变量,这在本
文的前面已经提到了。
Accessmodifiers声明变量要么是public类型,要么是private类
型。在Food中,所有的变量都被声明为private类型,这说明仅能在Food类
中访问这些变量。如果变量被声明为public类型,则可以从所有类中访问该
变量。
Ant对象通过方法与Food对象进行交互
现在已经声明了变量,接下来就可以在方法中使用变量,为场景做些工
作。在Ant类中向下滚动,浏览已定义的方法。您将注意到,现在,已经在方
法中使用了类开头所设置的变量。还可以看到,新变量可能仅用于某个特定的
方法。前面已经提到,这些变量称为localvariables。
蚂蚁场景中的点用于收集食物并将其运回蚁丘。注意Ant类中的
checkFood方法:
publicvoidcheckFood()
{
Foodfood=(Food)getOneInterctingObject();
if(food!=null){
takeFood(food);
}
}
在此方法中,声明了一个Food型变量food。在Java编程中,
类名通常用大写字母表示,变量名用小写字母表示。通过方法,ants对象就能
与food对象交互,如图3.所示:
图与Food
文件看一下Food类。在Ants场景中,右键单击ActorClass下
面的Food类列表,选择OpenEditor。
实际上,food类只是放在那儿,并不起什么作用,只是通过自身的变
量定义Food。
privatestaticfinalintSIZE=30;
privatestaticfinalintHALFSIZE=SIZE/2;
privatestaticfinalColorcolor1=newColor(160,200,60);
privatestaticfinalColorcolor2=newColor(80,100,30);
privatestaticfinalColorcolor3=newColor(10,50,0);
privateintcrumbs=100;
注意:这些字段建立了food的size和color。通过Color类
定义Color,说明每个color都是一个对象,确切的color是通过RGBcolor
model定义的。用整数(int)创建food堆的size,表示某个特定color的
像素数目。所有的变量都是private类型,说明它们仅能在此类中使用,同时
它们又是static类型,因此,即使对此类进行多次实例化,也仅存在一个副
本。
向下滚动Color类,注意此类中的方法。场景运行后,蚂蚁发现并
搬运食物,食物的外观必须发生变化。为创建蚂蚁和食物堆之间的交互作用,
takeSome方法定义搬运食物的数量,并调用updateImage方法,这样,食物
堆的外观就会发生变化,同时我们也能看到这些变化。
randomCoord方法在食物堆图像上随机撒播彩色点,越来越多的彩色
点向中心聚集。此方法在食物堆中产生随机位置(放置小绿点表示食物个体小
块)。这是基于随机数的Gaussian分布函数(nextGaussian),该方法使数字
与0逼近的可靠性更高(也称作“常态分布”或“正态分布”)。结果,食物小
块并不是均匀地分布在矩形画面表面,很可能是向中间聚集,这样就形成了更
多的堆。
结束语
在本文中,您学习了包如何组织类,以及如何在类的头部包含import语
句。还学习了有关变量及其类型,以及对象如何通过方法与其他类交互的内容。
在Greenfoot中打开其他场景,了解了每个场景对象的类代码。目睹了什么是
变量定义、什么是方法之间的交互,以及通过查看代码学习了其他一些内容。
尝试并改变其中的一些方法,看看您能否改变对象的行为。您也可以在
Internet上查看有关Greenfoot更多场景的信息,有些场景非常复杂且精致,
不妨把它们下载下来。
本文发布于:2022-11-25 09:04:32,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/17550.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |