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 的弧度由用户给定,size 是我们希望数组的长度,这也是用户指定的。

4

5 回答 5

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>.

于 2012-10-28T16:00:21.333 回答
2

看起来您在运行循环之前不知道数组大小,所以最简单的解决方案是使用通用列表,然后在循环之后分配数组:

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();
于 2012-10-28T16:05:06.927 回答
0

两个数组实际上都没有被分配。

尝试这个:

class SinusoidalWaveform
{

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

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

于 2012-10-28T16:01:15.653 回答
0

在开始循环之前,使用用户指定的大小实例化您的数组,如下所示:

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

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

于 2012-10-28T16:02:25.843 回答
0

它实际上告诉您这一点,因为您未分配数组

double[] angleArray;
double[] resultArray;

如果您想为这两个数组分配值,那么您可以尝试以下方法之一

1|| 如果您想在一步中分配值,那么您可以试试这个

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

然后,您可以使用以下代码访问其值,例如

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

其中n是数组中项目的索引。通常,在数组中,第一项采用索引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];,则您可能不会设置 index 7( _Array[7] = 1;) 的值,因为您只有6索引。否则,你会得到IndexOutOfRangeException was unhandled

谢谢,
我希望你觉得这有帮助:)

于 2012-10-28T16:16:38.427 回答