hi,
mein Junit der vorgegeben ist fällt durch. Hier im Quellcode hab ich in Kommentar meine Lage beschrieben.
Hier die anderen relevanten Klassen:
Was ich nur verstanden hab das meine Queue falsch sortieren würde. 1,0 vor 0,0 setzen.
mein Junit der vorgegeben ist fällt durch. Hier im Quellcode hab ich in Kommentar meine Lage beschrieben.
Java:
@Test
public void testShouldPollHighestPriorityWithComparator() {
Vektor actual[] = { new Vektor(1, 2), new Vektor(1, 1),
new Vektor(2, 2), new Vektor(2, 1), new Vektor(0, 1),
new Vektor(0, 2), new Vektor(0, 1), new Vektor(0, 2),
new Vektor(0, 0) };
MyPriorityQueue<Vektor> mpq = new MyPriorityQueue<Vektor>(
actual.length, new VektorLengthComparator());
for (int i = 0; i < actual.length; i++) {
mpq.offer(actual[i]);
}
try {
// assertEquals fuer vergleich von "double" benoetigt als dritten
// Parameter einen "Unschaerfefaktor" fuer Rundungsfehler bei
// Nachkommastellen
assertEquals(new Vektor(0, 0).length(), mpq.poll().length(), 0.001); // // funktioniert nicht******! expected 0,0 wars 1,0
assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(1, 1).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(2, 1).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(1, 2).length(), mpq.poll().length(), 0.001);// funktioniert
assertEquals(new Vektor(2, 2).length(), mpq.poll().length(), 0.001);// funktioniert
} catch (NoSuchElementException e) {
fail("Iterator does not work!");
}
}
// dieserhier läuft ohne Problemen:
@Test
public void testShouldPollHighestPriorityWithoutComparator() {
Vektor actual[] = { new Vektor(1, 2), new Vektor(1, 1),
new Vektor(2, 2), new Vektor(2, 1), new Vektor(0, 1),
new Vektor(0, 2), new Vektor(0, 1), new Vektor(0, 2),
new Vektor(0, 0) };
MyPriorityQueue<Vektor> mpq = new MyPriorityQueue<Vektor>(
actual.length, null);
for (int i = 0; i < actual.length; i++) {
mpq.add(actual[i]);
}
try {
// assertEquals fuer vergleich von "double" benoetigt als dritten
// Parameter einen "Unschaerfefaktor" fuer Rundungsfehler bei
// Nachkommastellen
assertEquals(new Vektor(0, 0).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(1, 1).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(2, 1).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(1, 2).length(), mpq.poll().length(), 0.001);
assertEquals(new Vektor(2, 2).length(), mpq.poll().length(), 0.001);
} catch (NoSuchElementException e) {
fail("Iterator does not work!");
}
}
Hier die anderen relevanten Klassen:
Java:
public class Vektor implements Comparable<Vektor> {
private int x, y;
public Vektor(int x, int y) {
this.x = x;
this.y = y;
}
public double length() {
return Math.sqrt(x * x + y * y);
}
@Override
public int compareTo(Vektor o) {
if (this.length() < o.length()) {
return -1;
} else if (this.length() > o.length()) {
return 1;
} else {
return 0;
}
}
@Override
public String toString() {
return "Vektor [x=" + x + ", y=" + y + "]";
}
@Override
public boolean equals(Object o){
if(o instanceof Vektor){
Vektor v = (Vektor) o;
return this.x==v.x && this.y==v.y;
}
return false;
}
}
public class VektorLengthComparator implements Comparator<Vektor> {
@Override
public int compare(Vektor o1, Vektor o2) {
if (o1.length() == o2.length()) {
return 0;
}
return o1.length() > o2.length() ? 1 : -1;
}
}
Java:
@Override
public E poll() throws NoSuchElementException {
// first==null
if (first == null) {
throw new NoSuchElementException();
} else {
E temp = first.element;
first = first.next;
size--;
return temp;
}
}
Was ich nur verstanden hab das meine Queue falsch sortieren würde. 1,0 vor 0,0 setzen.