2017-03-19 32 views
-2

おはようございます、私は再帰的な合計計算にちょっと立ち往生しました。arraylistの再帰メソッド

私はコンテナークラスの学生がいて、すべての学生はオブジェクトクラスの学生です(学生は彼の名前、姓、彼の等級を持っています)。私は学生の成績をarraylistに保存しています。クラスは、ArrayList内のそれらの等級を計算することができます。私は反復的な方法でそれを行う方法を知っていますが、それの再帰的なバージョンについては不明です。

Studentクラス

class Student 
{ 
    public ArrayList grades = new ArrayList(); 

    public Student(ArrayList grades) 
    { 
     this.grades = grades; 
    } 
} 

学生クラス(コンテナ)

class Students 
{ 
    private Student[] studentOb{ get; set; } 
    public int containerNumber{ get; private set; } 

    public Students(int size) 
    { 
     studentOb = new Student[size]; 
    } 

    public void AddElement(Student info) 
    { 
     studentOb[containerNumber++] = info; 
    } 

    public Student TakeElement(int index) 
    { 
     return studentOb[index]; 
    } 

    //this is where I am trying to build that Sum method, and yeah my code is just nonsense 
    public int Sum(ArrayList collection) 
    { 
     int ret = collection.Count; 

     foreach (ArrayList newList in collection) 
     { 
      ret += Sum(newList) 
     } 
    } 
} 
+3

'List 'と 'Linq'拡張子を使用できるのであれば、なぜ' ArrayList'を使うのですか? – VMAtm

+1

あなたの質問は広すぎます。再帰的に値の単純なリストの合計を計算することは現実のコードでは無意味ですので、教師は明確に学術的な目標を念頭に置いています。しかし、再帰的解決法にアプローチするにはさまざまな方法があります。最も簡単なのは、インデックス値を列挙するために再帰を使用するだけですが、実際にはリストの新しいサブセットを指定するか、まったく新しいリストを作成する可能性があります。この質問はあなたの先生の方がはるかに良い答えになるでしょうが、ここで助けが必要な場合は、あなたの割り当てが何であるかを明確にする必要があります。 –

+0

あなたのコレクションは何を表していますか?つまり、クラスのプロパティにアクセスすることさえできません。それで、それを静的にすることさえできます。しかし、arraylistがリスト内の生徒を表すだけの場合、C#で再帰的に行うのは良い考えではありません。ハスケルのような関数型言語を使うのであれば、頭や尾のようなメソッドが必要ですが、C#で独自に記述しなければならないメソッドが必要です。これはファイルシステムに似ていると思って間違いを犯しましたが、あなたのケースでは、いくつかのディレクトリがあり、そこにファイルがいくつかあります。 – MetaColon

答えて

0

あなたは(ここでは最善の解決策ではありません)再帰せずにそれを行うことができます。あなたはまた、コードを改善し、型指定されたコレクションでのArrayListを置き換えることができ

public int Sum() 
{ 
    return studentOb.SelectMany(x => x.grades.Cast<int>()).Sum(); 
} 

:LINQとSelectManyを使用すると、合計としてメソッドを書くことができます。

+0

私はそれが最高ではないことを知っていますが、これは私の仕事が尋ねるものです。 – Lucas

関連する問題