簡體   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