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、およびサイズは、配列の長さであり、これもユーザーが指定します。

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++が配列の長さよりも大きいかどうかをチェックしていません。したがって、2つのオプションがあります。クラップオプション:

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は配列のサイズです。最大サイズがわからない場合は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;

これらの2つの配列に値を割り当てたい場合は、次のいずれかを試してください。

1 || 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 || 配列の最大値を特定の値に設定する場合/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に増分される値が割り当てられます。お気づきかもしれませんが、配列のインデックスはで始まるが、1fori < angleArray.Length + 101

重要な注意:最大6つの値の配列セットがある場合、インデックスしかないためdouble[] _Array = new double[6];、インデックス7( )の値を設定することはできません。そうでなければ、あなたは得るでしょう_Array[7] = 1;6IndexOutOfRangeException was unhandled

ありがとう、
これがお役に立てば幸いです:)

于 2012-10-28T16:16:38.427 に答える