2012-10-28 264 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

謝謝,
我希望對您有所幫助:)