繁体   English   中英

C#从主类调用一个带参数的方法

[英]C# Calling a method from the main class with parameters

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

我面临的问题在于输入参数。 我试图给出用户给出的值,所以如果用户输入 5,那么我将“shiftValueX”作为“_shiftValueX”提供给方法以使用它。

然而,在下面的“ToString”方法中,我正在打印“shiftPos()”方法,我收到此错误,“没有给出与所需形式参数相对应的参数”。 我该怎么办? 我尝试将参数放入 ToString 部分调用的方法中,但没有任何效果。 我是否以错误的方式调用该方法? 我该如何解决? 非常感谢。

这是“数组”类

class Arrays
{
    //constants
    public const int AMOUNT_OF_VALUES = 20;
    public const int MAX_RND_VALUES = 100;

    private int[] array = new int[AMOUNT_OF_VALUES];


    //Random Generator
    private static Random rnd = new Random();

    //Class Constructors
    public Arrays(int[] num)
    {
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = num[i];
        }
    }

    public Arrays()
    {
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = rnd.Next(MAX_RND_VALUES);
        }
    }

    //Methods
    public int[] shiftPos(int _shiftValueX)
    {
        int y = 0;
        int[] array2 = new int[AMOUNT_OF_VALUES];

        for (int i = _shiftValueX; i <= (array.Length - 1); i++)
        {
            array2[y] = array[i];
            y++;
        }

        for (int i = 0; i < (array.Length - (_shiftValueX)); i++)
        {
            array2[y] = array[i];
            y++;
        }

        return array2;
    }

    //Override ToString Method
    public override string ToString()
    {
        return "The original array was: " + string.Join(", ", array.Select(v => v.ToString())) + "\n" +
               "The rotated array is: " + string.Join(", ", shiftPos().Select(v => v.ToString()));
                              //This is where I'm getting the error ^

    }
}

这是“主程序”

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

是的,事实是你的逻辑有点不对。 正如 MarcoLaser 之前所说的,当你调用myArray.shiftPos(shiftValueX); 在您的主要内容中,您使用一个单独的数组,然后返回。 这意味着Arrays类中的Arrays保持不变。

您最有可能做的是在shiftPos方法中更改Arrays实例中的Arrays 你仍然可以返回你的第二个数组,但你也应该设置数组

    this.array = array2;
    return array2;

通过这种方式,您可以在toString()覆盖中使用存储在您的实例中的私有数组,而不是调用 toString 中的 shiftPos。

您还表示您还需要原始数组,因此只需将array2存储在不同的private变量中。

解决这个问题的另一种方法,虽然有点奇怪,但也让 shiftPos 不实际执行逻辑,而是将用户值存储在类实例中,以便您可以在 toString 方法中使用用户参数。 虽然这是接近它的一种奇怪的方式,但我建议您使用第一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM