我想从类中请求数组并在程序中使用它。 :base
无效
这是我的RandomArray
班级
<!-- language: lang-js -->
public class RandomArray
{
/// <summary>
/// create a single random number generator
/// </summary>
static readonly Random generator = new Random();
/// <summary>
/// here are the random numbers stored
/// </summary>
int[] array;
/// <summary>
/// store the min, max used to generate the data
/// </summary>
readonly int min, max;
/// <summary>
/// Constructor only needs how the value limits
/// </summary>
/// <param name="min">The minimum value (typical 0)</param>
/// <param name="max">The maximum value (example 100)</param>
public RandomArray(int min, int max)
{
this.min=min;
this.max=max;
this.array=new int[0];
}
/// <summary>
/// Fills the array with random numbers
/// </summary>
/// <param name="count">The number of data to generate</param>
public void Fill(int count)
{
this.array=new int[count];
// fill array with random integers
for (int i=0; i<array.Length; i++)
{
array[i]=generator.Next(min, max);
}
}
/// <summary>
/// Copy constructor if needed (optional)
/// </summary>
/// <param name="other">A RandomArray to copy the data from</param>
public RandomArray(RandomArray other)
{
this.min=other.min;
this.max=other.max;
this.array=(int[])other.array.Clone();
}
/// <summary>
/// Provide the data
/// </summary>
public int[] Array { get { return array; } }
/// <summary>
/// Provide the limits used
/// </summary>
public int Min { get { return min; } }
public int Max { get { return max; } }
/// <summary>
/// Creates a comma separated list of numbers like <c>[45,32,64,..]</c>
/// </summary>
public string ToStringList()
{
string[] parts=new string[array.Length];
for (int i=0; i<parts.Length; i++)
{
parts[i]=array[i].ToString();
}
return "["+string.Join(",", parts)+"]";
}
/// <summary>
/// Shows only the limits used
/// </summary>
public override string ToString()
{
return string.Format("RandomArray({0},{1})", min, max);
}
}
<!-- language: none -->
我想对这个数组进行排序,所以我创建了另一个类:BubbleSort。
<!-- language: c#-->
class BubbleSort : RandomArray // inherit from RandomArray Class
{
public void Bubble()
{
int temp;
for (int j = 1; j <= Array.Length - 2; j++)
{
for (int i = 0; i <= Array.Length - 2; i++)
{
if (Array[i] > Array[i + 1])
{
temp = Array[i + 1];
Array[i + 1] = Array[i];
Array[i] = temp;
}
}
}
}
}
}
<!-- language: none -->
最后一件事是按钮:
<!-- language: c#-->
private void button2_Click(object sender, EventArgs e)
{
BubbleSort p = new BubbleSort();
p.Bubble();
}
<!-- language: none -->
如何在同一个阵列上操作(排序)?现在我有错误:'MyProgram' does not contain a constructor that takies 0 arguments.
请帮忙,问候:)
答案 0 :(得分:1)
正如错误消息告诉您的那样,您的RandomArray
类只有一个构造函数,它接受两个参数:RandomArray(int min, int max)
。这意味着派生类的构造函数必须也将这些参数传递给基类的构造函数。
class BubbleSort : RandomArray
{
public BubbleSort(int min, int max)
: base(min, max)
{ }
}
您还可以使用不同的构造函数重载来传递默认参数:
class BubbleSort : RandomArray
{
public BubbleSort(int min, int max)
: base(min, max)
{ }
public BubbleSort()
: this(1, 10)
{ }
}
然而,更重要的是,继承是错误的方法:“冒泡排序”是不数组。 “冒泡排序”是一种“排序算法”。
换句话说,如果有的话,你可以这样写:
interface ISortAlgorithm<T>
{
void Sort(T[] array);
}
然后将BubbleSort
定义为:
class BubbleSort : ISortAlgorithm<int>
{
public void Sort(int[] array)
{
...
}
}
答案 1 :(得分:0)
选项1:
问题是随机函数缺少构造函数,零参数
public class RandomArray
{
public RandomArray()
{}
}
我认为你忘了调用函数,你可以像这样出错
public void Bubble() :base()
{
选项2:
或避免现有代码出错
public void Bubble() :base(1,10)
{
选项3:
或者您可以像这样修改子类构造函数
public void Bubble(int i) :base(i)
{
答案 2 :(得分:0)
如果您已经创建了一个sort类方法,我会将它包含在您的数组类中:
public void Bubble()
{
int temp;
for (int j = 1; j <= array.Length - 2; j++)
{
for (int i = 0; i <= array.Length - 2; i++)
{
if (array[i] > array[i + 1])
{
temp = array[i + 1];
array[i + 1] = array[i];
array[i] = temp;
}
}
}
}
然后你就可以使用它:
RandomArray myArray = new RandomArray(0,5);
myArray.Bubble();