情况:
嘿那里,我已经创建了一个可以用线性数组执行多个函数的程序,我不想使用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++;
}
}
答案 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;