我正在尝试将值放入数组中,但是当我编译代码时,它告诉我两个数组都从未被赋值并将其值设置为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 :(得分: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
谢谢, 我希望你觉得这很有帮助:)