我创建了一个CustomList类,其中包含一些方法,如Add(),Set()和RemoveAt()。此CustomList类用于模仿List<>的行为。没有实际使用它的类。 在调试我的程序时,我注意到当我输入要删除的字符串的索引时,我的代码成功删除了该字符串。但是当我调用print方法时,它会双重打印数组中的最后一个字符串。我假设错误在RemoveAt()内而不是Print(),因为当没有调用RemoveAt()时,Print()完全正常。我想知道是否有人能指出我正确的方向。
class CustomList
{
private int count;
private String[] data;
public int Count
{
get { return count; }
set { value = count; }
}
public CustomList(int arrayNum)
{
data = new String[arrayNum];
}
public CustomList(): this(4)
{
}
public void Add (String item)
{
if (count > data.Length)
{
String[] temp = new String[count * 2];
for (int i = 0; i < data.Length; i++)
{
temp[i] = data[i];
}
data = temp;
}
data[count] = item;
count++;
}
public int IndexOf (String item)
{
for (int i = 0; i < data.Length; i++)
{
if (data[i].Contains(item))
{
return i;
}
}
return -1;
}
public bool Contains (String item)
{
if (IndexOf(item) == -1)
{
return false;
}
return true;
}
public void RemoveAt(int index)
{
if (index < count && index >= 0)
{
Array.Copy(data, index + 1, data, index, Count - (index + 1));
count--;
}
}
public bool Remove(String item)
{
if (data.Contains(item))
{
int index = Array.IndexOf(data, item);
RemoveAt(index);
return true;
}
return false;
}
public void Print()
{
for (int i = 0; i < count; i++)
{
Console.WriteLine(data[i]);
}
}
答案 0 :(得分:1)
您的打印循环应该从0到count-1
,而不是从0到count
。如果您有3个项目(count == 3
),那么这些项目的索引是0,1,2。
由于您实施Remove
的方式,您只会因访问一个太多的项目而侥幸逃脱,这不会缩小数组(所以现在还有一个 - 该索引处的未使用元素。)
将<=
更改为<
。
此外,RemoveAt
方法应该count--
,而不是Count--
。