簡體   English   中英

Java為什么認為我的對象是變量?

[英]Why does Java think my object is a variable?

好的,所以我試圖做一個簡單的乒乓球游戲。 我有一個跟隨鼠標的槳和一個反彈的球。 我在Sprite類中編寫了一個collidesWith(Sprite s)方法,該方法檢查球是否與槳碰撞(這是可行的,而不是問題)。 我有兩個擴展我的Sprite類的對象,一個球和一個球拍對象。 因此,在我的球類課程中,我試圖檢查它是否與槳碰撞。 所以我嘗試了

if(this.collidesWith(paddle) == true){
    System.out.println("They touched");
}

我也嘗試過ball.collidesWith(paddle)和其他組合,但是它總是對槳(和當我使用ball.collidesWith時的球)說同樣的話"Cannot find symbol. Symbol: variable paddle(or ball). Location: class Ball"

因此,如果我沒看錯,它會認為槳(和球)是變量,並且會抱怨,因為找不到它們。 如何使其理解我正在傳遞對象,而不是變量?

為了獲得更多信息,我之前的任務是讓我制作兩個盒子,讓他們在發生碰撞時改變顏色。 在該作業中,我使用了與上面非常相似的代碼

if(boxOne.collidesWith(boxTwo) == true){
      System.out.println("yes");
}

在這段代碼中,它工作得很好。 該程序知道boxOne和boxTwo是我的Sprite類的子類。 有人知道為什么他們不一樣嗎?

class Paddle {}

Paddle是一類。

Paddle paddle;

paddle是一個變量,尚未引用Paddle類的實例(也稱為對象)。

Paddle paddle = new Paddle();

paddle是一個變量,它引用Paddle的實例。

ball.collidesWith(paddle)

是一個表達式,該表達式在名為ball的變量所引用的對象上調用名為collidesWith的方法,並將由paddle變量所引用的對象傳遞給該方法。 如果尚未在此表達式的相同或封閉的詞法范圍內定義名為ball的變量和名為paddle的變量,則該表達式無效。 如果您已創建變量ballpaddle但尚未將它們設置為引用某個實例,則該表達式將編譯但無法正確執行。 您應該具有以下內容:

Ball ball = new Ball();
Paddle paddle = new Paddle();
if (ball.collidesWith(paddle)) { ... }

或者,如您所指出的,如果您屬於Ball類,那么您可能會遇到以下情況:

class Ball {
    boolean collidesWith(Paddle paddle) {
        ...
    }

    void somethingElseWithAPaddle(Paddle paddle) {
        if (this.collidesWith(paddle)) { ... }
    }
}

在這種情況下, this是一個不必定義的變量,它引用了在其上調用方法的對象。 無論您在哪里編寫表達式, paddle都必須是一個在可見位置聲明的變量。

我的猜測(與您所提供的有限信息一樣,我只能做些猜測):您沒有在球類知道的范圍內聲明paddle 或者也許您確實聲明了它,但是在此代碼運行時尚未定義它。

通常,您將編寫一個管理類,該類知道並維護槳實例,同時也知道球實例。 與其讓球檢查是否有碰撞,不如讓管理班級來做。 考慮到管理類也將負責構建您的球拍和球,因此已經將它們放在正確的范圍內。 您的管理類將對兩個槳中的每一個都有一個ball.collidesWith(paddle)檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM