尝试移动数组中的元素代替元素

时间:2019-01-09 15:59:34

标签: c# arrays

因此,我的任务是必须编写一个程序来更改字符串并将其以正确的顺序放置。现在,只允许做3件事,我有一个问题要问。允许采用第二个字符并将其移至第三个字符,依此类推,直到到达倒数第二个字符为止。此字符被倒数第二个字符替换。因此,abcdef将成为aebcdf。我的代码给我作为输出aebbbf。我有这个:

class Program{
static void Main(string[] args)
    {
        var p = new Program();
        string input = Console.ReadLine();
        char[] characters = new char[input.Length];
        characters = input.ToCharArray();

        string answer = Console.ReadLine();

        if (answer == "x")
        {
            p.MethodX(characters);
            string s = new string(characters);
            Console.WriteLine(s);
        }

        Console.ReadKey();
    }
}

以及方法MethodX:

public void MethodeX(char[] input)
    {
        int lengthText = input.Length;
        char temp = input[lengthText - 2];

        for (int i = 1; i < input.Length - 2; i++)
        {
            input[i + 1] = input[i];
            input[1] = temp;
        }
    }

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

让我们看看该方法的确切作用。

假设字符串为abcdef,则派生数组的长度为6。6-2为4,因此temp应该为e-是正确的。

现在迭代从1开始,所以b。 2,因此数组元素3(c)被替换为b。

下一次迭代:数组元素2(b)之后的下一个字符现在也是b ...由于c被b替换。所以d也被b取代!

e也是如此。输出:aebbbf

解决方案可能是这样:

public char[] Xmethod(char[] input)
{
    char[] outputArray = input;
    char temp = input[6-2];
    for(int i = 1; i < input.Length -2; i++) 
    {
        outputArray[i+1] = input[i]; 
    }
    outputArray[1] = temp;
    return outputArray
}

希望这会有所帮助。

编辑:在较早的版本中,在创建outputArray时我犯了一个错误。现在已修复。