快速分析中的非静态字段,方法或属性需要对象引用

时间:2015-05-05 03:21:47

标签: c# algorithm sorting quicksort

错误:

  • 非静态字段,方法或属性' Program.Quicksort(int [],int,int)' In Quicksort。

    需要对象引用。
  • 非静态字段,方法或属性需要对象引用' Program.ShowMyArray(string)' In Quicksort。

行:     Quicksort(MyArray,LBoundInteger,UBoundInteger);

ShowMyArray(" Sorted Array");

        LBoundInteger = MyArray.GetLowerBound(0);
        UBoundInteger = MyArray.GetUpperBound(0);

        outString = showLBoundStr + LBoundInteger.ToString() + Environment.NewLine + showUBoundStr + UBoundInteger.ToString();
        Console.WriteLine(outString);
        QSCallCnt = 0;
        QSSwaps = 0;
        Quicksort(MyArray, LBoundInteger, UBoundInteger);
        ShowMyArray("Sorted Array");
    }

    private void Quicksort(int[] list, int min, int max)
    {
        int[] MyArray = { 65, 25, 75, 15, 85, 35, 95, 67, 48, 66 };
        int pivot = 0;
        int p = 0;
        int temp = 0;
        int QSCallCnt = 0;
        int QSSwaps;
        string round = "round";
        string showMinOutstr = "min=";
        string showMaxOutStr = "max=";
        string showPivotOutStr = "pivot=";
        string beginSortRecursion = "Begin Sort -Recursion ";
        string pivotEnd = "Pivot to the end";
        string QsCallcntStr = "QSCallCnt = ";
        string QsSwapStr = "  QSSwaps = ";
        string outString;

        Random randomNumber = new Random();

        QSCallCnt += 1;
        QSSwaps = 0;
        outString = showMinOutstr + min.ToString() + showMaxOutStr + max.ToString();
        Console.WriteLine(outString, round, QSCallCnt);

        if (min >= max)
        {
            return;
        }

        ShowMyArray(beginSortRecursion + QSCallCnt);

        p = randomNumber.Next(min, max + 1);
        pivot = list[p];

        outString = showMinOutstr + min.ToString() + Environment.NewLine + showMaxOutStr + max.ToString() + Environment.NewLine + showPivotOutStr + pivot.ToString();
        Console.WriteLine(outString);

        temp = list[max];
        list[max] = list[p];
        list[p] = temp;
        ShowMyArray(pivotEnd);

        for (int i = min; i <= max; i++)
        {
            if (list[i] > pivot)
            {
                for (int j = i + 1; j <= max; j++)
                {
                    if (list[j] <= pivot)
                    {
                        temp = list[i];
                        list[i] = list[j];
                        list[j] = temp;
                        QSSwaps += 1;
                        ShowMyArray(QsCallcntStr + QSCallCnt + QsCallcntStr + QSSwaps);
                        break;
                    }
                }
            }
        }

        for (int i = min; i <= max; i++)
        {
            if (list[i] == pivot)
            {
                p = i;
                break;
            }
        }

        if (p - min < 2)
        {
            Quicksort(MyArray, p + 1, max);
        }
        else if (max - p < 2)
        {
            Quicksort(MyArray, min, p - 1);
        }
        else
        {
            Quicksort(MyArray, min, p - 1);
            Quicksort(MyArray, p + 1, max);
        }

    }

    private void ShowMyArray(string msg)
    {
        string outString;
        int[] MyArray = { 65, 25, 75, 15, 85, 35, 95, 67, 48, 66 };

        outString = "      {";
        for (int i = 0; i < MyArray.Length; i++)
        {
            outString += MyArray[i].ToString();
            if (i == MyArray.Length - 1)
            {
                outString += "}   ";
            }
            else
            {
                outString += ",   ";
            }
        }
        allOutString = allOutString + Environment.NewLine + outString;
        Console.WriteLine(outString, msg);
    }
}
}

1 个答案:

答案 0 :(得分:3)

虽然您没有显示足够的代码来确定,但行

Quicksort(MyArray, LBoundInteger, UBoundInteger);

几乎可以肯定是在静态方法中。

您无法从静态方法调用实例方法。您必须创建对象的实例,并使用该对象实例调用实例方法。

你可以通过使Quicksort(和具有相同问题的ShowMyArray)静态来解决这个问题

private static void Quicksort(int[] list, int min, int max)
{
    // ...
}

private static void ShowMyArray(string msg)
{
    // ...
}

或者,您可以将调用Quicksort的代码设置为实例方法。