2011-01-23 39 views
0

我有一个包含几个字符串以及几个整数值的类。该程序需要使用冒泡排序按照称为studentID的特定整数进行排序。在C#中使用多个变量类型实现气泡排序

我遇到的问题是正确访问变量。我们需要将类中的变量保持为私有,所以原始值不能从实际类内的任何地方直接访问。

我有这样的设置

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; 
       } 
      } 
     } 
    } 
} 

对于X的每一次出现,我需要有myStudent.studentID的价值。冒泡排序是为了在课堂上实施,但我无法弄清楚如何调用它。随着所需的字段设置为私人,我无法找到排序信息。

回答

1

您使用properties将私人字段暴露给外部。

private string text = ""; 

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

如果不允许这样做,你应该用你的老师交谈,与类的交互是不可能的,那么。

+0

感谢您的帮助,我将着手处理,如果周二有问题,我将不得不与他交谈。 – Spada05 2011-01-23 15:11:54

+0

我相当积极,你应该被允许使用属性。暴露字段是不好的做法(因为该类不控制访问并且不能对变化做出反应),但是属性可以缓解这个问题。 – Femaref 2011-01-23 15:14:21

3

在Student类中实现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; 
} } } }