2014-09-01 274 views
-5

我寫了一個汽車程序,該程序有四種方法:加速,制動,齒輪和啓動,並且我想確保在任何其他方法之前先調用啓動方法三種方法被稱爲.pls我應該如何做到這一點。如何確保在java之前先調用某個方法

+0

你的程序將會有順序,所以如果你先打電話或做一些if語句強迫它成爲第一件事情會很好 – 2014-09-01 22:06:10

+0

'boolean running = false;'把它添加到你的班級。當啓動被調用時,將其更改爲true。如果調用其他方法,只有在運行== true時才運行它們。 – csmckelvey 2014-09-01 22:09:04

回答

5

我寫了一個汽車程序,有四種方法加速,制動,齒輪和啓動,並且我想確保在任何其他三種方法被調用之前先調用啓動方法.pls我應該怎麼做這個。

也許你應該考慮一種不同的方法。例如,我建議你實際上允許調用所有的方法,但是除非啓動被調用,否則沒有響應。例如,您可以給您的Car類設置一個布爾變量,稱爲running,在start()之前設置爲true。那麼如果運行是錯誤的,你的其他方法什麼也不做

所以加速可能看起來像:

public void accelerate() { 
    if (!running) { 
    // exit the method and return to caller or throw exception 
    return; 
    } else { 
    // do what the method normally would do here 
    } 
} 
+1

感謝您認爲我可以通過您的提示做些什麼 – 2014-09-01 22:12:38

+0

另一種方法是'IllegalStateException'。 – chrylis 2014-09-01 22:56:39

8

這就是所謂的 「保持現狀」。有這樣做的方法很多,但也許是很基本的一個將保持boolean變量,它會告訴你,如果汽車啓動與否:

public class Car { 
    private boolean isStarted = false; 
    public void start() { 
     ... // Do things 
     isStarted = true; 
    } 
    ... 
} 

現在你的其他方法需要檢查isStarted,看看是否汽車處於適當的狀態:

void accelerate() { 
    if (!isStarted) { 
     throw new IllegalStateException("Car must be started to accelerate"); 
    } 
    // Do other things 
} 
void brake() { 
    if (!isStarted) { 
     throw new IllegalStateException("Car must be started to brake"); 
    } 
    // Do other things 
} 
// ...and so on 
2

只需創建一個簡單的標誌讓其他方法知道你的汽車已經啓動。

喜歡的東西:

boolean started; 
start(){ started=true; } 

accelerate() { 
    if(started){ 
     // Your code here 
    } 
} 
1

你可以在技術上有一個類UnstartedCar他們的唯一方法是StartedCar start(),返回StartedCar與accelerate

這樣的模式意味着編譯器會拒絕接受任何不能正確操作汽車的文件,它會告訴用戶在他們運行該程序之前他們不能加速未啓動的汽車:

UnstartedCar unstartedCar = Dealer.buyCar(); 
unstartedCar.accelerate(); 

會導致:

error: cannot find symbol 
    unstartedCar.accelerate(); 
       ^
    symbol: method accelerate() 
    location: variable car of type UnstartedCar 

同時,

StartedCar startedCar = unstartedCar.start(); 
startedCar.accelerate(); 

會正常工作,因爲這輛車是先啓動的。這類似於一些汽車只是拒絕讓你離開公園,除非你踩下剎車。它將永久消除由於在駕駛之前未啓動汽車而產生的每一個可能出現的錯誤(讓編譯器捕獲它被稱爲「類型安全」)。

但是,雖然這是一個非常有用的API功能,它可以防止大量的錯誤,並且在其他語言中受到高度追捧,但它不是慣用的Java而是

取而代之的是,如果您嘗試在不啓動的情況下進行加速(稱爲「快速失效」,並在dasblinkenlight的回答中進行了說明),則預計該車會發生爆炸。這種錯誤非常明顯,易於早期修復,並且更符合常見的Java約定。

舊的方法是隻是沒有車做任何事情。這不再被推薦,因爲錯誤很難找到。當客戶抱怨他們的包裹沒有交付時,您只能在數週後發現錯誤,並且發現車庫裏所有的司機都在加速器的地板上,但因爲他們忘記首先啓動車輛而沒有移動。

相關問題