我遇到了很多麻烦,理解并实现了学校项目中的列表/数组列表。我们被要求使用一种方法来执行基本任务(例如使用给我们的方法添加字符串(" Bag")"插入""删除&# 34;而不是Lists的内置属性,我理解为"。添加"和#34;。删除")但它不起作用,主要是因为我没有了解数据结构。我可以打电话给#34; BoundedBag"方法中的b和c但是这将是混乱的,如果创建了List的新实例,我将无法重新使用代码。我对一项看似基本的任务感到非常难过。 如果有人对我如何处理这个问题有任何提示,那将非常有帮助。 感谢
namespace A111111
{
class Program
{
static void Main(string[] args)
{
BoundedBag<string> b = new BoundedBag<string>("ShoppingList", 10);
b.insert("apple");
b.insert("eggs");
b.insert("milk");
Console.WriteLine(b);
//b.saveBag("C:/test/mybag.txt");
BoundedBag<string> c = new BoundedBag<string>("ShoppingList", 10);
//c.loadBag("C/test/mybag.txt");
Console.WriteLine(c.remove());
Console.WriteLine(c.remove());
Console.WriteLine(c.remove());
}
}
public interface Bag<T> where T : class
{
T remove();
void insert(T item);
string getName();
bool isEmpty();
}
public class BoundedBag<T> : Bag<T> where T : class
{
private string bagName; // the name of the bag
private int size; // max size of the bag
private int lastIndex;
private T[] items;
private Random rnd;
public static int Length { get; private set; }
public BoundedBag(string name, int size)
{
bagName = name;
this.size = size;
rnd = new Random();
items = new T[size];
}
public string getName()
{
return bagName;
}
public bool isEmpty()
{
return lastIndex == -1;
}
public bool isFull()
{
if (items.Length >= size)
{
return true;
}
else { return false;}
}
/*public T remove()
{
// fill in the code as directed below:
// using rnd object remove a random item from items
// and returns it
// throw EmptyBagException if necessary
items.Remove(rnd);
}*/
public void insert(T item)
{
// fill in the code as directed below:
// insert item into items container
// throws FullBagException if necessary
items.Add(bagName,size);
}
}
}
修改
通过属性回应您的响应我的意思是建立在数组方法中(我的错误)。我现在评论了remove方法,所以我可以专注于插入方法。加载/保存文件不是我主要关注的问题,因为我试图一步一步地采取它。由于我不了解这个程序的基本结构,我试图做最基本的事情,即将内容添加到&#34; bag&#34;。在这一点上,我理解&#34; BoundedBag&#34;是一个孩子(?)&#34; Bag&#34;和&lt; T>是一个类型参数。我不明白的是我如何插入一个项目&lt;字符串&gt;让我们说,在&#34;插入&#34;中的BoundedBag对象。根据需要的方法。我试过了
items.Add(bagName,size);
以及
BoundedBag<T>.add;
所以在这一点上,我只是在不理解我正在做的事情的情况下抛弃了尝试
答案 0 :(得分:2)
B和C与对象完全相同,只是因为它们碰巧具有相同的属性。
B和C是单独的实例。他们在记忆中的不同位置。
由于您尚未向c添加任何记录,因此无法删除。
您注释掉的代码,它可能非常重要。看起来这是一种保存包内容或从源加载它的机制。那没有发生,所以c不会有记录。