Interval Teilmenge bestimmen - Fehler in meiner Lösung

m1k3ch3ck

Mitglied
Hallo,

in der Aufgabe gibt es mehrere Methoden auszudefinieren.
Hab alle wunderbar hinbekommen bis auf eine. Die Lösung ist zwar um Welten kürzer als meine Lösung, vom Grundgedanken her jedoch identisch. Finde den Fehler leider nicht.


Man hat ein Interval bestehend aus einer Comparable lowerBound (Untergrenze) und einer Comparable upperBound (Obergrenze.
Ziel der Methode ist es das this Intervall mit einem anderen zu vergleichen und als Rückgabe die Schnittmenge rauszugeben.


Hier die Musterlösung:
Java:
	private static Comparable min(Comparable x, Comparable y) {
		return x.compareTo(y) <= 0 ? x : y;
	}

	private static Comparable max(Comparable x, Comparable y) {
		return x.compareTo(y) > 0 ? x : y;
	}
....






/**
	 * @return Durchschnitt von this und iv.
	 */
	public Interval intersection(Interval iv) {
		return new Interval(
			max(lowerBound, iv.lowerBound),
			min(upperBound, iv.upperBound));
	}

... und nun hier meine (nicht funktionierende) Lösung:
Java:
private static Comparable min(Comparable x, Comparable y) {
		if(x.compareTo(y)<0)
			return x;
		else return y;
		}

	private static Comparable max(Comparable x, Comparable y) {
		// TODO
		if(x.compareTo(y)<0)
			return y;
		else return x;
	}



.......



/**
	 * @return Durchschnitt von this und iv.
	 */
	public Interval intersection(Interval iv) {
		if (! this.contains(iv)){
			return new Interval(null, null);
		}
		else{
			Comparable highestlowerbound;
			Comparable lowestupperbound;
			
			if(this.lowerBound.compareTo(iv.lowerBound) >=1)
				highestlowerbound = this.lowerBound;
			else highestlowerbound = iv.lowerBound;
			
			if (this.upperBound.compareTo(iv.upperBound) <=1)
				lowestupperbound = this.upperBound;
			else lowestupperbound = iv.upperBound;
		
		return new Interval(highestlowerbound,lowestupperbound
		// TODO
		
		);
	}
	}


Wäre cool falls jm den Fehler findet.
Vielen Dank,

Julia.
 

ramon98

Mitglied
1) Ändere mal deine Bedingungen in den if-Anweisungen:

">=1" in ">=0"
"<=1" in "<=0"

Besonders der "<=1" wird (fast) immer erfüllt sein. siehe auch die Javadoc-Beschreibung des Return-Werts der Methode Comparable.compareTo(). Dort wird nur verlangt, das der Wert größer 0 sein soll; die meisten Implementierungen geben dann eine "1" zurück und dein Check auf "<=1" ist dann für alle drei Fälle "-1" , "0" und "1" immer true.

2) Die erste if-Bedingung mit dem contains() kannst du weglassen.
 
Zuletzt bearbeitet:

m1k3ch3ck

Mitglied
Wenn ich alles mache was du geschrieben hast, dann kommt nurnoch 1 Fail.
(Wenn ich die if-contain Bedingung mit drinen lasse, dann sogar 1 Error.)

Failure Trace (ohne if-contain):

Java:
junit.framework.AssertionFailedError: expected:<ro.inf.p2.uebung7.Interval@24> but was:<p2.uebung7.Interval@0>
	at junit.framework.Assert.fail(Assert.java:47)
	at junit.framework.Assert.failNotEquals(Assert.java:282)
	at junit.framework.Assert.assertEquals(Assert.java:64)
	at junit.framework.Assert.assertEquals(Assert.java:71)
	at ro.inf.p2.uebung7.TestInterval.testIntIntervalIntersection(TestInterval.java:45)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
 

ramon98

Mitglied
Mit der Info kann ich dir nicht helfen...

Für welche Testdaten geht es denn nicht? Da du auch nicht den Code der contains()-Methode gepostet hast, kann man sowieso nicht erkennen, ob dort noch ein Fehler vorhanden ist; mir schien der Aufruf des contains() daher unnütz.

Anhand deiner Testdaten sollte doch erkennbar sein, welche Fälle (noch) nicht gehen (Überschneidende Intervalle, Disjunkte Intervalle, komplett enthaltende Intervalle,...).

BTW: Mit welcher Entwicklungsumgebung arbeitest du ?
 

m1k3ch3ck

Mitglied
Eclipse.
Ich kann mit dem Auswurf des Tests leider nichts anfangen, außer dass der (bereitgestellte) Testtreiber sagt das 4 meiner 5 geschriebenen Methoden funktionieren, und zu diesen zählt eben contains.
Hier mal der gesamte Code, evtl hilft das weiter.

Java:
/**
 * Klasse für Intervalle definiert durch eine untere und obere Grenze.
 * <p>
 * Die Grenzen müssen das Interface Comparable implementieren.
 * Eine Überprüfung ob die untere Grenze kleiner als die obere
 * Grenze ist findet nicht statt
 */
public class Interval {
	private Comparable lowerBound;
	private Comparable upperBound;

	private static final Integer ZERO = new Integer(0);
	public static final Interval EMPTY = new Interval(ZERO, ZERO);

	private static Comparable min(Comparable x, Comparable y) {
		if(x.compareTo(y)<0)
			return x;
		else return y;
		}

	private static Comparable max(Comparable x, Comparable y) {
		// TODO
		if(x.compareTo(y)<0)
			return y;
		else return x;
	}

	/**
	 *
	 * @param lowerBound    untere Grenze des Intervalls
	 * @param upperBound    obere Grenze des Intervalls
	 */
	public Interval(Comparable lowerBound, Comparable upperBound) {
		// TODO
		this.lowerBound=lowerBound;
		this.upperBound=upperBound;
	}

	/**
	 *
	 * @param x  zu vergleichendes Intervall
	 * @return   true falls Intervallgrenzen identisch sind
	 */
	public boolean equals(Object x) {
		if (!(x instanceof Interval))
			return false;
		// TODO
		Interval vgl = (Interval) x;
		if (this.lowerBound==vgl.lowerBound && this.upperBound==vgl.upperBound)
			return true;
		else return false;

	}

	/**
	 * @return true, falls lowerBound <= x < upperBound
	 */
	public boolean contains(Comparable x)
	{
		// TODO
		if (this.lowerBound.compareTo(x) <=0 && this.upperBound.compareTo(x) >= 1)
		return true;
		else return false;
	}

	/**
     * @param v das andere Intervall
     * @return true, wenn this das andere Intervall enthält
     */
	public boolean contains(Interval v)
	{
		// TODO
		if (this.lowerBound.compareTo(v.lowerBound) <=0 && this.upperBound.compareTo(v.upperBound) >=0)
				return true;
		else return false;
	}

	/**
	 * @return Durchschnitt von this und iv.
	 */
	/**
	 * @return Durchschnitt von this und iv.
	 */
	

	
	  public Interval intersection(Interval iv) {
			/*if (! this.contains(iv)){
				return new Interval(null, null);
			}
			else{*/
				Comparable highestlowerbound;
				Comparable lowestupperbound;
				
				if(this.lowerBound.compareTo(iv.lowerBound) >=0)
					highestlowerbound = this.lowerBound;
				else highestlowerbound = iv.lowerBound;
				
				if (this.upperBound.compareTo(iv.upperBound) <=0)
					lowestupperbound = this.upperBound;
				else lowestupperbound = iv.upperBound;
			
			return new Interval(highestlowerbound,lowestupperbound
			// TODO
			
			);
		//}
		}
	
	
	/**
	 * @return true, falls lowerbound >= upperbound
	 */
	public boolean isEmpty() {
		// TODO
		if (this.lowerBound.compareTo(this.upperBound)>=0)
			return true;
		else return false;
	}

	/**
	 *
	 * @return eindeutiger Hash-Wert vom Intervall
	 */
	public int hashCode() {
		// TODO
		return (this.lowerBound.hashCode()*this.upperBound.hashCode());
	}
}
 

ramon98

Mitglied
Wegen dem Einwurf mit der Entwicklungsumgebung: Wenn du Eclipse verwendest, dann ist es doch ein leichtes, die Testfälle zu debuggen. Setze einfach einen Breakpoint in deine Methode und schau dir an, ob dein Programm anhand der Daten das "Richtige" macht.

Ohne zu wissen wie man "debuggt", sollte man nicht entwickeln ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
rosima26 Java SubSum bestimmen Java Basics - Anfänger-Themen 76
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
C Boolesche Formel, Belegungen bestimmen Java Basics - Anfänger-Themen 8
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
L Partitionierungsgruppen bestimmen Java Basics - Anfänger-Themen 22
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
H Minimum in einem Array bestimmen Java Basics - Anfänger-Themen 7
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
M Array Summe bestimmen? Java Basics - Anfänger-Themen 14
N Bereich Zufallszahl bestimmen (50 und 100 / 80 und 90) Java Basics - Anfänger-Themen 2
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
L Anzahl der Aufrufe von Schleifen bestimmen Java Basics - Anfänger-Themen 1
F Summe in einem Array bestimmen Java Basics - Anfänger-Themen 3
H Ersten Zug bestimmen Java Basics - Anfänger-Themen 12
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
C Kleinsten Kreis einer Punktmenge bestimmen Java Basics - Anfänger-Themen 4
CptK Methoden Koordinaten relativ zur Rotation eines Bildes bestimmen Java Basics - Anfänger-Themen 8
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
E Maximalwert im Array bestimmen Java Basics - Anfänger-Themen 8
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
Y Rekursionsgleichung bestimmen Java Basics - Anfänger-Themen 3
Y Teile und Herrsche, längstes absteigendes Teilarray bestimmen Java Basics - Anfänger-Themen 12
T Min und Max einer Zahlenfolge bestimmen Java Basics - Anfänger-Themen 7
V Klassen Bestimmen Sie die erste und letzte Position an der ein 'c' steht? Java Basics - Anfänger-Themen 3
M Bestimmen, wie oft ein Char in einem Array vorkommt Java Basics - Anfänger-Themen 2
P Rückgabewert bestimmen Java Basics - Anfänger-Themen 17
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
T Anzahl bestimmter Werte eines arrays bestimmen Java Basics - Anfänger-Themen 4
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
E Summe der "Nachbarn" eines Wertes in einem Array bestimmen Java Basics - Anfänger-Themen 8
H Quotient durch Subtraktion bestimmen Java Basics - Anfänger-Themen 12
1 Größe einer zirkulären Liste bestimmen .. ? Java Basics - Anfänger-Themen 2
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
D Wochentag für eingegebenes Datum bestimmen anhand von Formel Java Basics - Anfänger-Themen 2
C Werteraum für Variable bestimmen Java Basics - Anfänger-Themen 5
S Vererbung exaktes "Objekt" der Unterklasse bestimmen Java Basics - Anfänger-Themen 5
Screen Wie geringste Absolutdifferenz zum Median bestimmen? Java Basics - Anfänger-Themen 8
V Aufrufendes Objekt bestimmen (nicht die Klasse) Java Basics - Anfänger-Themen 3
J Note bestimmen Java Basics - Anfänger-Themen 13
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
T Minimumsnorm bestimmen Java Basics - Anfänger-Themen 19
T String - kleinstes Zeichen bestimmen Java Basics - Anfänger-Themen 3
M bestimmen zu welchem Array ein Objekt "zugehört" Java Basics - Anfänger-Themen 5
L Koordinaten bestimmen Java Basics - Anfänger-Themen 8
S Zeit bestimmen Java Basics - Anfänger-Themen 4
H Anzahl Ziffer in Zahl bestimmen Java Basics - Anfänger-Themen 3
S Kleinster Wert im Array bestimmen Java Basics - Anfänger-Themen 4
J Klickposition genau bestimmen Java Basics - Anfänger-Themen 12
J Bestimmen ob String aus Kleinbuchstaben besteht Java Basics - Anfänger-Themen 16
N aktuelle Datum Mikrosekunden genau bestimmen Java Basics - Anfänger-Themen 8
G zweitgrößter Wert in array bestimmen Java Basics - Anfänger-Themen 4
L Farbe unter Cursor bestimmen Java Basics - Anfänger-Themen 5
T Variable aus dem Web Netz Internet URL bestimmen Java Basics - Anfänger-Themen 13
B Anzahl der Werte bestimmen Java Basics - Anfänger-Themen 14
F komplexität bestimmen Java Basics - Anfänger-Themen 10
X Anzahl Baumknoten bestimmen Java Basics - Anfänger-Themen 5
J Mouseposition bestimmen Java Basics - Anfänger-Themen 5
F Meßwertfolge bestimmen Java Basics - Anfänger-Themen 10
J Arraylänge mittels "Array.getLength" bestimmen!? Java Basics - Anfänger-Themen 3
B JMenu Position bestimmen Java Basics - Anfänger-Themen 7
H Javacode erklären: Mittelpunkt bestimmen Java Basics - Anfänger-Themen 4
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
A Anzahl Zeilen eines Arrays bestimmen Java Basics - Anfänger-Themen 10
Q Zeichnen - wie von außen bestimmen, was gezeichnet werden soll? Java Basics - Anfänger-Themen 26
J Classpath bestimmen, unter Windows 7 Java Basics - Anfänger-Themen 2
S Variable über den Vektor bestimmen Java Basics - Anfänger-Themen 20
A OOP Programm zum bestimmen von Primzahlen, OutofBoundsException Java Basics - Anfänger-Themen 10
B Anzahl von gerundeten Punkten bestimmen Java Basics - Anfänger-Themen 9
C Polygon um Figur bestimmen Java Basics - Anfänger-Themen 10
L Zeilenanzahl bestimmen? Java Basics - Anfänger-Themen 7
M Sha256-Wert eines Files bestimmen Java Basics - Anfänger-Themen 13
T aus Integer Array Maximum bestimmen Java Basics - Anfänger-Themen 7
M Nachbar von Knoten bestimmen Java Basics - Anfänger-Themen 8
J 2Dimensionales Array, Größe durch Eingabe bestimmen Java Basics - Anfänger-Themen 9
C Position eines Fensters bestimmen Java Basics - Anfänger-Themen 3
Y Vor- und Nachkommawerte eines doubles bestimmen Java Basics - Anfänger-Themen 7
W Variablenzuweisung über Wert bestimmen Java Basics - Anfänger-Themen 2
G die Größe eines Button bestimmen ? Java Basics - Anfänger-Themen 4
6 Wie das angeklickte Objekt bestimmen? Java Basics - Anfänger-Themen 4
philipp Instanznamen mit einem String bestimmen. Java Basics - Anfänger-Themen 11
P Abstand vom Rahmen zu Komponenten bestimmen? Java Basics - Anfänger-Themen 3
kulturfenster User soll Radius von Kugel bestimmen Java Basics - Anfänger-Themen 4
W Letzten beiden Ziffern eines BigIntegers bestimmen? Java Basics - Anfänger-Themen 20
G Dateigröße bestimmen Java Basics - Anfänger-Themen 2
B Länge eines Char-Arrays bestimmen Java Basics - Anfänger-Themen 7
S Anzahl von zeilen einer Datei bestimmen. Java Basics - Anfänger-Themen 4
B Position einer Ziffer im String bestimmen Java Basics - Anfänger-Themen 4
X Klasse eines Objektes bestimmen Java Basics - Anfänger-Themen 2
G Objektname über Eingabe bestimmen Java Basics - Anfänger-Themen 4
0 Häufigste(n) Zahl(en) in zweidimensionalem Array bestimmen ? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben