将值分配给数组

时间:2012-10-28 15:58:34

标签: c# arrays

我正在尝试将值放入数组中,但是当我编译代码时,它告诉我两个数组都从未被赋值并将其值设置为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,大小是我们希望数组的长度,也是用户指定的。

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

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

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();

答案 2 :(得分:0)

两个阵列确实尚未分配。

试试这个:

class SinusoidalWaveform
{

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

它实际上告诉你这是因为你没有分配数组

double[] angleArray;
double[] resultArray;

如果您想为这些TWO数组指定值,那么您可以尝试以下其中一项

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];,则可能无法设置索引7_Array[7] = 1;)的值,因为你只有6个索引。否则,您将获得IndexOutOfRangeException was unhandled

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