如何检测包含数组的冗余代码?

问题描述 投票:0回答:2

我的Java课的授课有这段代码:

for (int i=0; i<arr.length; i=i+10){

if(i%10 == 0){

System.out.println(arr[i]);

}

}

如果从0开始,然后是10、20等,为什么需要if条件?当然,所有这些数字都除以10。

redundancy
2个回答
1
投票

这是多余的。它可能会产生影响的唯一方法是,当数组长度接近Integer最大值时,加上10会导致溢出,但是无论如何,代码将无限循环(或在访问负数组值时崩溃)。


0
投票

对我来说,if条件中的代码可能有两个原因:

  1. 这是一种监视函数进度的方法(尽管因为for循环的条件是i=i+10而不是i++,所以在这种情况下它的意义不大)。当我们使用某些脚本来执行处理大量数据的任务时,这是非常正常的(通常是在单个进程中,并且需要一些时间)。通过定期打印进度,在这种情况下,我们能够知道(或估计)已读取/写入了多少数据,或者循环中的代码已执行了多少次。
  2. 可能在for循环中添加了更多代码,这可能会修改i。在这种情况下,i%10 == 0将有意义。

换句话说,在这种情况下,if条件似乎是多余的。

要回答标题的问题,这是我们通常要做的。首先,在合并分支之前,请他人进行代码审查。最好让另一个人来检查您的代码,因为这样可以使您对正确性和代码样式有新的认识。其次,如果您发现一些可疑但不确定的内容(例如,您在此处认为的“冗余代码”),则编写单元测试以覆盖您想要更改的代码部分,进行更改并重新运行单元测试。看看您是否还能得到预期的效果。

我个人在这里没有听说过任何能够检测“冗余代码”的工具,因为在不同情况下“冗余”可能根本不是“冗余”。

© www.soinside.com 2019 - 2024. All rights reserved.