简体   繁体   中英

Bag Class Implementation in Java/Using Array

I am having some difficulty understanding my assignment and I just want to make sure I am doing it correctly and would like to get another pair of eyes on my code. My assignment is as follows:

Implement a Bag class using an Array as the base data structure, which I have done. In our UML diagram my instructor shows it being an array of objects and am confused as to how I should be doing this with objects and how to compare them. I created a Node class to act as the objects and will attach that to the end of code. I main problem is I don't know what to do for Union and contains and are therefore causing me to question the rest of my code.

public class Bag extends Node {

    public Node array[];
    public Node header = new Node(null, null, null);

    public int bagSize = 10000; // An Initial size of array for the Objects in
    // the bag

    public int MAX_SIZE = 1000000; // Max Size of elements in a undetermined
    // size bag

    static int count = 0; // Number of Elements currently in Bag

    // Constructor for base Bag
    // This bag has a maximum size
    // bag that a bag can have
    public Bag() {
        array = new Node[MAX_SIZE];
        bagSize = MAX_SIZE;
        array[count] = header;

    }

    // Constructor for bag of size
    // which user can input
    public Bag(int size) {
        array = new Node[size];
        bagSize = size;
        array[count] = header;
    }

    // Method which a user can add objects
    // to the bag, the count will go up each
    // time the method is called on the object.
    public void add(Node newNode) {
        int numOperations = 0;
        Node n = new Node();
        numOperations++;
        n = newNode;
        numOperations++;
        count++;
        numOperations++;
        array[count] = n;
        numOperations++;
        System.out.println("Operations = " + numOperations);
    }

    /** Remove a random Node from the bag **/
    public void removeRandom() {

    }

    /** Remove a specified Node from the bag **/
    public void remove(Node obj) {
        int numOperations = 0;
        int i;
        numOperations++;
        for (i = 0; i <= array.length - 1; i++) {
            if (array[i] == obj) {
                int pos = i;
                numOperations++;
                for (int j = i; j <= array.length - 1; j++) {
                    array[i] = array[i + 1];
                    numOperations++;
                    if (i + 1 == array.length)
                        break;
                    numOperations++;
                }
                break;
            }
        }

    }

    /** Check is bag is empty **/
    public boolean isEmpty() {
        System.out.println("Operations = 1");
        return (count == 0);
    }

    /** Check if bag contains the Node **/
    public boolean contains(String data) {
        boolean contain = false;
        if (!isEmpty()) {
            for (int i = 0; i <= count; i++) {
                if (data == array[i].data) {
                    return contain = true;
                } else {
                    return contain = false;
                }
            }
        }
        return contain;
    }

    /** Return the size of bag **/
    public int size() {
        return count;
    }

    /** Add all Nodes of bag a to the specified bag **/
    public static void addAll(Bag b, Bag a) {
        int numOperations = 0;
        if (b.bagSize >= a.size() + b.size()) {
            numOperations++;
            for (int i = 0; i <= a.size(); i++) {
                b.add(b.array[i]);
                numOperations++;
            }
        }

    }

    /**
     * Join all elements of the two bags into a new bag but without any
     * overlapping items. i.e No Duplicates
     */
    public static Bag union(Bag a, Bag b) {
        Bag bigger = new Bag(a.size() + b.size());
        if(!a.isEmpty() && !b.isEmpty() && a.equals(b)){
            for(int i=0;i<=bigger.bagSize;i++){
                if(a.contains(a.getData()) && b.contains(b.getData())){
                    bigger.add(b.getNext());    
                }else{
                    bigger.add(a.getNext());
                    bigger.add(b.getNext());
                }
             }
        }
        return b;
    }

    /** Determine if the bags equal each other in items **/
    public boolean equals(Bag a) {
        if(bagSize == a.size()){

        }
        return false;
    }
}

public class Node {
    String data;
    Node prev,next;

    public Node(Node next, Node prev, String data){
        this.next = next;
        this.prev = prev;
        this.data = data;
    }

    public Node(){

    }

    public String getData() {return data;}

    public Node getPrev() { return prev;}

    public Node getNext() {return next;}

    public void setData(String newName) {data = newName;}

    public void setPrev(Node newPrev) { prev = newPrev; }

    public void setNext(Node newNext) { next = newNext;}

}

You don't need a Node class, your Bag is backed by an array, creating a linked list is redundant.

Your contains seems to be on the right track (but not there yet), it should probably be using equals() instead of == . You need to re-check how the contain flag is handled, though.

What's the issue you're having with union? Can you describe how you're trying to implement it (the code isn't entirely clear)?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM