Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        6年前关闭。
                    
                
        

我在pathfind上工作,在这里我需要获取最少的vararg整数,在这里我可以获取一个或多个整数。
我创建了一个返回最小值的方法,但我的Leed开发人员说这还不够好,我必须进行一些重构并改进此方法。这是我的代码:

public int getMinimalValue(int... arguments) {
    if(arguments.length == 0)
       throw new IllegalArgumentException("Method is called without arguments.");
    int localMinimum = arguments[0];
    for (int i = 1; i < arguments.length; i++)
        if (arguments[i] < localMinimum)
            localMinimum = arguments[i];
    return localMinimum;
}


我不知道为什么总是返回最小值时此方法不够好。我正在尝试寻找其他解决方案,但我遇到了麻烦。有人可以帮我吗?

最佳答案

您的首席开发人员是对的。您的解决方案不够好。请尝试以下操作:

public int getMinimalValue(int firstArg, int... remainingArgs) {
        int minimum = firstArg;
        for (int arg : remainingArgs) {
            if (arg < minimum) {
                minimum = arg;
            }
        }
        return minimum;
    }


您的解决方案有很大的问题!您没有注意到,当不带任何参数使用此方法时,您将获得异常而不是最小值。如果您对此方法执行单元测试,则测试将失败。

使用此解决方案,您将获得以下好处:


通过JUnit测试并始终返回最小值的方法,而不是抛出IllegalArgumentException(java.lang.IllegalArgumentException:方法不带参数。-从代码中调用)
您可以使用foreach循环
易于维护
代码看起来不错

关于java - 重构最小方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20364292/

10-12 00:41
查看更多