删除数组中的第一个/最后一个值

时间:2014-11-03 01:32:33

标签: c# arrays

问题:

我正在尝试使用我编写的这些方法删除数组中的第一个值:

removeFirst()

 public int removeFirst() //removes the first item from the array
        {
            if (isEmpty())
                throw new Exception("List is Empty");


            count--;
            for (int i = 0; i < count; i++)
            {
                values[i] = values[i + 1];



            }

            int value = values[0];

            return value;
        }

Removelast()

public int removeLast() //todo //removes the last item from the array
        {
            if (isEmpty())
        throw new Exception("List is Empty");

    count--;
    return values[count];

        }

displayUI()

public void displayUI()//displays contents of list
        {
            Console.Write("Values currently in array: ");
            foreach (var item in values)
                Console.Write( item.ToString() + ", ");


        }

问题是,当我使用我的DisplayUI()方法向我显示当前在我的values []数组中的值时,该值不会被删除,它被设置为值[0],而现在我不知道我不知道解决这个问题。

假设我使用addFirst()方法将以下数字输入到我的数组中:6, 76, 65, 13.

然后,当我运行我的removeFirst()方法几次(其中删除数组的第一个值)时,我得到了这个:

'6, 76, 13, 13'
'6, 13, 13, 13'
'13, 13, 13, 13'

我希望删除“6”而不是交换65代表13(最后一个数组值),我不知道为什么会这样做。

我希望输出为:

'76, 65, 13, 0' 

这个例子。 (由于第一个位置为空,所有其他位置可以向上移动1)

我该怎么做?

问题2:

还尝试对removeLast()进行反转

我的removeLast()方法的问题在于,当我运行我的displayUI方法时,没有任何变化,它仍然认为所有项都在数组中,如果它返回它们必须是它们。

1 个答案:

答案 0 :(得分:0)

我认为你可能想要摆脱count变量,除非还有其他原因要保留它。它最有可能造成难以捕捉的问题,而且我不知道它在哪里增加了价值。

由于你可以全局访问你的数组(这是一个糟糕的设计,但对初学者课程很好),你可以使用.Length属性(除非这是禁止的)。

例如,您可以尝试以下内容:

/// <summary>
/// Writes the contents of the array to the console
/// </summary>
private static void DisplayArray()
{
    ThrowIfArrayNullOrEmpty();

    Console.WriteLine("Values currently in array: {0}", string.Join(", ", values));
}

/// <summary>
/// Adds the integer to the start of the array and everything else to the next index
/// </summary>
/// <param name="firstValue">The integer to add</param>
private static void AddFirst(int firstValue)
{
    // First remove the last item (this will clear a space in the first position)
    RemoveLast();

    // Then update the first item
    values[0] = firstValue;
}

/// <summary>
/// Moves all items to the index before them, and initializes the last item to zero
/// </summary>
public static void RemoveFirst()
{
    ThrowIfArrayNullOrEmpty();

    // Move each item to the index before it
    for (int i = 0; i < values.Length - 1; i++)
    {
        values[i] = values[i + 1];
    }

    // Set the last item to zero
    values[values.Length - 1] = 0;
}

/// <summary>
/// Moves all other to the next index and initializes the first item to zero
/// </summary>
public static void RemoveLast()
{
    ThrowIfArrayNullOrEmpty();

    // Move each item to the previous index. Note that we have to start with the last
    // item and work our way forward, or else we overwrite a value before we move it 
    for (int i = values.Length - 1; i > 0; i--)
    {
        values[i] = values[i - 1];
    }

    // Set the first item to zero
    values[0] = 0;
}

/// <summary>
/// Throws an exception if the array is null or empty
/// </summary>
public static void ThrowIfArrayNullOrEmpty()
{
    if (values == null) throw new Exception("Array is Null");
    if (values.Length == 0) throw new Exception("Array is Empty");
}