我试图做一个标准偏差的方法,但是当我运行测试它超时
问题描述:
这是我的代码,当我运行测试它超时。我试图做一个标准偏差的方法,但是当我运行测试它超时
public static double standardDeviation(int[] numbers) {
double jo = 0.0;
for(int i=0; i<numbers.length; i++)
jo+=numbers[i];
jo=jo/numbers.length;
double[] joArray = new double[numbers.length];
for(int i=0; i<numbers.length; i++)
{
joArray[i]=Math.pow(numbers[i]-jo,2.0);
}
double jo2=0.0;
for(int i=0; i<joArray.length; i++)
jo2+=joArray[i];
jo2=Math.sqrt(jo2/joArray.length);
return jo2;
}
对于那些希望看到的测试:
public void testStdDev0()
{
assertEquals(0.8165, MiscCollectionOfFunMethodsI.standardDeviation(new int[] { 1, 2, 3 }), 0.01);
}
答
确保了循环是清晰和准确。
此外,你想确保代码没有循环。
如果你清理了,它应该不会超时。
public static double standardDeviation(int[] numbers) {
double jo = 0.0;
for(int i=0; i<numbers.length; i++)
jo+=numbers[i];
jo=jo/numbers.length;
double[] joArray = new double[numbers.length];
for(int i=0; i<numbers.length; i++)
{
joArray[i]=Math.pow(numbers[i]-jo,2.0);
}
double jo2=0.0;
for(int i=0; i<joArray.length; i++)
jo2+=joArray[i];
jo2=Math.sqrt(jo2/joArray.length);
return jo2;
}
public static double average(int[] numbers) {
double jo = 0.0;
for(int i=0; i<numbers.length; i++)
jo+=numbers[i];
return jo/numbers.length;
}
您是否尝试过调试器或添加一些打印以查看它有多远? – John3136 2014-11-21 03:35:53
@ John3136我试过调试器,我想我看到我的问题,谢谢! – JoJo 2014-11-21 03:38:07
java protip:for循环的“for each”版本会使这段代码更容易阅读:'for(int v:numbers){jo + = v; }','for(double v:joArray){jo2 + = v; }' – 2014-11-21 03:39:33