首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 基礎概念實戰:透過 Greenfoot Ants 場景理解套件、變數與物件互動

     編輯:Java 相關知識

前言與環境準備

本文為初級開發者系列第三部分,延續「Wombat 物件基礎」與「Wombat 類別基礎」,透過 Greenfoot Ants 螞蟻模擬場景,實作講解 Java 套件組織、變數運作、物件間方法呼叫互動。需安裝 Java SE 與 Greenfoot 環境,無程式經驗亦可跟隨學習。

啟動 Ants 場景觀察行為

從 Scenario 選單開啟 scenarios/ants,點擊 Compile All 編譯,再按 Run 執行。螞蟻離巢尋食,發現食物後拖運返巢並釋放費洛蒙(信息素)標記路徑,隨更多螞蟻往返,路徑氣味濃度遞增,形成正向回饋機制。場景可動態新增螞蟻與蟻丘觀察群體行為。

套件與匯入宣告

開啟 Ant 類別編輯器,首行為匯入宣告:

import greenfoot.*;  // World, Actor, GreenfootImage, Greenfoot
import java.util.Random;
import java.util.List;
import java.util.Collection;
import java.util.Iterator;

匯入宣告讓應用程式使用 Java API、第三方或自訂類別。首行標示使用 greenfoot 套件。Java 類別透過套件按功能分類:java.lang 基礎類、java.io 輸入輸出、java.util 集合與工具類等。類別首行必須宣告套件。建議閱讀 Java API 文件熟悉可用類別與方法,並對照 Ants 程式碼驗證 Random、List、Collection、Iterator 的實際用途。

變數與欄位深度解析

欄位宣告結構

Ant 類別中定義多個欄位,欄位宣告包含三要素:修飾詞、型別、名稱。範例:

/** 隨機數產生器 */
private static final Random randomizer = AntWorld.getRandomizer();
/** 每幾步可放置一滴費洛蒙? */
private static final int MAX_PH_LEVEL = 18;
/** 發現費洛蒙後保持方向多久? */
private static final int PH_TIME = 30;
/** 螞蟻移動速度 -- 每次更新像素數 */
private static final int SPEED = 3;
// 當前移動向量
private int deltaX = 0;
private int deltaY = 0;
/** 家蟻丘位置 */
private AntHill homeHill;
/** 是否攜帶食物 */
private boolean carryingFood = false;
/** 目前費洛蒙濃度 */
private int pheromoneLevel = MAX_PH_LEVEL;
/** 記憶上次費洛蒙程度 -- 數值越大越近期 */
private int foundLastPheromone = 0;

變數本質與物件狀態

變數代表會改變或固定的值。上例中 SPEED 賦值 3,等號右側為值、左側為變數。這些欄位定義物件狀態:如真實世界球的顏色、直徑;狗的睡醒狀態。對 Ant 而言,狀態包含移動速度、費洛蒙濃度、記憶力等。螞蟻透過費洛蒙尋食並引導同類,欄位 MAX_PH_LEVEL 定義滴釋間隔步數,foundLastPheromone 控制記憶衰減機制。變數初值常設 0 或空值,執行期動態變化。

變數型別與修飾詞

  • 實例變數:無 static 修飾,每個物件實例擁有獨立副本。
  • 靜態變數:static 修飾,類別層級僅一份副本,所有實例共享。
  • 區域變數:僅在方法或程式區塊內有效。
  • 存取修飾詞:private 僅類別內可存取,public 所有類別可存取。Food 類別所有欄位皆為 private static final,封裝大小、顏色等常數。

物件透過方法互動:Ant 與 Food 協作

Ant 類別 checkFood() 方法展示物件互動:

public void checkFood() {
    Food food = (Food) getOneIntersectingObject(Food.class);
    if (food != null) {
        takeFood(food);
    }
}

宣告 Food 型別區域變數 food(類別名大寫、變數名小寫慣例),透過 getOneIntersectingObject 檢測碰撞,若存在則呼叫 takeFood() 處理拾取邏輯。

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;

使用 Color 物件以 RGB 定義顏色,整數定義像素大小。takeSome() 方法計算拾取量並呼叫 updateImage() 更新視覺呈現。randomCoord() 利用高斯分布 (nextGaussian) 讓食物碎屑向中心聚集,模擬自然堆疊效果。

結語與延伸練習

本文涵蓋套件組織、匯入機制、變數型別與作用域、物件方法互動核心概念。建議在 Greenfoot 開啟其他場景,閱讀類別程式碼觀察變數定義與方法呼叫,嘗試修改方法改變物件行為。Greenfoot 社群提供豐富進階場景可下載研究,持續探索 Java 程式設計奧秘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved