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