Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java编码寻找方差 公共双方差(){ 如果(data.length==0){ 返回Double.NaN; }否则{ 对于(int i=0;i_Java_Arrays_Overloading_Variance - Fatal编程技术网

用java编码寻找方差 公共双方差(){ 如果(data.length==0){ 返回Double.NaN; }否则{ 对于(int i=0;i

用java编码寻找方差 公共双方差(){ 如果(data.length==0){ 返回Double.NaN; }否则{ 对于(int i=0;i,java,arrays,overloading,variance,Java,Arrays,Overloading,Variance,这是我的程序Stat中的一段代码。我在eclipse上编码,它告诉我不仅要添加一个return语句,而且for循环中的I++是“死代码”(这是我第一次遇到这个术语)。基本上,我要做的是为空数组返回Double.NaN,然后为任何其他数组从平均值中减去位置I处的数据(for循环下的第一行)。然后将该值平方(for循环下的第二行)。因为方差是所有这些“temp”值的平均值,所以下面的return语句返回temp/data.length。我可以告诉你我做错了,如果有人能给我一些提示或者给我指出正确的方

这是我的程序Stat中的一段代码。我在eclipse上编码,它告诉我不仅要添加一个return语句,而且for循环中的I++是“死代码”(这是我第一次遇到这个术语)。基本上,我要做的是为空数组返回Double.NaN,然后为任何其他数组从平均值中减去位置I处的数据(for循环下的第一行)。然后将该值平方(for循环下的第二行)。因为方差是所有这些“temp”值的平均值,所以下面的return语句返回temp/data.length。我可以告诉你我做错了,如果有人能给我一些提示或者给我指出正确的方向,那就太棒了

这是一个死代码,因为如果在for循环中输入,每次第一次迭代时都会返回一个值,因此语句
i++
是无用的,因为它永远不会执行

那么其他人应该是这样的:

public double variance() {
    if (data.length == 0) {
        return Double.NaN;
    } else {
        for (int i = 0; i < data.length; i++) {
            double temp = average() - data[i];
            Math.pow(temp, 2);
            return temp / data.length;
        }
    }   
}
double temp=0;
对于(int i=0;i
您需要将return移出循环语句

double temp = 0;
for (int i = 0; i < data.length; i++) {
    temp += average() - data[i];
    temp = Math.pow(temp, 2); //Math.pow returns a double so you have to assign it to temp
}
return temp/data.length; 
公共双方差(){
如果(data.length==0){
返回Double.NaN;
} 
双方差=0;
对于(int i=0;i
style/performance quibble:请告诉我,你不是在计算每次循环的平均值!?这很有道理,谢谢你。然而,甚至在我看到您的评论之前,我就尝试将return语句放在for循环之外,我收到了来自eclipse的另一条错误消息。关于如何解决这个问题有什么提示吗?我想对于每个
data[I]
你都想把平均值和
data[I]
之间的差值的平方加到
temp
-我不认为你想在循环的每一次传递中都平方
temp
!此代码不适用于计算方差。看我的答案,谁给的?你在每一次传球中都在调整温度;伊曼的回答是正确的。这是错误的。我会删除方法调用,虽然一个好的解释器可以替换方法调用,但对于一个简单的mult,方法调用仍然是无效的,我会选择variance=temp*temp;这篇文章并不是为了提高性能,我更喜欢对原始代码进行最小的修改,以便集中精力解决主要问题。即使是这样,我认为仅仅因为Java语言中少了一个函数调用就降低代码可读性是不值得的!。此外,我相信Math.pow将使用移位运算来计算平方,这比简单的乘法运算更有效。此外,我确信,当在循环语句体中调用函数时,函数只得到几行代码,任何现代编译器都会将函数体复制到循环中。
public double variance() {
if (data.length == 0) {
    return Double.NaN;
} 

double variance = 0;
for (int i = 0; i < data.length; i++) {
    double temp = average() - data[i];
    variance += Math.pow(temp, 2);
}

return variance/data.length;
}