2012-07-12 65 views
-5

任何人都可以建议如何重新写下面的Java代码片段,如果有的话,为什么它会不合适,谢谢!这个java代码片段可以重写吗?

try { 
    int i = 0; 
    while (true) 
     a[i++].func(); 
} catch(ArrayIndexOutOfBoundsException e) { 
} 
+6

Ist此作业? – RoToRa 2012-07-12 09:14:11

+1

你明白这是干什么的吗?如果是这样,你必须知道它为什么不合适...... – Betlista 2012-07-12 09:16:34

+2

这在[* Java Puzzlers *]的第42项中涵盖(http://www.amazon.co.uk/Java-Puzzlers-Traps-Pitfalls-Corner/DP/032133678X /)。 – 2012-07-12 09:16:45

回答

8

使用for-each循环:

for(TypeOfArray item : a) { 
    item.func(); 
} 

或可替代简单的for循环:

for(int i = 0; i < a.length; i++) { 
    a[i].func(); 
} 

生成的字节码是或多或少相同的,但我发现的for-each循环更优雅。您的代码是不合适的,因为它:

  • 使用流量控制异常
  • 使用while(true)循环(如果有任何其他方式根本不使用它)
4

由于一个好的一般原则,你不应该使用例外进行流量控制。坦率地说,在阵列的末端跑起来就是一片空白。

尝试使用 “foreach” 循环:

for (IHasFunc hasFunc : a) { 
    hasFunc.func(); 
} 
0

不要使用异常来结束循环。使用a.length来确定大小。

0

如果使用for循环这样的:

for (YourObject obj : a) { 
    obj.func(); 
} 

那么你避免索引变量的要求。

如前所述,例外情况不适合流量控制。创建和追踪执行流程非常困难。