3

Java の宿題の問題について助けが必要です。文字列、、および を含む 2 つのバッグとbag1、文字列ABCおよびDbag2含む2 つのバッグがあります。これら 2 つのバッグを結合するための BagInterface を作成してから、クラス呼び出しを作成する必要があります。EFGHArrayBag<T> implements BagInterface<T>

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);
}
4

1 に答える 1

3

あなたの例によれば、

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

呼び出すとき、引数としてunion渡すbag1ときに、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;
     }
于 2012-10-09T18:28:21.953 に答える