Programm fertiggestellt

This commit is contained in:
Maxim Derksen
2020-12-05 13:29:21 +01:00
parent 6a8532dd89
commit d028ffa46c
11 changed files with 366 additions and 269 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,39 @@
#BlueJ class context
comment0.target=BinarySearchTree
comment0.text=\r\n\ <p>\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\ </p>\r\n\ <p>\r\n\ Generische\ Klasse\ BinarySearchTree<ContentType>\r\n\ </p>\r\n\ <p>\r\n\ Mithilfe\ der\ generischen\ Klasse\ BinarySearchTree\ koennen\ beliebig\ viele\r\n\ Objekte\ in\ einem\ Binaerbaum\ (binaerer\ Suchbaum)\ entsprechend\ einer\r\n\ Ordnungsrelation\ verwaltet\ werden.\ <br\ />\r\n\ Ein\ Objekt\ der\ Klasse\ stellt\ entweder\ einen\ leeren\ binaeren\ Suchbaum\ dar\ oder\r\n\ verwaltet\ ein\ Inhaltsobjekt\ sowie\ einen\ linken\ und\ einen\ rechten\ Teilbaum,\r\n\ die\ ebenfalls\ Objekte\ der\ Klasse\ BinarySearchTree\ sind.<br\ />\r\n\ Die\ Klasse\ der\ Objekte,\ die\ in\ dem\ Suchbaum\ verwaltet\ werden\ sollen,\ muss\r\n\ das\ generische\ Interface\ ComparableContent\ implementieren.\ Dabei\ muss\ durch\r\n\ Ueberschreiben\ der\ drei\ Vergleichsmethoden\ isLess,\ isEqual,\ isGreater\ (s.\r\n\ Dokumentation\ des\ Interfaces)\ eine\ eindeutige\ Ordnungsrelation\ festgelegt\r\n\ sein.\ <br\ />\r\n\ Alle\ Objekte\ im\ linken\ Teilbaum\ sind\ kleiner\ als\ das\ Inhaltsobjekt\ des\r\n\ binaeren\ Suchbaums.\ Alle\ Objekte\ im\ rechten\ Teilbaum\ sind\ groesser\ als\ das\r\n\ Inhaltsobjekt\ des\ binaeren\ Suchbaums.\ Diese\ Bedingung\ gilt\ (rekursiv)\ auch\ in\r\n\ beiden\ Teilbaeumen.\ <br\ />\r\n\ Hinweis\:\ In\ dieser\ Version\ wird\ die\ Klasse\ BinaryTree\ nicht\ benutzt.\r\n\ </p>\r\n\r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Generisch_03\ 2017-11-28\r\n
comment1.params=
comment1.target=BinarySearchTree()
comment1.text=\r\n\ Der\ Konstruktor\ erzeugt\ einen\ leeren\ Suchbaum.\r\n
comment10.params=pContent
comment10.target=ComparableContent\ search(ComparableContent)
comment10.text=\r\n\ Falls\ ein\ bezueglich\ der\ verwendeten\ Vergleichsmethode\ isEqual\ mit\r\n\ pContent\ uebereinstimmendes\ Objekt\ im\ binaeren\ Suchbaum\ enthalten\ ist,\r\n\ liefert\ die\ Anfrage\ dieses,\ ansonsten\ wird\ null\ zurueckgegeben.\ <br\ />\r\n\ Falls\ der\ Parameter\ null\ ist,\ wird\ null\ zurueckgegeben.\r\n\r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ zu\ suchendes\ Objekt\ vom\ Typ\ ContentType\r\n\ @return\ das\ gefundene\ Objekt\ vom\ Typ\ ContentType,\ bei\ erfolgloser\ Suche\ null\r\n\r\n
comment11.params=
comment11.target=BinarySearchTree\ ancestorOfSmallRight()
comment11.text=\r\n\ Die\ Methode\ liefert\ denjenigen\ Baum,\ dessen\ linker\ Nachfolger\ keinen\ linken\r\n\ Nachfolger\ mehr\ hat.\ Es\ ist\ also\ spaeter\ moeglich,\ in\ einem\ Baum\ im\r\n\ rechten\ Nachfolger\ den\ Vorgaenger\ des\ linkesten\ Nachfolgers\ zu\ finden.\r\n\r\n
comment12.params=
comment12.target=BinarySearchTree.BSTNode\ getNodeOfLeftSuccessor()
comment13.params=
comment13.target=BinarySearchTree.BSTNode\ getNodeOfRightSuccessor()
comment2.params=
comment2.target=boolean\ isEmpty()
comment2.text=\r\n\ Diese\ Anfrage\ liefert\ den\ Wahrheitswert\ true,\ wenn\ der\ Suchbaum\ leer\ ist,\r\n\ sonst\ liefert\ sie\ den\ Wert\ false.\r\n\r\n\ @return\ true,\ wenn\ der\ binaere\ Suchbaum\ leer\ ist,\ sonst\ false\r\n\r\n
comment3.params=pContent
comment3.target=void\ insert(ComparableContent)
comment3.text=\r\n\ Falls\ der\ Parameter\ null\ ist,\ geschieht\ nichts.<br\ />\r\n\ Falls\ ein\ bezueglich\ der\ verwendeten\ Vergleichsmethode\ isEqual\ mit\r\n\ pContent\ uebereinstimmendes\ Objekt\ im\ geordneten\ binaeren\ Suchbau\r\n\ enthalten\ ist,\ passiert\ nichts.\ <br\ />\r\n\ Achtung\:\ hier\ wird\ davon\ ausgegangen,\ dass\ isEqual\ genau\ dann\ true\r\n\ liefert,\ wenn\ isLess\ und\ isGreater\ false\ liefern.\ <br\ />\r\n\ Andernfalls\ (isLess\ oder\ isGreater)\ wird\ das\ Objekt\ pContent\ entsprechend\r\n\ der\ vorgegebenen\ Ordnungsrelation\ in\ den\ BinarySearchTree\ eingeordnet.\r\n\r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ einzufuegendes\ Objekt\ vom\ Typ\ ContentType\r\n\r\n
comment4.params=
comment4.target=BinarySearchTree\ getLeftTree()
comment4.text=\r\n\ Diese\ Anfrage\ liefert\ den\ linken\ Teilbaum\ des\ binaeren\ Suchbaumes.\ <br\ />\r\n\ Wenn\ er\ leer\ ist,\ wird\ null\ zurueckgegeben.\r\n\r\n\ @return\ den\ linken\ Teilbaum\ (Objekt\ vom\ Typ\ BinarySearchTree<ContentType>)\r\n\ \ \ \ \ \ \ \ \ bzw.\ null,\ wenn\ der\ Suchbaum\ leer\ ist\r\n\r\n
comment5.params=
comment5.target=ComparableContent\ getContent()
comment5.text=\r\n\ Diese\ Anfrage\ liefert\ das\ Inhaltsobjekt\ des\ Suchbaumes.\ Wenn\ der\ Suchbaum\r\n\ leer\ ist,\ wird\ null\ zurueckgegeben.\r\n\r\n\ @return\ das\ Inhaltsobjekt\ vom\ Typ\ ContentType\ bzw.\ null,\ wenn\ der\ aktuelle\r\n\ \ \ \ \ \ \ \ \ Suchbaum\ leer\ ist\r\n\r\n
comment6.params=
comment6.target=List\ getInOrder()
comment7.params=tree\ inOrder
comment7.target=void\ getPartTree(BinarySearchTree,\ List)
comment8.params=
comment8.target=BinarySearchTree\ getRightTree()
comment8.text=\r\n\ Diese\ Anfrage\ liefert\ den\ rechten\ Teilbaum\ des\ binaeren\ Suchbaumes.\ <br\ />\r\n\ Wenn\ er\ leer\ ist,\ wird\ null\ zurueckgegeben.\r\n\r\n\ @return\ den\ rechten\ Teilbaum\ (Objekt\ vom\ Typ\ BinarySearchTree<ContentType>)\r\n\ \ \ \ \ \ \ \ \ bzw.\ null,\ wenn\ der\ aktuelle\ Suchbaum\ leer\ ist\r\n\r\n
comment9.params=pContent
comment9.target=void\ remove(ComparableContent)
comment9.text=\r\n\ Falls\ ein\ bezueglich\ der\ verwendeten\ Vergleichsmethode\ mit\r\n\ pContent\ uebereinstimmendes\ Objekt\ im\ binaeren\ Suchbaum\ enthalten\r\n\ ist,\ wird\ dieses\ entfernt.\ Falls\ der\ Parameter\ null\ ist,\ aendert\ sich\r\n\ nichts.\r\n\r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ zu\ entfernendes\ Objekt\ vom\ Typ\ ContentType\r\n\r\n
numComments=14

View File

@@ -132,6 +132,20 @@ public class BinarySearchTree<ContentType extends ComparableContent<ContentType>
} }
} }
public List<ContentType> getInOrder() {
List<ContentType> inOrder = new List<>();
getPartTree(this, inOrder);
return inOrder;
}
private void getPartTree(BinarySearchTree<ContentType> tree, List<ContentType> inOrder) {
if (tree != null && tree.getContent() != null) {
getPartTree(tree.getLeftTree(), inOrder);
inOrder.append(tree.getContent());
getPartTree(tree.getRightTree(), inOrder);
}
}
/** /**
* Diese Anfrage liefert den rechten Teilbaum des binaeren Suchbaumes. <br /> * Diese Anfrage liefert den rechten Teilbaum des binaeren Suchbaumes. <br />
* Wenn er leer ist, wird null zurueckgegeben. * Wenn er leer ist, wird null zurueckgegeben.

Binary file not shown.

View File

@@ -8,4 +8,6 @@ comment2.params=pName
comment2.target=void\ newRunner(java.lang.String) comment2.target=void\ newRunner(java.lang.String)
comment3.params= comment3.params=
comment3.target=void\ simulate() comment3.target=void\ simulate()
numComments=4 comment4.params=
comment4.target=Athlete[]\ top3()
numComments=5

View File

@@ -8,12 +8,16 @@
public class Competition { public class Competition {
private List<Athlete> runners; private List<Athlete> runners;
private Racesimulator sim;
private BinarySearchTree leaderboard;
/** /**
* Konstruktor für Objekte der Klasse Competition * Konstruktor für Objekte der Klasse Competition
*/ */
public Competition() { public Competition() {
// ggf. Instanzvariable initialisieren runners = new List<Athlete>();
sim = new Racesimulator();
leaderboard = new BinarySearchTree();
} }
public void newRunner(String pName){ public void newRunner(String pName){
@@ -23,10 +27,40 @@ public class Competition {
} }
public void simulate(){ public void simulate(){
runners.toFirst();
while(runners.hasAccess()){
Athlete athlete = runners.getContent();
sim.simulate(athlete);
leaderboard.insert(athlete);
runners.next();
}
} }
// public Athlete top3(){ public Athlete[] top3(){
Athlete[] top = new Athlete[3];
// } List<Athlete> inOrder = leaderboard.getInOrder();
inOrder.toFirst();
top[0] = inOrder.getContent();
inOrder.next();
if (!inOrder.hasAccess()){
return top;
} }
top[1] = inOrder.getContent();
inOrder.next();
if (!inOrder.hasAccess()){
return top;
}
top[2] = inOrder.getContent();
inOrder.next();
System.out.println(top[0].getFinalTime());
System.out.println(top[1].getFinalTime());
System.out.println(top[2].getFinalTime());
return top;
}
}

View File

@@ -4,4 +4,6 @@ comment0.text=\r\n\ Beschreiben\ Sie\ hier\ die\ Klasse\ Racesimulator.\r\n\ \r\
comment1.params= comment1.params=
comment1.target=Racesimulator() comment1.target=Racesimulator()
comment1.text=\r\n\ Konstruktor\ f\u00FCr\ Objekte\ der\ Klasse\ Racesimulator\r\n comment1.text=\r\n\ Konstruktor\ f\u00FCr\ Objekte\ der\ Klasse\ Racesimulator\r\n
numComments=2 comment2.params=pAthlete
comment2.target=Athlete\ simulate(Athlete)
numComments=3

View File

@@ -1,5 +1,5 @@
import java.util.Random;
/** /**
* Beschreiben Sie hier die Klasse Racesimulator. * Beschreiben Sie hier die Klasse Racesimulator.
* *
@@ -8,8 +8,7 @@
*/ */
public class Racesimulator { public class Racesimulator {
// Attribute private Random random = new Random();
// Implementieren sie hier die Attribute der Klasse
/** /**
* Konstruktor für Objekte der Klasse Racesimulator * Konstruktor für Objekte der Klasse Racesimulator
@@ -18,8 +17,10 @@ public class Racesimulator {
// ggf. Instanzvariable initialisieren // ggf. Instanzvariable initialisieren
} }
// public Athlete simulate(Athlete pAthlete){ public Athlete simulate(Athlete pAthlete){
// Random pAthlete.setStartTime(0);
// } pAthlete.setEndTime(random.nextDouble());
return pAthlete;
}
} }

View File

@@ -2,28 +2,40 @@
dependency1.from=BinarySearchTree dependency1.from=BinarySearchTree
dependency1.to=ComparableContent dependency1.to=ComparableContent
dependency1.type=UsesDependency dependency1.type=UsesDependency
dependency2.from=Competition dependency2.from=BinarySearchTree
dependency2.to=List dependency2.to=List
dependency2.type=UsesDependency dependency2.type=UsesDependency
dependency3.from=Competition dependency3.from=Racesimulator
dependency3.to=Athlete dependency3.to=Athlete
dependency3.type=UsesDependency dependency3.type=UsesDependency
editor.fx.0.height=738 dependency4.from=Competition
editor.fx.0.width=816 dependency4.to=List
editor.fx.0.x=232 dependency4.type=UsesDependency
editor.fx.0.y=82 dependency5.from=Competition
objectbench.height=138 dependency5.to=Athlete
dependency5.type=UsesDependency
dependency6.from=Competition
dependency6.to=Racesimulator
dependency6.type=UsesDependency
dependency7.from=Competition
dependency7.to=BinarySearchTree
dependency7.type=UsesDependency
editor.fx.0.height=1416
editor.fx.0.width=2576
editor.fx.0.x=-8
editor.fx.0.y=-8
objectbench.height=204
objectbench.width=1256 objectbench.width=1256
package.divider.horizontal=0.6 package.divider.horizontal=0.6
package.divider.vertical=0.8390677025527192 package.divider.vertical=0.7655555555555555
package.editor.height=749 package.editor.height=682
package.editor.width=1132 package.editor.width=1145
package.editor.x=0 package.editor.x=773
package.editor.y=0 package.editor.y=30
package.frame.height=1000 package.frame.height=1000
package.frame.width=1296 package.frame.width=1296
package.numDependencies=3 package.numDependencies=7
package.numTargets=7 package.numTargets=6
package.showExtends=true package.showExtends=true
package.showUses=true package.showUses=true
project.charset=UTF-8 project.charset=UTF-8
@@ -37,47 +49,40 @@ target1.name=Competition
target1.showInterface=false target1.showInterface=false
target1.type=ClassTarget target1.type=ClassTarget
target1.width=100 target1.width=100
target1.x=540 target1.x=100
target1.y=320 target1.y=490
target2.height=50 target2.height=50
target2.name=List$ListNode target2.name=List
target2.showInterface=false target2.showInterface=false
target2.type=SubTargetClassRole target2.type=ClassTarget
target2.width=200 target2.width=150
target2.x=250 target2.x=900
target2.y=210 target2.y=170
target3.height=50 target3.height=50
target3.name=List target3.name=Racesimulator
target3.showInterface=false target3.showInterface=false
target3.type=ClassTarget target3.type=ClassTarget
target3.width=150 target3.width=110
target3.x=60 target3.x=290
target3.y=210 target3.y=390
target4.height=50 target4.height=50
target4.name=Racesimulator target4.name=ComparableContent
target4.showInterface=false target4.showInterface=false
target4.type=ClassTarget target4.type=InterfaceTarget
target4.width=110 target4.width=250
target4.x=540 target4.x=80
target4.y=200 target4.y=30
target5.height=50 target5.height=110
target5.name=ComparableContent target5.name=Athlete
target5.showInterface=false target5.showInterface=false
target5.type=InterfaceTarget target5.type=ClassTarget
target5.width=250 target5.width=250
target5.x=760 target5.x=610
target5.y=110 target5.y=260
target6.height=110 target6.height=50
target6.name=Athlete target6.name=BinarySearchTree
target6.showInterface=false target6.showInterface=false
target6.type=ClassTarget target6.type=ClassTarget
target6.width=250 target6.width=230
target6.x=760 target6.x=740
target6.y=340 target6.y=80
target7.height=50
target7.name=BinarySearchTree
target7.showInterface=false
target7.type=ClassTarget
target7.width=230
target7.x=70
target7.y=10