2014-06-26 107 views
0

我想知道是否可以從另一個類重置變量的值。比如我有一個HillClimber(HC)班這個變量:在Java中設置另一個類的變量的值

public int ballWeight = 200; 

我想要做的就是在這個值運行球權遊戲的模擬什麼。完成後,我想將其他類的值設置爲201,然後再次開始模擬,之後再增加到202並開始另一個,等等。我的問題是,我每次重啓仿真ballWeight變量被重置爲200的時間我都用在HillClimber類的setter方法嘗試:

public int setBallWeight(int ballWeight) { 
     return this.ballWeight = ballWeight; 
    } 

,並呼籲它在模擬結束另一個類:

hc.setBallWeight(hc.ballWeight+1); 

但這似乎不工作,因爲變量存儲值沒有改變。有誰知道我該如何做到這一點,因此每次模擬結束時ballWeight的存儲值會增加1?或者這甚至有可能?謝謝。

+0

這是非常可能的,並且您描述的方式將起作用;你是否把這個物體扔掉,然後創造一個新的實例? –

+0

不,我想我只是想覆蓋這個變量,我怎麼會拋棄它並創建一個新的? – SAF

+0

你的varibable在一個靜態的類中,或者在創建對象的類中,它在哪裏? – Roan

回答

2

通常在POJO中,對於對象的每個變量,都有所謂的getter和setter方法。你的情況:

public class HillClimber{ 
    private int ballWeight; 

    public HillClimber(){ 
     this.ballWeight = 200; 
    } 

    public void setBallWeight(int ballWeight){ 
     this.ballWeight = ballWeight; 
    } 

    public int getBallWeight(){ 
     return this.ballWeight; 
    } 
} 

通過這種方式,您可以通過get和set方法訪問變量ballWeight。你不直接像hc.ballWeight那樣訪問它,這是可能的,但是這是一種不好的做法,並且阻止這種訪問類型將變量聲明爲私有(意味着只有聲明的變量可以直接訪問它)。

要fullfill您在遊戲中的每一個運行增加一個請求,因此你可以打電話

hc.setBallWeight(++hc.getBallWeight()); //Equivalent to hc.setBallWeight(hc.getBallWeight() + 1); 

我通常不使用這種方法,如果沒有自動生成的類(如在休眠情況下),而是宣佈的另一種方法在HillClimber

public void incrementBallWeight(int ballWeightToAdd){ 
    this.ballWeight += ballweiGhtToAdd; //Equivalent to this.ballWeight = this.ballWeight + ballweiGhtToAdd; 
} 

,或者如果我總是需要一個只添加到我的變量

public void incrementBallWeight(){ 
    this.ballWeight++; 
} 

然後在每場比賽結束後簡單地撥打incrementBallWeight

注意:有這個工作,你將不得不使用HillClimber相同的實例。在你的主

public class Game{ 
    private HillClimber hc = new HillClimber(); //Create the instance and sets ballWeight to 200 
    public static void main(String[] args){ 
     playGame(); 
     hc.incrementBallWeight(); //ballWeight == 201 

     playAnotherGame() 
     hc.incrementBallWeight(); //ballWeight == 202 -> Always the same instance of HillClimber (hc) 
     . 
     . 
     . 

    } 
} 

編輯

我覺得你的問題是大於。如果不使用永久存儲器,您需要保存變量的狀態(也就是說,如果關閉並打開電腦,該值也應該可用)。這簡直難以實現。

你應該重新考慮你的程序(我的意思是java程序,而不是「遊戲運行」),以便在每次遊戲運行後不停止。您可以通過不同的方式執行此操作:通過Swing GUI,通過stdin等用戶輸入。如果你想在這個話題上得到一些幫助,我們需要知道更多你的代碼(也許把整個代碼放在最好的位置)。

或者您可以使用文件來存儲您的值,其中is not as difficult as you think。 (Also)。

+0

好的答案!你可能想進一步擴展'static'變量。例如,'HillClimber'類中的'static'變量可以計算出有多少'HillClimber'被實例化了。或者可以保留一些其他與HillClimber相關的數據,特別是HillClimber。 – ADTC

+0

感謝您的回答,我在那裏嘗試過,但每場比賽結束後變量仍會重置爲200。有沒有辦法改變硬編碼值,而不必每次都讀寫文件/數據庫? – SAF

+0

如果您的意思是,如果有一種方法可以在運行時以外存儲變量的運行時易失性值,並且沒有永久存儲,則答案是否定的。而這個問題沒有意義,因爲你想存儲一個變量而不存儲它。每當你運行一個java程序並在你的對象中設置變量時,當java程序結束時,這些變量將被清除。 – Narmer

相關問題