2011-01-23 17 views
0

私はいくつかの文字列といくつかの整数値を含むクラスを持っています。プログラムは、バブルソートを使用して、呼び出されたstudentID内の特定の整数でソートする必要があります。C#で複数の変数型を持つクラスにバブルソートを実装する

私が遭遇する問題は、変数に正しくアクセスすることです。私たちは、クラス内の変数をprivateにする必要があります。そのため、生の値は実際のクラス内以外の場所から直接アクセスすることはできません。私はこのような何かを持っている

は、Xのすべての発生のために

public class Student { 
    // PRIVATE strings and ints 

    public Student() { 
     // set variables to text fields 
    } 

    public void bubbleSort() { 
     int i, j, temp; 

     for (i = (x-1); i >= 0; i--) {  
      for (j = 1; j <= i; j++) {  
       if(x[j - 1] > students[j]) { 
        temp = x[j - 1]; 
        x[j - 1] = x[j]; 
        x[j] = temp; 
       } 
      } 
     } 
    } 
} 

を設定し、私はmyStudent.studentIDの価値を持っている必要があります。バブルソートはクラス内で実装されることを意図していますが、どのように呼び出すかわかりません。必要なフィールドをプライベートに設定すると、ソートされる情報を引き出す方法が見つけられません。

答えて

1

propertiesを使用して、プライベートフィールドを外部に公開します。

private string text = ""; 

public string Text 
{ 
    get { return text; } 
    set { text = value; } 
} 

これが許可されていない場合は、クラスとのやりとりが不可能なため、先生に相談してください。

+0

助けてくれてありがとうございました。私はそれを進めて、火曜日に問題がある場合は、彼と話をしなければなりません。 – Spada05

+0

私はあなたがプロパティを使用することを許可されるべきであると非常に肯定的です。フィールドを公開することは悪い習慣です(クラスがアクセスを制御せず、変更に反応できないため)。しかし、プロパティはその問題を緩和するために存在します。 – Femaref

+1

不必要に書き込み可能なプロパティを公開することは、ほとんど悪いことです。ほとんどの場合、このコードはpublicフィールドと同等です。 (これは異なるリフレクションと*バイナリ*バージョン管理のセマンティクスを持っています) – CodesInChaos

3

学生クラスのIComparableインターフェイスを実装し、bubbleBortの "<"演算子の代わりにCompareTo()を使用します。これはプライベート変数の問題を解決します。

これらの変更後、BubbleSortは静的な汎用メソッドとして書き直すことができます。

public static void bubbleSort<T>(T[] array) where T : IComparable{ 
    int i, j; 
    T temp; 

    for (i = (x-1); i >= 0; i--) 
{  
    for (j = 1; j <= i; j++) 
{  
    if(array[j - 1].CompareTo(array[j]) == 1) 
{ 
    temp = array[j - 1]; 
    array[j - 1] = array[j]; 
    array[j] = temp; 
} } } } 
+0

私はこのフィールドで間違っていたとわかりました。これは文字列に適用できますか? – Spada05

+0

このソリューションは、具体的な比較モードとは独立しています。 – Alex

関連する問題