2017-04-17 4 views
-1

私はC#でプロジェクトを始めました。オブジェクト(CLAというクラス)があります。 CLAはセット(リスト)を作成します。ArgumentOutOfRangeException

List<Cla>で機能し、HighValue,LowValueなどが必要です。しかしArgumentOutOfRangeExceptionはここに入っています。

コンストラクタでメソッドを呼び出すことはできますか?このコードは正しいですか?あなたの問題である

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Cla> ClaList = new List<Cla>(); 
     ClaList.Add(new Cla("a", 10.3, "Priznak1", 1)); 
     ClaList.Add(new Cla("b", 3.3, "Priznak1", 1)); 
     ClaList.Add(new Cla("c", 7.3, "Priznak1", 1)); 
     ClaList.Add(new Cla("d", 9.3, "Priznak1", 1)); 
     ClaList.Add(new Cla("e", 8.3, "Priznak1", 1)); 

     CritListSmall NewTest = new CritListSmall(ClaList); 
     Console.WriteLine("ddd {0}", NewTest.HighValue); 
    } 
} 


class CritListSmall 
{ 
    public double HighValue; 
    public double LowValue; 

    public CritListSmall(List<Cla> p) 
    { 
     HighValue = p[0].ObjectValue; 
     LowValue = p[0].ObjectValue; 

     int NumberElements; 

     NumberElements = p.Count; 
     for (int i = 1; i <= NumberElements; i++) 
     { 
      double m = p[i].ObjectValue; //Exception occurs here 
      if (HighValue < m) 
       HighValue = m; 
     } 
     for (int l = 1; l <= NumberElements; l++) 
     { 
      double n = p[l].ObjectValue; //and here 
      if (LowValue > n) 
       LowValue = n; 
     } 
    } 


    public class Cla 
    { 
     public string ObjectName; 
     public double ObjectValue; 
     public string PriznakName; 
     public int ClassNumber; 

     public Cla(string on, double ov, string pn, int cn) 
     { 
      ObjectName = on; 
      ObjectValue = ov; 
      PriznakName = pn; 
      ClassNumber = cn; 
     } 

     public double CritValue; 
     public double ExpValue; 

     public bool Outlier; 
     public double AbsoluteValue; 
    } 
} 
+0

リストを使用する必要がありますゼロベースです。 – LarsTech

+1

forループは '<= count'まで実行されるべきではありません。これは、インデックス付けが0から始まりcount-1で終了するためです。それを 'だけに変更すれば、あなたのループはうまく動作します –

答えて

0
for(int i = 1; i <= NumberElements; i++) 

。それは:

for(int i = 0; i < NumberElements; i++) 

for(int l = 0; l < NumberElements; l++) 

どうしてですか? NumberElementsは、実施例10のために、Pのカウントです。しかしインデックスはC#配列のインデックス0から9

+0

はい!ありがとうSeanそれは動作します – ldn

+0

私は '<= n - 1'の代わりに'

+0

私はすべての答えが正しいと思う、投票の下にフックで、受け入れられたものの1つをマークしてください。私はそれが同じ問題を抱えている他のユーザーには役立つと思います。おそらく、あなたはSOツアーを作ることができます:http://stackoverflow.com/tour –

1

にありません10で開始するので、あなたはこのようにあなたのループを変更する必要があります。

for (int i = 0; i < NumberElements; i++) 

そして:

for (int l = 0; l < NumberElements; l++) 
2

C#のコレクションでは、ゼロベースのインデックスを持っています。リストに5つのアイテムがある場合、そのインデックスは0,1,2,3,4になります。だからではなく、

for(int i = 1; i <= NumberElements; i++) 

のあなたは

for(int i = 0; i < NumberElements; i++) 
      ^^
    from zero and less than count of items 
関連する問題