2012-12-11 46 views
1

我很難理解我作爲Java的OOP簡介項目的一部分給出的任務。所有名字都改變了,沒有完全翻譯。 我要求完成了以下方法:Java,在數組中插入對象的方法,返回一個布爾值

public boolean insertHorse(Horse horse) { 
return true; 
} 

方法簽名不能改變,我應該添加類的方法是在馬的陣列上的馬,並如果插入成功則返回true,否則返回false。 所以這是我做了什麼:

public boolean insertHorse(Horse horse) { 

    //Create a temp array with length equal to h 
    Horse[] temp = new Horse[this.horses.length+1]; 

    //copy the horses to the temp array 
    for (int i = 0; i < horses.length; i++){ 
     temp[i] = horses[i]; 
    } 

    //add the horse on the temp array 
    temp[temp.length-1] = horse; 

    //change the reference of the old array to the temp one 
    veiculos = temp; 
    return true; 

我的問題是,如何以及爲什麼會這個不斷給假?我確實對農場的馬數有限制,但是我可以(並正在計劃)在調用該方法之前檢查它。這對我來說不好嗎?

崇高的敬意, 若昂·席爾瓦

+0

您可以通過簡單地返回「false」而無需其他操作來「正確」實現該功能。 –

+0

@HotLicks然後我會失去返回真實的可能性,我想在任務的上下文中,我必須檢查我是否在數組中允許的馬匹的最大值,並且如果我是 - >返回false – Kirag

+0

它仍然會滿足「契約」 - 不變將被保留。 –

回答

1

我想不出任何理由,除了馬匹數量的限制,這應該返回假。雖然理論上如果馬匹太多,你可能會用盡堆空間,但這種情況可能會導致程序崩潰。

這將是一個很好的做法,把馬的數量檢查在這個功能,而不是外面的。這樣,就不可能無意中插入比所允許的更多的馬。

+0

我可以在內部進行檢查,除了運行OutOfMemory之外,這是我認爲可以返回false的唯一「原因」。但是我會相信在打電話之前檢查它們會更有意義,因爲我還有更多的事情可以檢查,與馬匹無關,但是它們的「公司」(名稱已更改,但觀點相同) – Kirag

0

你假設總是會有足夠的內存來分配與空間的數組,一個更Horse

這種情況不會成立的一種情況是,如果拋出了OutOfMemoryError

+1

有意義,但考慮到這一點,如果拋出'OutOfMemoryError',它不會崩潰而不是返回false? – Kirag

+0

不是馬上,或者至少不是,如果你抓住它。然而,在記錄錯誤或將錯誤呈現給用戶之後關閉程序可能是一個好主意。 –

+0

一直在尋找,即使我像你所說的那樣捕捉到它,程序將不得不結束,這在任務中沒有考慮到。我相信這是比其他解釋更多的解釋,因爲問題是真的,它何時應該返回錯誤。儘管如此,感謝您的回答;) – Kirag