程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Ants基礎知識

Java Ants基礎知識

編輯:關於JAVA

了解有關 Java 包、變量的概念,以及對象通過方法相互交互的方式。

在 Wombat 對象基礎知識 和 Wombat 類基礎知識 這兩篇文章中,您學習了關於對象、類、方法,以 及語言和語法的基礎知識。在初級開發人員系列的第 3 部分,您將學習:如何編寫依賴其他 Java 類(或 Java API)的 Java 應用程序、什麼是變量、如何使用變量,以及對象通過方法相互交互的方式。

本文中,需要在計算機中安裝以下軟件:

Java SE 軟件

Greenfoot

本文面向對 Java 編程感興趣的任何讀者,無需編程經驗。在開始閱讀本文之前,建議您閱讀並遵循 Wombat 對象基礎知識 和 Wombat 類基礎知識 中的有關說明。

在 Ants 中查看包和變量

在本教程中,通過 Scenario 菜單打開 Ants 場景,然後選擇 Open。應該可以看到 scenarios 文件 夾。選擇 ants 並單擊 Open,如圖 1 所示:

圖 1. 打開 Ants 場景

Ants 場景將顯示在新窗口中。如果您在畫面中沒有看到沙色的界面,單擊場景主畫面底下的 Compile All 按鈕。

單擊 Run,當螞蟻離開蟻丘尋找食物堆時,請仔細觀察。當螞蟻發現食物並運回蟻丘時,它們就創建 了氣味路徑,或者相當於 pheromone 路徑,隨著更多的螞蟻發現了食物的路徑並返回蟻丘,氣味路徑變 得越來越清晰。和 Wombat 場景一樣,可以在場景中放置更多的螞蟻或蟻丘。在 ants 場景中單擊 Run, 應該能看到如圖 2 所示的內容。

圖 2. 運行 Ants 場景

導入聲明和包

右鍵單擊 Actor 類下方的 Ant 對象,並選擇 Open Editor。注意代碼的第一行:

  import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot)import 

java.util.Random;import java.util.List;import java.util.Collection;import 

java.util.Iterator;

這些語句稱為導入聲明。使用導入聲明,Java 應用程序可以使用 Java API 中已有的類、其他開發人 員或自己創建的類。

第一個聲明表明此應用程在 greenfoot package 中。Java 類通過包組織在一起。您可以使用很多包 ,這就如同類可以處理數學問題、可在 Collection 對象中組織數據和可用於過程的迭代或循環一樣。換 句話說,包通過函數對類進行分類。基礎類在 java.lang 包 中,讀取和寫入類(輸入和輸出)在 java.io 包 中,等等。必須在類的第一行聲明包。

Java API 庫非常龐大,其中提供了許多包供您使用。並且,您需要自己熟悉有哪些類可用。為此,最 好的方式是花些時間去閱讀 API 文檔。在本文中,查閱 java.util package。在該頁面的左側列表中, 請注意 Random、List、Collection 和 Iterator 類。單擊這些類的鏈接並閱讀有關內容。看看您能否指 出它們在此應用程序中所完成的功能。注意為每個類所列出的方法,看看您能否在 Ants Actor Classes 的代碼中找出那些使用過的方法。您也可以在 Java 教程 中閱讀更多有關這些類的信息。

變量和字段

隨後,Ant 類中將出現 public class Ant extends Actor 行。從前面的文章可知,這是類聲明語句 ,它告訴您,此類名稱為 Ant,並且是從 Actor 類繼承下來的。

隨後,你將在類中看到常規的語句,它在代碼行之間用 /** 和 */ 符號標記。用 /** 和 */ 標記的 語句是開發人員插入的注釋,這樣,就能更容易理解代碼。必須用/** 和 */ 或 // 符號標記注釋,這樣 ,編譯器就不會嘗試將這些語句讀取為 Java 代碼。

請看以下代碼塊,閱讀注釋,該注釋對代碼描述的功能作出說明:

/** Random number generator */

private static final Random randomizer = AntWorld.getRandomizer();
/** Every how many steps can we place a pheromone drop? */

private static final int MAX_PH_LEVEL = 18;
/** How long do we keep direction after finding pheromones? */

private static final int PH_TIME = 30;
/** The speed at which the ant moves -- in pixels per update */

private static final int SPEED = 3;
// Current movement

private int deltaX = 0;

private int deltaY = 0;
/** Location of home anthill */

private AntHill homeHill;
/** Indicate whether we have any food with us. */

private boolean carryingFood = false;
/** How much pheromone do we have right now? */

private int pheromoneLevel = MAX_PH_LEVEL;
/** How well do we remember the last pheromone -- larger number: more recent. 

*/

private int foundLastPheromone = 0;

所有的代碼行都使用 變量,並且這些特殊的變量在此 Ant 類中定義了 field。字段聲明由三個部分 構成,依次是:

零個或多個修飾符,例如 public 或 private

字段類型

字段名稱

但在理解字段之前,需要了解更多有關變量的內容。變量是什麼?在程序設計中,variable 需要被賦 值,該值要麼改變,要麼不改變。因為它們表示的值經常發生改變,故稱為變量。在上面的代碼中,變量 SPEED 被賦值為 3。賦給變量的值寫在等號的右邊,變量寫在左邊。

這些特殊的變量定義了對象的狀態。這就如同現實世界中的對象,現實中,球的狀態要麼是紅色的, 要麼是直徑為 3 英尺。您也許會將變量 dog 的狀態賦值為睡著或醒的。對 Ant 類而言,所指的狀態為 :每只螞蟻在某個方向的移動速度為 3 個像素。

螞蟻用 Pheromones 氣味尋找食物,並提示其他螞蟻哪裡能收集食物。在此應用程序中,Ant 類定義 了有關信息素的層次信息,以及螞蟻在碰面時通過字段變量如何操作。例如,MAX_PH_LEVEL 字段定義了 滴下一個信息素時,螞蟻能移動的最大步數;foundLastPheromone 定義:通過使用高或低的編號,螞蟻如 何適當地記憶信息素。

通常,將變量的初始值設為 0 ,或為空。然後,隨著用戶運行程序,這些值將發生改變。

變量類型

您也許已經注意到,在該類和其他類的變量前面的關鍵字 private、static 和 final。這些關鍵字定 義了變量的類型。無關鍵字的變量稱作 instance variables,該變量的值與類中的每個 instance 值都 不相同——對每個對象而言,也是這樣。另一方面,static variable 說明即使對類進行了多次實例化, 或者創建了實例,此變量僅存在一個副本。

Local variables 是那些僅在一個方法或代碼塊中使用的變量,這在本文的前面已經提到了。

Access modifiers 聲明變量要麼是 public 類型,要麼是 private 類型。在 Food 中,所有的變量 都被聲明為 private 類型,這說明僅能在 Food 類中訪問這些變量。如果變量被聲明為 public 類型, 則可以從所有類中訪問該變量。

Ant 對象通過方法與 Food 對象進行交互

現在已經聲明了變量,接下來就可以在方法中使用變量,為場景做些工作。在 Ant 類中向下滾動,浏 覽已定義的方法。您將注意到,現在,已經在方法中使用了類開頭所設置的變量。還可以看到,新變量可 能僅用於某個特定的方法。前面已經提到,這些變量稱為 local variables。

螞蟻場景中的點用於收集食物並將其運回蟻丘。注意 Ant 類中的 checkFood 方法:

public void checkFood()

  {

    Food food = (Food) getOneIntersectingObject(Food.class);

    if (food != null) {

      takeFood(food);

    }

  }

在此方法中,聲明了一個 Food 型變量 food。在 Java 編程中,類名通常用大寫字母表示,變量名用 小寫字母表示。通過方法,ants 對象就能與 food 對象交互,如圖 3.所示:

圖 3. Ants 與 Food

文件看一下 Food 類。 在 Ants 場景中,右鍵單擊 Actor Classes 下面的 Food 類列表,選擇 Open Editor。

實際上,food 類只是放在那兒,並不起什麼作用,只是通過自身的變量定義 Food 。

private static final int SIZE = 30;

  private static final int HALFSIZE = SIZE / 2;

  private static final Color color1 = new Color(160, 200, 60);

  private static final Color color2 = new Color(80, 100, 30);

  private static final Color color3 = new Color(10, 50, 0);
  private int crumbs = 100;

注意:這些字段建立了 food 的 size 和 color。通過 Color 類定義 Color,說明每個 color 都是 一個對象,確切的 color 是通過 RGB color model 定義的。用整數 (int) 創建 food 堆的 size,表示 某個特定 color 的像素數目。所有的變量都是 private 類型,說明它們僅能在此類中使用,同時它們又 是 static 類型,因此,即使對此類進行多次實例化 ,也僅存在一個副本。

向下滾動 Color 類,注意此類中的方法。場景運行後,螞蟻發現並搬運食物,食物的外觀必須發生變 化。為創建螞蟻和食物堆之間的交互作用,takeSome 方法定義搬運食物的數量,並調用 updateImage 方 法,這樣,食物堆的外觀就會發生變化,同時我們也能看到這些變化。

randomCoord 方法在食物堆圖像上隨機撒播彩色點,越來越多的彩色點向中心聚集。此方法在食物堆 中產生隨機位置(放置小綠點表示食物個體小塊)。這是基於隨機數的 Gaussian 分布 函數 (nextGaussian),該方法使數字與 0 逼近的可靠性更高(也稱作“常態分布”或“正態分布”)。結果, 食物小塊並不是均勻地分布在矩形畫面表面,很可能是向中間聚集,這樣就形成了更多的堆。

結束語

在本文中,您學習了包如何組織類,以及如何在類的頭部包含 import 語句。還學習了有關變量及其 類型,以及對象如何通過方法與其他類交互的內容。在 Greenfoot 中打開其他場景,了解了每個場景對 象的類代碼。目睹了什麼是變量定義、什麼是方法之間的交互,以及通過查看代碼學習了其他一些內容。 嘗試並改變其中的一些方法,看看您能否改變對象的行為。您也可以在 Internet 上查看有關 Greenfoot 更多場景的信息,有些場景非常復雜且精致,不妨把它們下載下來。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved