C# C使用参数从主类调用方法

C# C使用参数从主类调用方法,c#,arrays,parameters,tostring,C#,Arrays,Parameters,Tostring,我有一个程序,基本上我要做的是生成一个由20个元素组成的随机数组,然后根据用户输入的值将其中的值移动到多个位置。因此,如果用户输入5,数组将移动5个位置,输出的数组将在其第一个索引[0]处具有索引[6]的值,因为索引从0->5+1开始,在索引[1]处具有原始索引[7]的值,依此类推 我面临的问题在于输入参数。我试图给出用户给定的值,因此如果用户输入5,那么我将shiftValueX作为_shiftValueX来处理它 然而,在下面的ToString方法中,我打印出了shiftPos方法,我得到了

我有一个程序,基本上我要做的是生成一个由20个元素组成的随机数组,然后根据用户输入的值将其中的值移动到多个位置。因此,如果用户输入5,数组将移动5个位置,输出的数组将在其第一个索引[0]处具有索引[6]的值,因为索引从0->5+1开始,在索引[1]处具有原始索引[7]的值,依此类推

我面临的问题在于输入参数。我试图给出用户给定的值,因此如果用户输入5,那么我将shiftValueX作为_shiftValueX来处理它

然而,在下面的ToString方法中,我打印出了shiftPos方法,我得到了这个错误,没有给出与所需形式参数对应的参数。我该怎么办?我尝试在ToString部分将参数放入方法调用,但没有任何效果。我是否以错误的方式调用该方法?我怎样才能修好它?非常感谢你

这是类数组


对,事实是你的逻辑有点不正确。正如之前在调用myArray.shiftPosshiftValueX时所述;在main中,使用一个单独的数组,然后返回该数组。这意味着Arrays类中的数组保持不变

您最应该做的是在shiftPos方法中更改阵列实例内部的阵列。您仍然可以返回第二个数组,但也应该设置数组

    this.array = array2;
    return array2;
通过这种方式,您可以使用存储在toString覆盖中的实例中的私有数组,而不是调用toString中的shiftPos

您还声明还需要原始数组,所以只需将array2存储在不同的私有变量中即可


另一种方法是,尽管有点奇怪,但也让shiftPos不实际执行逻辑,而是让它将用户值存储在类实例中,这样就可以在toString方法中使用用户参数。虽然这是一种奇怪的处理方法,我建议您使用第一种方法。

好的,shiftposit\u shiftValueX将int作为其参数,但在shiftPost中。选择call,您不提供int。您想使用ToStringGoverLoad有什么特别的原因吗?您可以创建一个方法,该方法接受shiftValueXas参数,打印旧数组,调用shiftposshiftvaluexa并打印其返回值。我试图在ToString的shiftPos中放入一个整数,但随后它完全忽略了用户提供的值。本练习要求我们使用ToString重写方法。您在main方法中对shiftPos的调用将返回新的有序数组。但原始阵列保持不变。您可以存储返回的数组并打印该数组,也可以以更改原始数组的方式更改shiftPos方法。我想后一个选项更好,因为您提到必须使用ToString重载。是的,您是对的,我使用了另一个数组来打印,而原始数组保持其原始值。我编辑了它,它工作得很好。我在方法中使用了一个tmpArray,然后将结果复制到array2中,这样array仍然可以用于显示toString中的原始值。谢谢
class Program
{
    //constants
    public const int AMOUNT_OF_VALUES = 20;

    static void Main(string[] args)
    {

        Console.WriteLine("How many places will the values be shifted: ");
        int shiftValueX = int.Parse(Console.ReadLine());

        Arrays myArray = new Arrays();

        myArray.shiftPos(shiftValueX);
        Console.WriteLine(myArray);
    }
}
    this.array = array2;
    return array2;