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

我在理解我的任务时遇到了一些困难,我只是想确保我正确地做到这一点,并且想要对我的代码有另一双关注。 我的任务如下:

使用Array作为基础数据结构实现Bag类,我已经完成了。 在我们的UML图中,我的讲师显示它是一个对象数组,并且我对如何使用对象以及如何比较它们感到困惑。 我创建了一个Node类作为对象,并将其附加到代码的末尾。 我的主要问题是我不知道该怎么办联盟和包含,因此导致我质疑我的其余代码。

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 = 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. ie 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;} } 

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

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

你和工会有什么问题? 你能描述一下你是如何实现它的(代码还不完全清楚)吗?