与方法的问题是存在在未进行恢复块的情况。在这种情况下,当一个方法没有被声明为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循环...) –