與方法的問題是存在在未進行恢復塊的情況。在這種情況下,當一個方法沒有被聲明爲void時,你必須聲明它的退出點。
您可以使用退出或拋出異常退出。如果無法找到請求的值,則選擇取決於程序應該執行的操作。
public block getBlockUnderneath (int x, int y){
for(int i = 0; i<blocks.size(); i++){
if (blocks.get(i).x == x) {
return blocks.get(i);
}
}
return null; //or throw NoSuchElementException or IllegalStateException
}
更重要的是,您可以使用for-each loop來改善您的代碼。這個解決方案可以爲您提供更好的性能,並且可以爲代碼提供安全性,因爲它使用迭代器,而不是按索引訪問項目,這不一定高效。
在這種情況下,您訪問同一個項目兩次。
if (blocks.get(i).x == x) {
return blocks.get(i);
}
完整的示例
public Block findBlock(int x} { //The class name is Block
for(Block block : blocks) {
if(block.x == x {
return block;
}
}
return null;
}
另外要注意,返回null可能引起的問題,因此被認爲是不好的做法。你能避免空,感謝檢查異常,缺省值或使用Null object
有在Java中8這一共同的編碼模式從Guava library使用Optional<T>
類的本地實現可以解決這個問題的Java < 8的版本。
public Optional<Block> findBlock(int x} { //The class name is Block
for(Block block : blocks) {
if(block.x == x {
return Optional.of(block);
}
}
return Optional.empty();
}
使用
public void someActionWithBlocK() {
Optional<Block> block = findBlock(5);
if(block.isPresent()) {
//some action with block
}
}
什麼是'blocks'?這是一個列表嗎? –
assylias
如果'blocks.size()'返回0會發生什麼? –
如果列表中沒有任何塊匹配'x',您會發生什麼? (另外,我建議你學習增強for循環...) –