2012-10-28 265 views
2

我试图将值放入数组中,但是当我编译代码时,它告诉我两个数组都从未分配给它们并将它们的值设置为null。有人可以看看代码并告诉我我做错了什么吗?将值赋给数组

class SinusoidalWaveform 
{ 
    double[] angleArray; 
    double[] resultArray; 

    public SinusoidalWaveform(double minAngle, double maxAngle, int size) 
    { 
     int c = 0; 

     for(double temp = minAngle; temp <= maxAngle; temp+=maxAngle/(size - 1d)) 
     { 
      this.angleArray[c] = temp; 
      this.resultArray[c] = Math.Sin(temp); 
      c++; 
     } 
    } 
} 

的minAngle和maxAngle在用户给定的弧度和尺寸是我们要多久阵列是,这也是由用户指定。

+0

这是C#或C++?他们是完全不同的语言? –

+0

@ user1781027 - 请发布确切的错误消息,并指定您是否使用C#或C++。但我猜测这个错误只是你从未分配你的数组,例如'angleArray = new double [size]'(for C#)。 – paulsm4

+0

@HenningMakholm我想你知道它是什么语言:) –

回答

2

您需要分配内存以两个数组:

double[] angleArray = new double[5]; 
double[] resultArray = new double[5]; 

做,要么在构造函数或声明。在这种情况下,5表示该阵列在内存中分配的元素数量。

for(double temp = minAngle; temp <= maxAngle; temp+=maxAngle/(size - 1d)) 
{ 
      this.angleArray[c] = temp; 
      this.resultArray[c] = Math.Sin(temp); 
      c++; 
} 

这很糟糕,您不检查C++是否大于数组长度。 所以你有两个选择。 废话选项:

for(double temp = minAngle; temp <= maxAngle; temp+=maxAngle/(size - 1d)) 
{ 
      this.angleArray[c] = temp; 
      this.resultArray[c] = Math.Sin(temp); 
      if(c+1 > angleArray.Length) break; //exit or risk out of bound exception 
      c++; 
} 

更好的选择,使用一个重新相当大的阵列:List<double>

+0

啊我明白了!谢谢你的帮助。 – user1781027

0

这两个数组确实还没有被分配。

试试这个:

class SinusoidalWaveform 
{ 

    double[] angleArray = new double[MAX_SIZE]; 
    double[] resultArray = new double[MAX_SIZE]; 
    ..... 

哪里MAX_SIZE是数组的大小。 如果您不确定最大尺寸是多少,请考虑使用List<double>

0

开始循环之前,使用由用户指定的尺寸的实例阵列,如下所示:

angleArray = new double[size]; 
resultArray = new double[size]; 

数组是C#的对象。在使用之前,它们必须实例化。

1

貌似你不运行循环之前知道数组大小,因此最简单的解决方法是使用一个通用的列表,然后分配阵列中的循环之后:

List<double> angleList = new List<double>(); 
List<double> resultList= new List<double>(); 
for(double temp = minAngle; temp <= maxAngle; temp+=maxAngle/(size - 1d)) 
{ 
    angleList.Add(temp); 
    resultList.Add(Math.Sin(temp)); 
} 
this.angleArray = angleList.ToArray(); 
this.resultArray= resultList.ToArray(); 
0

它实际上是告诉你这是因为你已经离开你的阵列未分配

double[] angleArray; 
double[] resultArray; 

如果您想将值分配给这两个数组,那么您可以尝试以下

01 ONE

1 ||如果你想一步到位分配值,那么你可以试试这个

double[] angleArray = { 1, 2, 3 }; 
double[] resultArray = { 4, 5, 6 }; 

然后,您可以使用下面的代码例如

int n = 1; 
angleArray[n] = 1; //Set (2) to (1) 

ñ是访问它的值数组中项目的索引。通常,在数组中,第一项采用索引0而不是1。所以,如果你说angleArray[1]它将输出2

2 ||如果你想在阵列最大值设置为特定值/分配值在两步

double[] angleArray = new double[3]; 
double[] resultArrau = new double[3]; 

虽然这将分配的值,该值将仍然是未知的,因为当你说

double[] angleArray = new double[3]; 

您正在告诉程序您想分配3个值,但您现在不会指出这些值。

在这种情况下,可以使用下面的代码例如

double[] angleArray = new double[3]; 
int o = 0; 
for (int i = 0; i < angleArray.Length; i++) 
{ 
    angleArray[i] = o; 
    o++; 
} 

这将分配的o的值将由1每个for循环递增指示值。正如你可能会注意到,我没有说i < angleArray.Length + 1因为数组索引与0启动,但不1

重要提示:如果你有一个阵列设置的最大6个值double[] _Array = new double[6];,你可以不设置索引值7_Array[7] = 1;),因为您只有6指数。否则,你会得到IndexOutOfRangeException was unhandled

谢谢,
我希望对您有所帮助:)