/** * @param atom * @return true if atom belongs to this solution */ public boolean contains(Atom atom) { boolean contain = false; SimpleIterator<Atom> it = newIterator(); while (!it.isAtEnd()) { if (it.getElement().equals(atom)) { contain = true; break; } it.next(); } return contain; }
// public class Molecule extends SimpleLinkedList<Atom> { public String toString() { SimpleIterator<Atom> it = newIterator(); String s = ""; while (!it.isAtEnd()) { s = s + it.getElement(); if (it.hasNext()) { s = s + ","; } it.next(); } if (s.length() == 0) { s = ""; // empty molecule } return s; }
public void remove(Atom atom) { SimpleIterator<Atom> it = newIterator(); for (it.moveToBeginning(); !it.isAtEnd() && it.getElement() != atom; it.next()) {} if (!it.isAtEnd()) { it.remove(); } }
/** * Compares two molecules modulo associativity and commutativity, and takes into account * multiplicities * * @param molecule * @return true if this molecule is the same to the molecule given */ public boolean equals(Molecule molecule) { SimpleIterator<Atom> it1 = newIterator(); SimpleIterator<Atom> it2 = molecule.newIterator(); // following array records already checked atoms (because of multiplicities // > 1) boolean[] checked = new boolean[molecule.size()]; for (int i = 0; i < checked.length; i++) { checked[i] = false; } boolean equals; int j; if (size() != molecule.size()) { equals = false; } else { it1.moveToBeginning(); equals = true; while (!it1.isAtEnd() && equals) { it2.moveToBeginning(); j = 0; while (!it2.isAtEnd() && (checked[j] || !it2.getElement().equals(it1.getElement()))) { it2.next(); j++; } if (it2.isAtEnd()) { // it1.getElement() not found in molecule (taking multiplicities into // account) equals = false; } else { checked[j] = true; } it1.next(); } } return equals; }