Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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 如何将数组中的所有项除以一个double?_Java - Fatal编程技术网

Java 如何将数组中的所有项除以一个double?

Java 如何将数组中的所有项除以一个double?,java,Java,我是一个完全的初学者,我有一个数组的小问题。 这个程序的目的是计算向量的归一化。第一部分只是将数组的长度计算成名为sum的int,然后我想用这个sum除以数组v中的所有项。正常[]=v[a]/和;这句话显然是个问题,但我该怎么做 public static double[] normalized(double[] v){ double sum = 0; for(int counter = 0; counter < v.length; counter++){

我是一个完全的初学者,我有一个数组的小问题。 这个程序的目的是计算向量的归一化。第一部分只是将数组的长度计算成名为sum的int,然后我想用这个sum除以数组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;
}
公共静态双[]规范化(双[]v){
双和=0;
用于(int计数器=0;计数器
有两个问题:

  • 您没有初始化
    normal
    (或者确实创建了一个数组来填充)
  • 您没有指定要在
    normal
所以你想要:

double[] normal = new double[v.length];
for(int a = 0; a < v.length; a++) {
  normal[a] = v[a] / sum;
}
return normal;
double[]normal=新的双精度[v.length];
对于(int a=0;a
试试这个

 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;
sum=Math.sqrt(sum);
双精度[]正常=新双精度[v.长度];
对于(int a=0;a
我认为下面是您需要的

   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;
double sum=0;
用于(int计数器=0;计数器
您只需像这样为法线数组指定索引,并确保初始化法线:

double[] normal = new double[v.length];
for(int a = 0; a < v.length; a++)
{
  normal[a] = v[a]/sum;
}
double[]normal=新的双精度[v.length];
对于(int a=0;a
假设你的总数是正确的。我相信这应该是可行的。

Java 8中的一行程序:

double[] normal = DoubleStream.of(v).map(p->p/sum).toArray();

谢谢你的快速回答,非常有效:)@Jon Skeet任何带有Java或C#标记的东西都是你的食物。男孩!!(赞美)你怎么这么好?比如你编程多久了?@SwaroopNagendra Jon、Java和c#是同义词。@Arpit算了吧。乔恩不回答。可能在我38岁(20年后)时,我将拥有596K个销售代表:P@SwaroopNagendra:嗯,我已经编程30年了。。。但这有点无关紧要:)谢谢你,这正是我需要的!如果你愿意,你可以接受它作为你的答案,哈哈。这还不够,因为
normal
目前还没有初始化。考虑到所有其他答案都修正了这一点,我不确定为什么这个不完整的答案目前获得了最多的赞成票……这个答案是错误的。normal为空。您需要先初始化它。@arbit:它甚至不是空的-它是一个未初始化的局部变量。这将无法编译。@JonSkeet哦,是的!愚蠢的错误。我确实是未初始化的引用。:)