Java 中的 Bag 类实现/使用数组

发布于 2025-01-03 06:28:05 字数 4642 浏览 1 评论 0原文

我在理解我的作业时遇到一些困难,我只是想确保我正确地完成了它,并且希望有人关注我的代码。我的作业如下:

使用 Array 作为基本数据结构实现 Bag 类,我已经完成了。在我们的 UML 图表中,我的讲师显示它是一个对象数组,并且对于我应该如何对对象执行此操作以及如何比较它们感到困惑。我创建了一个 Node 类来充当对象,并将其附加到代码末尾。我的主要问题是我不知道要对 Union 和 contains 做什么,因此导致我质疑我的其余代码。

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

}

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

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单调的奢华 2025-01-10 06:28:05

您不需要 Node 类,您的 Bag 由数组支持,创建链表是多余的。

您的 contains 似乎处于正确的轨道上(但还没有),它可能应该使用 equals() 而不是 == 。不过,您需要重新检查 contain 标志的处理方式。

你和工会之间有什么问题吗?您能描述一下您如何尝试实现它(代码并不完全清楚)吗?

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)?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文