5

我是一个完整的初学者,我对数组有一点问题。这个程序的重点是计算向量的归一化。第一部分只是将数组的长度计算为称为 sum 的 int,然后我想将数组 v 中的所有项目除以这个总和。正常[] = v[a]/总和;这条线显然是问题,但我该怎么做呢?

public static double[] normalized(double[] v){

    double sum = 0;

    for(int counter = 0; counter < v.length; counter++){
        sum += Math.pow(v[counter], 2);
    }
        sum = Math.sqrt(sum);
        double[] normal;
    for(int a = 0; a < v.length; a++){      
        normal[] = v[a]/sum;
    }
return normal;
}
4

5 回答 5

5

您需要做的就是像这样为您的普通数组指定一个索引,并确保初始化正常:

double[] normal = new double[v.length];
for(int a = 0; a < v.length; a++)
{
  normal[a] = v[a]/sum;
}

假设你的总和是正确的。我相信这应该有效。

于 2013-08-20T16:22:30.427 回答
4

有两个问题:

  • 您没有初始化normal(或确实创建了一个要填充的数组)
  • 您没有指定要在其中设置的元素normal

所以你要:

double[] normal = new double[v.length];
for(int a = 0; a < v.length; a++) {
  normal[a] = v[a] / sum;
}
return normal;
于 2013-08-20T16:18:57.590 回答
2

尝试这个

 sum = Math.sqrt(sum);
  double[] normal=new double[v.length];
  for(int a = 0; a < v.length; a++){

      normal[a] = v[a]/sum;
  }
  return normal;
于 2013-08-20T16:19:29.607 回答
2

我认为下面是你需要的。

   double sum = 0;

   for(int counter = 0; counter < v.length; counter++){
   sum += Math.pow(v[counter], 2);
}
  sum = Math.sqrt(sum);
  double[] normal=new double[v.length];
  for(int a = 0; a < v.length; a++){

      normal[a] = v[a]/sum;
  }
  return normal;
于 2013-08-20T16:19:54.823 回答
2

Java 8 中的单行代码:

double[] normal = DoubleStream.of(v).map(p->p/sum).toArray();
于 2019-02-06T01:18:38.320 回答