2015-11-03 70 views
-1

我正在做一些初學者工作在C#上,使用visual studio。我必須計算用戶輸入到數組中的最小數字。我需要編寫代碼來手動完成。這是我有什麼相關的。將變量設置爲數組中的第一個值 -

public partial class Form1 : Form 
{ 
                       //Declare and initialise variables to be used in app. 
    int[] markArray = new int[10];           //Declare an array of integers to hold entered user values 
    int  arrayPointer   = 0;          //Declare array pointer - This will be incremented after each function is carried out, so that the next user entered number will be placed in the next index position in the array.            
    int  lowestMark    = 0;          //Declare lowest mark 

private void buttonAdd_Click(object sender, EventArgs e)      //on a button click within the app 
    { 
     try                  //Test value enter is number 
     { 
      markArray[arrayPointer] = Convert.ToInt32(textEntry.Text);   //Take value from text box and place in array cell if it is a int 
     } 
     catch                 //Catch non ints 
     { 
      MessageBox.Show("You must enter a number ");      //if not int display error messsage 
     } 

     int lowestMark = markArray[0];           // Set variable "lowestMark" to the value in the first position of the array. 
     for (int i = 0; i < 10; i++) 
     { 
      if (markArray[i] < lowestMark)          // if there is an index with a value lower than the value assigned to "lowestMark" 
      { 
       lowestMark = markArray[i];          //Set this new lower value as the "lowestMark" 
      } 
     } 
     arrayPointer++;               //Increment array pointer 
    } 

所以無論哪種方式我已經與它擺弄的lowestMark值始終是相同的值,我給它時,我聲明。如果我在申報時輸入set it to 100,那麼運行時就會顯示爲最低標記。所以它會出現這樣的行,將其設置爲數組中的索引0中的值什麼也不做。即使通過輸入10個數字來填充數組中的每個索引,它仍將讀爲0.我不知道爲什麼,這很奇怪,因爲我試圖做的事似乎很簡單。

Enter a value into markArray,在index通過arrayPointer決定,這starts at 0.Set lowestMark以在同一位置上的相同的值。遞增arrayPointer,以便下一個值將被輸入到索引1中。

該程序有一些其他的小函數,它在該按鈕上單擊時執行,但我已將它們移除以僅保留不起作用的東西

+1

而不是try/catch使用int.TryParse()。例外情況不應用於流量控制。 –

+2

面對這樣的問題,我會給你最好的建議:按F5並逐步調試。 – rcdmk

+0

我會在調試器中運行它,並確保變量值是您所期望的。我對你使用'arrayPointer'感到困惑,並懷疑是這個問題。 –

回答

3

您正在將您的lowestMark重新聲明爲該方法的局部變量。

int lowestMark = markArray[0]; 

如果你想使用實例變量,不要重新聲明它。

lowestMark = markArray[0]; 

你的實例變量,也稱爲lowestMark,正在由局部變量掩蓋因此其價值永遠不會改變。

0

您在類中設置爲lowestMark的值將始終爲返回的值。爲什麼?

因爲您在嵌套範圍內聲明另一個int lowestMark。這會影響外部作用域中的變量。分配給它時,您將分配給與類範圍中的整數不同的整數。 Form1.lowestMark將始終具有初始值。

解決方案?在您的buttonAdd_Click方法中,將int lowestMark = markArray[0];更改爲lowestMark = markArray[0];

相關問題