2017-08-24 50 views
1

我在visual studio中出錯。我已經定義了年級和成績,是正確的?我對這個foreach聲明的使用有什麼錯誤?簡單的「Foreach」問題

的完整代碼如下:

namespace GradesStr8 {  
    class GradeBook { 

     float passgrade = 70; 
     foreach (float grade in grades) { 

    } 

     public void AddGrade(float grade) {  
      grades.Add(grade);  
     } 

     List<float> grades = new List<float>();  
    } 
} 
+6

你在課堂內循環。爲什麼?循環不應該在你的某個函數中嗎? – rcs

+1

循環只能在屬性,方法,構造函數內...... – Blue

+0

@rcs是正確的,在類中定義屬性和動作不是循環的。在任何方法內使用此循環 –

回答

3

你不能寫在一個類的函數代碼,而一個功能包裝。 那麼至少不是這種形式。

你需要問自己這個功能需要做什麼?你想從這個循環中得到什麼?這是所有成績的總和,並給你一個答案?平均? 如果是這種情況,那麼你可能會尋找這類型的實現:

*注意:您可能會發現LINQ更容易使用,但現在讓我們來看看基本實現

class GradeBook 
{ 
    private readonly List<float> _grades; 
    private const float PASSGRADE = 70; 

    public GradeBook() 
    { 
     _grades = new List<float>(); 
    } 

    public void AddGrade(float grade) 
    { 
     _grades.Add(grade); 
    } 

    //Your new function 
    public float Sum() 
    { 
     float sum = 0; 
     foreach (float grade in _grades) 
     { 
      sum += grade; 
     } 
     return sum; 
    } 

    //Your new function Avg 
    public float Avg() 
    { 
     if(_grades.Count == 0) 
     { 
      return 0; 
     } 
     float sum = Sum(); 
     return sum/_grades.Count; 
    } 
} 
+0

總和等級?也許平均會更相關? –

+1

*新增AVG實施也 –

0

任何環路必須包含在諸如函數的類成員中。你不能直接在課堂上寫一個循環。 你實際的代碼應該是這樣的:

public class GradeBook{ 
    float PassGrade = 70; 

    public void FunctionWithLoop(){ 
     foreach(var grade in grades){ 
      //Some code 
     } 
    } 
} 
+0

似乎現在工作,謝謝!雖然我不完全明白爲什麼它必須是這樣的... –

0

你不能寫在類定義foreach循環沒有的功能!

讓說,如果你的目的打印所有成績,你會做這樣的..

namespace GradesStr8 {  
    class GradeBook { 

     List<float> grades = new List<float>(); 
     float passgrade = 70;  

publuc void PrintGrades() 
{ 

     foreach (float grade in grades) { 
     Console.WriteLine(grade); 
    } 
} 

     public void AddGrade(float grade) {  
      grades.Add(grade);  
     } 
    } 
} 
中,當我創建我的類的實例(對象),這種情況下

GradeBook book = new GradeBook();

我將有函數():

book.PrintGrades() // will print all the grades. 

book.AddGrade(75); // will add grade to the list. 

如果你可以做沒有函數的foreach你簡單的就不能調用它。

你需要重新找回那個C#它的OOP語言。 (如果你需要的foreach的程序過程,而不是具體的方法,你可以在主要使用它(也起作用。))

例如:

namespace GradesStr8 
{ 
    class GradeBook 
    { 
     public List<float> grades { get; set; } 
     private const float passgrade = 70; 

     public GradeBook() 
     { 
      grades = new List<float>(); 
     } 

     public void AddGrade(float grade) 
     { 
      grades.Add(grade); 
     } 
    } 

    public class program 
    { 
     public static void Main() 
     { 
      GradeBook book = new GradeBook(); 
      book.grades.Add(75); 
      book.grades.Add(46); 

      foreach (float grade in book.grades) 
      { 
       Console.WriteLine(grade); 
      } 
     } 
    } 
} 

你需要閱讀(Essential C# 6.0

+0

爲什麼我必須在函數中編寫它?我對這些條款有些遺憾,你能否分解我無法在我的課堂上寫下它的原因? –

+0

現在將編輯我的答案 –