2012-10-09 63 views
3

我需要有关Java作业问题的帮助。我有两个包,包含字符串ABCDbag2包含字符串EFGHbag1。我需要为这两个包的结合编写一个BagInterface,然后再调用ArrayBag<T> implements BagInterface<T>Java中的两个对象包的联合

BagInterface我的想法是这样的:

public interface BagInterface<T> { 

    public T union(T[] item); 
} 

public class ArrayBag<T> implements BagInterface<T> { 

    private final static int DEFAULT_CAP = 4; 
    private int numElements; 
    private T[] bag; 

    public ArrayBagR(int cap) { 
     bag = (T[]) new Object[cap]; 
     this.numElements = 0; 
    } 

    public T union(T[] item) { 

     // Not sure how I should write this so I can pass 
     // another class object in the parameter 

     // Like say if I write a main to run this I could 
     // do something like Bag1.union(Bag2) 
     // and get something like A B C D E F G H 
    } 
} 

好比说,如果我有这样的

public static void main(String[] args) { 
    BagInterface bag1 = new ArrayBag(n); 
    BagInterface bag2 = new ArrayBag(m); 
    BagInterface<String> everything = bag1.union(bag2); 
} 
+2

什么doe s'union'呢?它会创建一个新的BagInterface实例吗?它是否执行参数与当前包的结合? – vainolo

+0

是的,它应该创建一个新的BagInterface实例,并将两个当前包的字符串添加到新包中。 – JavaStudent

回答

3

按照您的例子,

BagInterface bag1 = new ArrayBag(n); 
BagInterface bag2 = new ArrayBag(m); 
BagInterface<T> everything = bag1.union(bag2); 

你打电话时,unionbag1作为参数传递bag2

this.bag -> represents bag1 
item in the argument represent bag2 

现在你可以写一些行了。无需从此方法返回。 bag1将与联盟更新。

public BagInterface<T> union(T[] item) { 
    T[] everything = thi.bag; 
    for(T elem: item){ 
     if(not(this.bag contains elem)){ 
      everything -> add(elem); 
     } 
    } 
    return this; 
} 

请注意:这是一个分享概念(不是代码)的伪代码。

一个Java代码可以象下面这样:

public BagInterface<T> union(T[] item) { 
     List<T> unionList = Arrays.asList(this.bag); 
     for(T elem: item){ 
      boolean present = false; 
      for(T elem1: this.bag){ 
       if(elem1.equals(elem)){ 
        present = true; 
       } 
      } 
      if(!present){ 
       unionList.add(elem); 
      } 
     } 
     this.bag = unionList.toArray(new Bag[unionList.size()]); 
     return this; 
    } 

您也可以进一步使用List方法contains简化代码:

 public BagInterface<T> union(T[] item) { 
     List<T> unionList = Arrays.asList(this.bag); 
     for(T elem: item){ 
      if(!unionList.contains(elem)){ 
       unionList.add(elem); 
      } 
     } 
     this.bag = unionList.toArray(new Bag[unionList.size()]); 
     return this; 
    } 

如果你不想更新bag1内容,你应该有这样的方法:

 public BagInterface<T> union(T[] item2) { 
       BigInterface<T> everything = new BagArray<T>(); 
     List<T> unionList = Arrays.asList(this.bag); 
     for(T elem: item){ 
      if(!unionList.contains(elem)){ 
       unionList.add(elem); 
      } 
     } 
     everything.setBags(unionList.toArray(new Bag[unionList.size()])); 
     return everything; 
    } 
+0

对不起,我真的想明白这一点,但我不能。我试图让它达到书中显示的具有BagInterface everything = bag1.union(bag2)的步骤;它执行包的“一切”来包含来自两个包的字符串。 – JavaStudent

+0

我用方法更新答案以返回值。请让我知道,如果仍然没有帮助。 –