AddFirst方法不起作用

时间:2014-11-02 18:58:32

标签: c# arrays

情况:

嘿那里,我已经创建了一个可以用线性数组执行多个函数的程序,我不想使用premade数组类,所以我有一些方法,比如addFirst,addLast,removeFirst,removeLast等。< / p>

我的程序(不属于该类)为addFirst方法生成一个随机数,以添加到数组的“第一”位置

我的程序(不属于该类)为addFirst方法生成一个随机数,以添加到数组的“Last”位置

问题:

我的问题是,我的addFirst似乎无法正常工作,我知道这一点,因为当我运行我的displayUI方法时,应该在数组值的第一个位置的值代替在数组的最后位置。

在console.writeline()之后会发生什么:

Values currently in array: 11, 21, 80, 25

然而,会发生什么:

Values currently in array: 25, 80, 21, 11

不确定我做错了什么,这是我的addFirst代码:

public void addFirst(int value) //Adds an item to the first position in the array.
{
    if (isFull())
    {
        throw new Exception("List Full");
    }
    else
    {

        for (int i = count; i > 0; i--)
        {
            values[i] = values[i--];
        }
        values[count] = value;
        count++;

    }
}

3 个答案:

答案 0 :(得分:2)

你需要解决的一个显而易见的事情是:

           values[i] = values[i-1];

也可能想在for循环之前移动count++

因为你想先添加(而不是最后一次)

values[0] = value;

答案 1 :(得分:2)

            for (int i = count; i > 0; i--)
            {
                values[i] = values[i-1];
            }

            values[0] = value;

最后,您应该values[0]而不是values[count]。您想要添加第一个位置,即0。

编辑发表评论后。我不知道你是如何计算和数组因为我把它作为参数在我的情况下!

    static void Main(string[] args)
    {
        int[] test = new int[5];
        test[0] = 10;
        test[1] = 20;
        test[2] = 40;
        test[3] = 80;

        addFirst(123, test.Length, test);

        foreach(int i in test)
        {
            Console.WriteLine(i);
        }

    }

    public static void addFirst(int value, int count, int[] test) 
    {
        //Check for full list done by you already

        for (int i = count-1; i > 0; i--)
        {
            test[i] = test[i-1];
        }

        test[0] = value;
    }

这是正在运行的代码。您可以检查逻辑是否存在其他问题。

答案 2 :(得分:-1)

我不知道你的阵列是如何增长的。我认为你采用了一个非常大的阵列,只是添加它?例如,一个包含100个元素的数组。

您应该注意的一件事是i--i-1之间的区别。 i--首先将i作为值的索引,然后递减i值并将其放入i。换句话说,i--表示i=i-1;。所以你的for循环会颠倒过来。考虑count = 5:首先执行for循环i将是5.首先,赋值的右侧执行,因此右侧的值将具有5的索引,然后是{{1}会减少所以i将是4,所以赋值将是值[4],值[5]等等。所以你正在左转而不是右转。

您的第二个错误是您必须说i而不是Values[0]=value;