错误:
非静态字段,方法或属性' 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);
}
}
}
答案 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的代码设置为实例方法。