问题:
我正在尝试使用我编写的这些方法删除数组中的第一个值:
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方法时,没有任何变化,它仍然认为所有项都在数组中,如果它返回它们必须是它们。
答案 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");
}