Subtrees hinzugefügt
This commit is contained in:
parent
1cc6192581
commit
7baadffbea
17 changed files with 1316 additions and 0 deletions
6
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/.gitignore
vendored
Normal file
6
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
*.sh
|
||||
*.class
|
||||
*.ctxt
|
||||
repo.adoc
|
||||
repo_subtree.adoc
|
||||
/alt
|
||||
6
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/01_Filmsammlung_Roh/.gitignore
vendored
Normal file
6
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/01_Filmsammlung_Roh/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
*.sh
|
||||
*.class
|
||||
*.ctxt
|
||||
repo.adoc
|
||||
repo_subtree.adoc
|
||||
/alt
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
import java.util.*;
|
||||
import java.time.*;
|
||||
|
||||
/**
|
||||
* Verschiedene Aufgaben, die statisch direkt aus BlueJ heraus aufgerufen werden.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Aufgabe
|
||||
{
|
||||
|
||||
/**
|
||||
* Aufgabe.a1
|
||||
* Schreibe eine Methode, die für das erste Element einer gegebene Filmsammlung (von Serien) die Bewertung auf 5.0 setzt
|
||||
* und
|
||||
* den Titel und die Anzahl der vorhandenen Episoden auf der Konsole ausgibt.
|
||||
*
|
||||
* Hinweise: - Betrachte die Dokumentation der Klasse Filmsammlung. Mit welcher Methode kannst du auf die Elemente der Sammlung zugreifen?
|
||||
* - Prüfe an welcher Stelle eine Typkonvertierung nötig ist.
|
||||
*
|
||||
* Teste deine Methode mit der Filmsammlung s und kf (Basis - Objektzustand wiederherstellen)
|
||||
*
|
||||
* @param fs Eine Filmsammlung
|
||||
*/
|
||||
public static void a1(Filmsammlung fs)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a2
|
||||
* Schreibe eine Methode, die für das zweite Element einer gegebene Filmsammlung (von Serien) die Bewertung auf 5.0 setzt
|
||||
* und
|
||||
* den Titel und die Anzahl der vorhandenen Episoden auf der Konsole ausgibt.
|
||||
*
|
||||
* Teste deine Methode mit der Filmsammlung s und kf (Basis - Objektzustand wiederherstellen)
|
||||
*
|
||||
* @param fsG Eine Seriensammlung
|
||||
*/
|
||||
public static void a2(FilmsammlungGeneric<Serie> fsG)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a3
|
||||
* Erstelle verschieden Filmsammlungen und teste deren Methoden.
|
||||
* Um einzelne Filme zu erhalten kannst die Methoden Daten.randomFilm(), Daten.randomKinofilm(), Daten.randomSerie() und Daten.randomEpisode() verwenden.
|
||||
*
|
||||
* - Welche konkreten Typparameter sind erlaubt, welche nicht?
|
||||
* - Finde Beispiele für die es zu Compilierungs/Laufzeitfehlern kommen kann.
|
||||
*/
|
||||
public static void a3()
|
||||
{
|
||||
//Beispiel
|
||||
FilmsammlungGeneric<SerienEpisode> sammlung1 = new FilmsammlungGeneric<>( new SerienEpisode[]{Daten.randomEpisode(), Daten.randomEpisode() });
|
||||
System.out.println(sammlung1.get(0).getTitel());
|
||||
|
||||
//Weitere Beispiele
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a4
|
||||
* Die gegebene Methode soll die Titel aller Filme in einer Filmsammlung ausgeben.
|
||||
* Teste die gegebene Methode mit den Basisdaten sG und kfG.
|
||||
*
|
||||
* - Notiere dir den Laufzeitfehler den du erhälst.
|
||||
* - Ändere die Methode so ab, dass es mit sG bzw. kfG funktioniert. Gibt es eine allgemeine Lösung?
|
||||
* @param fsG Eine Filmsammlung
|
||||
*/
|
||||
public static void a4(FilmsammlungGeneric<Film> fsG)
|
||||
{
|
||||
Iterator<Film> iter = fsG.iterator();
|
||||
|
||||
while( iter.hasNext() ){
|
||||
System.out.print( iter.next().getTitel() +", ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a5
|
||||
* Die gegebene Methode soll die Titel aller Filme in einer Filmsammlung von Kinofilmen ausgeben.
|
||||
* Implementiere die Methode mit der erweiterten for-Schleife
|
||||
* Teste mit den Basisdaten kfG.
|
||||
*
|
||||
* @param fsG Eine Filmsammlung
|
||||
*/
|
||||
public static void a5(FilmsammlungGeneric<Kinofilm> fsG)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a6
|
||||
* Finde für jede gegebene Reihung jeweils das Minimum.
|
||||
* Schreibe dafür je eine private statische Methode und rufe diese auf.
|
||||
* Gib das Ergebnis auf der Konsole aus.
|
||||
*
|
||||
*/
|
||||
public static void a6()
|
||||
{
|
||||
//Gegebene Reihungen
|
||||
Integer[] rInt = {5, 90, 4, 1, -70, 400, 30};
|
||||
String[] rString = {"Bär","Affe","Nilpferd","Zebra"};
|
||||
Float[] rFloat = {3.4f, 9.78f,.01f};
|
||||
|
||||
//Aufruf
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Ausgangsbasis für Operationen in der Direkteigabe.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Basis
|
||||
{
|
||||
Filmsammlung f;
|
||||
Filmsammlung kf;
|
||||
Filmsammlung s;
|
||||
FilmsammlungGeneric<Kinofilm> kfG;
|
||||
FilmsammlungGeneric<Serie> sG;
|
||||
|
||||
/**
|
||||
* Konstruktor fuer die Test-Klasse ProjektTest
|
||||
*/
|
||||
public Basis()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Setzt das Testgerüst fuer den Test.
|
||||
*
|
||||
* Wird vor jeder Testfall-Methode aufgerufen.
|
||||
*/
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
kf = new Filmsammlung( Daten.kinofilme().values() );
|
||||
s = new Filmsammlung( Daten.serien().values() );
|
||||
kfG = new FilmsammlungGeneric<Kinofilm>( Daten.kinofilme().values() );
|
||||
sG = new FilmsammlungGeneric<Serie>( Daten.serien().values() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt das Testgerüst wieder frei.
|
||||
*
|
||||
* Wird nach jeder Testfall-Methode aufgerufen.
|
||||
*/
|
||||
@After
|
||||
public void tearDown()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
import java.util.*;
|
||||
import java.time.*;
|
||||
|
||||
/**
|
||||
* Stellt statische Methoden zur Verfügung, welche Testdaten zur Nutzung im Projekt bereitstellen.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Daten
|
||||
{
|
||||
static HashMap<String,Kinofilm> kinofilme()
|
||||
{
|
||||
HashMap<String, Kinofilm> filme = new HashMap<>();
|
||||
|
||||
filme.put("f1", new Kinofilm( "The Terminator", Year.of(1984), "Sci-Fi", 107, 16, 8.0 ));
|
||||
filme.put("f2", new Kinofilm( "Terminator 2", Year.of(1991), "Sci-Fi", 137, 16, 8.5 ));
|
||||
filme.put("f3", new Kinofilm( "Terminator 3", Year.of(2003), "Sci-Fi", 109, 16, 6.3 ));
|
||||
filme.put("f4", new Kinofilm( "Terminator Salvation", Year.of(2009), "Sci-Fi", 115, 16, 6.5 ));
|
||||
filme.put("f5", new Kinofilm( "Terminator Genisys", Year.of(2015), "Sci-Fi", 126, 12, 6.3 ));
|
||||
filme.put("f6", new Kinofilm( "Terminator: Dark Fate", Year.of(2019), "Sci-Fi", 128, 16, 6.2 ));
|
||||
filme.put("f7", new Kinofilm( "Forest Gump", Year.of(2019), "Satire", 142, 12, 8.2));
|
||||
filme.put("f8", new Kinofilm( "Die Känguru-Chroniken", Year.of(2020), "Komödie", 92, 0, 5.4 ));
|
||||
|
||||
return filme;
|
||||
}
|
||||
|
||||
static HashMap<String,Serie> serien()
|
||||
{
|
||||
HashMap<String, Serie> filme = new HashMap<>();
|
||||
Serie s1 = new Serie( "Terminator: The Sarah Connor Chronicles", Year.of(2008), "Sci-Fi", 16 );
|
||||
filme.put("s1", s1);
|
||||
SerienEpisode e1 = new SerienEpisode( "Pilot", null, "Drama", 46, 7.8, s1, 1, 1 );
|
||||
SerienEpisode e2 = new SerienEpisode( "Dungeons & Dragons", null, "Action", 44, 7.0, s1, 1, 6 );
|
||||
Serie s2 = new Serie( "The Big Bang Theory", Year.of(2007), "Komödie", 6 );
|
||||
filme.put("s2", s2);
|
||||
SerienEpisode e3 = new SerienEpisode( "The Middle Earth Paradigm", Year.of(2009), "Komödie", 21, 8.5, s2, 1, 6 );
|
||||
SerienEpisode e4 = new SerienEpisode( "The Stockholm Syndrome", Year.of(2019), "Komödie", 23, 9.6, s2, 12, 24 );
|
||||
|
||||
return filme;
|
||||
}
|
||||
|
||||
static Serie randomSerie()
|
||||
{
|
||||
return serien().values().stream().skip( new Random().nextInt(serien().size())).findFirst().get();
|
||||
}
|
||||
|
||||
static Kinofilm randomKinofilm()
|
||||
{
|
||||
return kinofilme().values().stream().skip( new Random().nextInt(serien().size())).findFirst().get();
|
||||
}
|
||||
|
||||
static Film randomFilm()
|
||||
{
|
||||
if( Math.random() > 0.5 ) return randomSerie();
|
||||
return randomKinofilm();
|
||||
}
|
||||
|
||||
static SerienEpisode randomEpisode()
|
||||
{
|
||||
Serie e = randomSerie();
|
||||
return (SerienEpisode) e.getEpisoden().get( (int)Math.round((e.getAnzahlEpisoden()-1) * Math.random()));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
import java.time.*;
|
||||
|
||||
/**
|
||||
* Ein Film, wie er z.B. in der www.imdb.com oder moviepilot.de eingetragen sein könnte.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public abstract class Film
|
||||
{
|
||||
/**
|
||||
* Mögliche Filmtypen
|
||||
* {@link #KINOFILM}
|
||||
* {@link #SERIE}
|
||||
* {@link #EPISODE}
|
||||
*/
|
||||
public static enum FilmTyp {
|
||||
/**
|
||||
* Ein Kinofilm
|
||||
*/
|
||||
KINOFILM,
|
||||
/**
|
||||
* Eine Serie
|
||||
*/
|
||||
SERIE,
|
||||
/**
|
||||
* Eine Episode einer Serie
|
||||
*/
|
||||
EPISODE
|
||||
}
|
||||
|
||||
/**
|
||||
* Der Filmtyp des Films
|
||||
*/
|
||||
protected FilmTyp typ;
|
||||
|
||||
/**
|
||||
* Der Filmtitel
|
||||
*/
|
||||
private String titel;
|
||||
/**
|
||||
* Das Produktionsjahr
|
||||
*/
|
||||
private Year produktionsjahr; // Year implementiert Comparable<Year>
|
||||
/**
|
||||
* Das Genre. Bei mehreren möglichen Genre, dasjenige in das der Film am besten passt.
|
||||
*/
|
||||
private String genre;
|
||||
/**
|
||||
* Die Laufzeit in Minuten
|
||||
*/
|
||||
private int laufzeit;
|
||||
/**
|
||||
* Die Altersfreigabe in Jahren
|
||||
*/
|
||||
private int altersfreigabe;
|
||||
/**
|
||||
* Eine Bewertung. Von unterirdisch 0.0 bis 10.0 göttlich
|
||||
*/
|
||||
private double bewertung; // von 0.0 bis 10.0
|
||||
|
||||
/**
|
||||
* Erzeugt einen Film
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param laufzeit Laufzeit in Minuten
|
||||
* @param altersfreigabe Altersfreigabe in Jahren
|
||||
*/
|
||||
public Film(String titel, Year produktionsjahr, String genre, int laufzeit, int altersfreigabe)
|
||||
{
|
||||
this.titel = titel;
|
||||
this.produktionsjahr = produktionsjahr;
|
||||
this.genre = genre;
|
||||
this.laufzeit = laufzeit;
|
||||
this.altersfreigabe = altersfreigabe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt einen Film
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param laufzeit Laufzeit in Minuten
|
||||
* @param altersfreigabe Altersfreigabe in Jahren
|
||||
* @param bewertung Bewertung (0.0 bis 10.0)
|
||||
*/
|
||||
public Film(String titel, Year produktionsjahr, String genre, int laufzeit, int altersfreigabe, double bewertung)
|
||||
{
|
||||
this.titel = titel;
|
||||
this.produktionsjahr = produktionsjahr;
|
||||
this.genre = genre;
|
||||
this.laufzeit = laufzeit;
|
||||
this.altersfreigabe = altersfreigabe;
|
||||
this.bewertung = bewertung;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter für Bewertung
|
||||
*
|
||||
* @param bewertung Bewertung (0.0 bis 10.0)
|
||||
*/
|
||||
public void setBewertung( double bewertung )
|
||||
{
|
||||
if( this.bewertung == bewertung ) return;
|
||||
if( Settings.VERBOSE == Settings.V_LEVEL.INFO ) System.out.println("Bisherige Bewertung ("+this.bewertung+") von '" + this.getTitel() + "' nach "+ bewertung +" geändert.");
|
||||
this.bewertung = bewertung;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter für Bewertung
|
||||
*
|
||||
* @return Die Bewertung (0.0 bis 10.0)
|
||||
*/
|
||||
public double getBewertung()
|
||||
{
|
||||
return this.bewertung;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter für Titel
|
||||
*
|
||||
* @return Der Filmtitel
|
||||
*/
|
||||
public String getTitel()
|
||||
{
|
||||
return this.titel;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Eine Filmsammlung.
|
||||
* Einfache Implementierung auf einer Reihung festgelegter Größe.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Filmsammlung
|
||||
{
|
||||
|
||||
/**
|
||||
* Die der Sammlung zugrundegelegte Reihung.
|
||||
*/
|
||||
private Film[] sammlung;
|
||||
/**
|
||||
* Die Anzahl Filme in der Sammlung.
|
||||
* Diese muss nicht der Länge der zugrundegelegten Reihung entsprechen. In dieser können sich auch null-Werte befinden.
|
||||
*/
|
||||
private int anzahlFilme = 0;
|
||||
|
||||
/**
|
||||
* Erstellt eine leere Filmsammlung.
|
||||
*
|
||||
* @param laenge Die maximale Anzahl Filme in der Filmsammlung
|
||||
*/
|
||||
public Filmsammlung(int laenge)
|
||||
{
|
||||
this.sammlung = new Film[laenge];
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstellt eine Filmsammlung und füllt diese mit gegebenen Filmen.
|
||||
*
|
||||
* @param sammlung Ein Reihung aller Filme welche in die Filmsammlung aufgenommen werden sollen.
|
||||
*/
|
||||
public Filmsammlung(Film[] sammlung)
|
||||
{
|
||||
this.sammlung = sammlung;
|
||||
this.anzahlFilme = sammlung.length; //Annahme, dass keine Null-Werte in sammlung
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstellt eine Filmsammlung und füllt diese mit gegebenen Filmen.
|
||||
*
|
||||
* @param sammlung Ein Sammlung aller Filme welche in die Filmsammlung aufgenommen werden sollen.
|
||||
*/
|
||||
public Filmsammlung(Collection<? extends Film> sammlung)
|
||||
{
|
||||
this.sammlung = sammlung.toArray(new Film[0]);
|
||||
this.anzahlFilme = this.sammlung.length; //Annahme, dass keine Null-Werte in sammlung
|
||||
}
|
||||
/**
|
||||
* Fügt den gegebenen Film an die gegebene Position in der Sammlung ein.
|
||||
* Falls sich an der Position bereits ein Film befindet, wird dieser überschrieben.
|
||||
*
|
||||
* @param index Die Position in der Sammlung an der der Film eingefügt werden soll
|
||||
* @param film Film der in die Sammlung eingefügt werden soll
|
||||
*/
|
||||
public void add( int index, Film film )
|
||||
{
|
||||
/* TODO: Bounds Check
|
||||
* Stelle sicher, dass sich der Wert der Parametervariable index
|
||||
* im zulässigen Bereich befindet.
|
||||
*/
|
||||
sammlung[index] = film;
|
||||
/* TODO: Korrekte Filmanzahl
|
||||
* Stelle sicher, dass sich die Filmzahl nur dann ändert,
|
||||
* falls an der Position zuvor kein anderer Film war.
|
||||
*/
|
||||
this.anzahlFilme++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fügt den gegebenen Film ans Ende der Sammlung ein.
|
||||
* Falls kein Platz mehr frei ist, wird der Film nicht in die Sammlung aufgenommen.
|
||||
*
|
||||
* @param film Film der in die Sammlung eingefügt werden soll
|
||||
*/
|
||||
public void add( Film film )
|
||||
{
|
||||
for( int i = 0; i < this.sammlung.length; i ++ ){
|
||||
if( this.sammlung[i] == null ){
|
||||
add(i, film);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Entfernt einen Film an der angegeben Position aus der Filmsammlung.
|
||||
* Die Position bleibt danach leer.
|
||||
*
|
||||
* @param index Die Position in der Filmsammlung aus der der Film entfernt werden soll
|
||||
* @return Der Film, der aus der Sammlung entfernt wurde
|
||||
*/
|
||||
public Film remove( int index )
|
||||
{
|
||||
/* TODO: Bounds Check
|
||||
* Stelle sicher, dass sich der Wert der Parametervariable index
|
||||
* im zulässigen Bereich befindet.
|
||||
*/
|
||||
Film f = sammlung[index];
|
||||
sammlung[index] = null;
|
||||
/* TODO: Korrekte Filmanzahl
|
||||
* Stelle sicher, dass die Anzahl nur verringert wird,
|
||||
* falls zuvor ein Film an der Position war.
|
||||
*/
|
||||
this.anzahlFilme--;
|
||||
return f;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt den Film an der angegeben Position in der Sammlung zurück
|
||||
*
|
||||
* @param index Die Position in der Filmsammlung an der sich der zurückzugebende Film befindet
|
||||
* @return Der Film an der angegebenen Position
|
||||
*/
|
||||
public Film get( int index )
|
||||
{
|
||||
/* TODO: Bounds Check
|
||||
* Stelle sicher, dass sich der Wert der Parametervariable index
|
||||
* im zulässigen Bereich befindet.
|
||||
*/
|
||||
return sammlung[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sucht einen Film anhand dessen Titels und gibt die Position in der Sammlung zurück.
|
||||
* Konnte der Film nicht gefunden werden, wird -1 zurück gegeben.
|
||||
*
|
||||
* @param titel Der Titel des gesuchten Films
|
||||
* @return Die Position des gesuchten Films
|
||||
*/
|
||||
public int find( String titel )
|
||||
{
|
||||
/* TODO: Suche
|
||||
* Implementiere eine einfache sequentielle bzw. lineare Suche
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die Anzahl Filme in der Sammlung zurück
|
||||
*
|
||||
* @return Die Anzahl Filme in der Sammlung
|
||||
*/
|
||||
public int anzahlFilme()
|
||||
{
|
||||
return this.anzahlFilme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bestimmt die durchschnittliche Bewertung aller Filme aus der Sammlung.
|
||||
*
|
||||
* @return Die durchschnittle Bewertung aller Filme aus der Sammlung
|
||||
*/
|
||||
public double getBewertung( )
|
||||
{
|
||||
double sum = 0.0;
|
||||
int num = 0;
|
||||
|
||||
for( int i = 0; i < this.sammlung.length; i++ ){
|
||||
if( this.sammlung[i] != null ){
|
||||
sum += this.sammlung[i].getBewertung();
|
||||
num ++;
|
||||
}
|
||||
}
|
||||
|
||||
return Math.round(sum/num * 10.0) / 10.0; //auf eine Nachkommastelle runden.
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Eine Filmsammlung.
|
||||
* Generische Implementierung auf Basis einer ArrayList<E>
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class FilmsammlungGeneric<E> extends ArrayList<E>
|
||||
//public class FilmsammlungGeneric<E extends Film> extends ArrayList<E>
|
||||
{
|
||||
|
||||
/**
|
||||
* Erstellt eine leere Filmsammlung.
|
||||
*
|
||||
* @param laenge Die Anzahl Filme, welche zu Beginn in die Filmsammlung passen.
|
||||
*/
|
||||
public FilmsammlungGeneric(int laenge)
|
||||
{
|
||||
super(laenge);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstellt eine Filmsammlung und füllt diese mit gegebenen Filmen.
|
||||
*
|
||||
* @param sammlung Ein Reihung aller Filme welche in die Filmsammlung aufgenommen werden sollen.
|
||||
*/
|
||||
public FilmsammlungGeneric(E[] sammlung)
|
||||
{
|
||||
super( Arrays.asList(sammlung) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstellt eine Filmsammlung und füllt diese mit gegebenen Filmen.
|
||||
*
|
||||
* @param sammlung Ein Sammlung aller Filme welche in die Filmsammlung aufgenommen werden sollen.
|
||||
*/
|
||||
public FilmsammlungGeneric(Collection<? extends E> c)
|
||||
{
|
||||
super(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sucht einen Film anhand dessen Titels und gibt die Position in der Sammlung zurück.
|
||||
* Konnte der Film nicht gefunden werden, wird -1 zurück gegeben.
|
||||
*
|
||||
* @param titel Der Titel des gesuchten Films
|
||||
* @return Die Position des gesuchten Films
|
||||
*/
|
||||
public int find( String titel )
|
||||
{
|
||||
/* TODO: Suche
|
||||
* Implementiere eine einfache sequentielle bzw. lineare Suche
|
||||
* z.B. mit einem Lambdaausdruck
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die Anzahl Filme in der Sammlung zurück
|
||||
*
|
||||
* @return Die Anzahl Filme in der Sammlung
|
||||
*/
|
||||
public int anzahlFilme()
|
||||
{
|
||||
return this.size();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Bestimmt die durchschnittliche Bewertung aller Filme aus der Sammlung.
|
||||
*
|
||||
* @return Die durchschnittle Bewertung aller Filme aus der Sammlung
|
||||
*/
|
||||
// public double getBewertung( )
|
||||
// {
|
||||
// double sum = 0.0;
|
||||
// int num = 0;
|
||||
|
||||
// /* TODO: Alternative Implementierung
|
||||
// * Nutze statt der erweiterten For-Schleife einen Lambdaausdruck.
|
||||
// */
|
||||
|
||||
// for( E e: this ){
|
||||
// if( e != null ){
|
||||
// sum += e.getBewertung();
|
||||
// num ++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// return Math.round(sum/num * 10.0) / 10.0; //auf eine Nachkommastelle runden.
|
||||
// }
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
import java.time.*;
|
||||
/**
|
||||
* Ein Kinofilm.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Kinofilm extends Film
|
||||
{
|
||||
/**
|
||||
* Konstruktor für Objekte der Klasse Kinofilm
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param laufzeit Laufzeit in Minuten
|
||||
* @param altersfreigabe Altersfreigabe in Jahren
|
||||
* @param bewertung Bewertung (0.0 bis 10.0)
|
||||
*/
|
||||
public Kinofilm(String titel, Year produktionsjahr, String genre, int laufzeit, int altersfreigabe, double bewertung)
|
||||
{
|
||||
super(titel, produktionsjahr, genre, laufzeit, altersfreigabe, bewertung);
|
||||
this.typ = FilmTyp.KINOFILM;
|
||||
}
|
||||
|
||||
/**
|
||||
* Konstruktor für Objekte der Klasse Kinofilm
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param laufzeit Laufzeit in Minuten
|
||||
* @param altersfreigabe Altersfreigabe in Jahren
|
||||
*/
|
||||
public Kinofilm(String titel, Year produktionsjahr, String genre, int laufzeit, int altersfreigabe)
|
||||
{
|
||||
super(titel, produktionsjahr, genre, laufzeit, altersfreigabe);
|
||||
this.typ = FilmTyp.KINOFILM;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
PROJEKTBEZEICHNUNG: Filmsammlung
|
||||
PROJEKTZWECK: Einführung in generische Datentypen, Sammlungen und Iteration über Elemente einer Sammlung z.B.über die erweiterte For-Schleife und Lambdaausdrücke
|
||||
VERSION oder DATUM: 02.2021
|
||||
WIE IST DAS PROJEKT ZU STARTEN: Das Projekt wird über die Direkteingabe in BlueJ gesteuert.
|
||||
AUTOR(EN): S.Gebert
|
||||
BENUTZERHINWEISE: Mit der Unit-Test Klasse "Basis" kann ein Objektzustand als Ausgangsbasis vorgegeben werden. Auf dieser wird dann über die Direkteingabe operiert.
|
||||
In der Klasse "Aufgaben" werden statische Methoden pro Aufgabe definiert, welche über die Direkteingabe aufgerufen werden.
|
||||
Beispielaufgaben finden sich im Begleitmaterial.
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
import java.time.*;
|
||||
|
||||
/**
|
||||
* Eine Serie.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Serie extends Film
|
||||
{
|
||||
/**
|
||||
* Die Anzahl Staffeln der Serie
|
||||
*/
|
||||
private int anzahlStaffeln;
|
||||
/**
|
||||
* Enthält alle Episoden der Serie
|
||||
*/
|
||||
private Filmsammlung episoden;
|
||||
/* TODO: Typsicherheit garantieren
|
||||
* Nutze statt des Typs Filmsammlung den generischen Typ FilmsammlungGeneric
|
||||
* und schreibe den Code dieser Klasse entsprechend um.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Erzeugt eine Serie
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param altersfreigabe Altersfreigabe in Jahren
|
||||
*/
|
||||
public Serie(String titel, Year produktionsjahr, String genre, int altersfreigabe)
|
||||
{
|
||||
super(titel, produktionsjahr, genre, -1, altersfreigabe);
|
||||
this.typ = FilmTyp.SERIE;
|
||||
this.episoden = new Filmsammlung(20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die Anzahl aller Episoden der Serie zurück.
|
||||
*
|
||||
* @return Die Anzahl Episoden der Serie
|
||||
*/
|
||||
public int getAnzahlEpisoden( )
|
||||
{
|
||||
return this.episoden.anzahlFilme();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fügt der Serie eine Episode hinzu.
|
||||
*
|
||||
* @param episode Die einzufügende Episode
|
||||
*/
|
||||
public void addEpisode( SerienEpisode episode )
|
||||
{
|
||||
this.episoden.add( episode );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die Episoden der Serie als Filmsammlung zurück
|
||||
*
|
||||
* @return Die Episoden der Serie als Filmsammlung
|
||||
*/
|
||||
public Filmsammlung getEpisoden()
|
||||
{
|
||||
/* TODO: Typsicherheit garantieren
|
||||
* s.o.
|
||||
*/
|
||||
return this.episoden;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die Bewertung der Serie zurück.
|
||||
* Diese berechnet sich aus dem Mittelwert aller enthaltenen Episoden.
|
||||
*
|
||||
* @return Die mittlere Bewertung aller Episoden (0.0 bis 10.0)
|
||||
*/
|
||||
@Override
|
||||
public double getBewertung( )
|
||||
{
|
||||
super.setBewertung( this.episoden.getBewertung() );
|
||||
return super.getBewertung();
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt die Bewertung der Serie fest.
|
||||
* Da die Bewertung automatisch aus den einzelnen Episoden berechnet wird, wird nichts getan.
|
||||
*
|
||||
* @param bewertung Bewertung (0.0 bis 10.0)
|
||||
*/
|
||||
@Override
|
||||
public void setBewertung( double bewertung )
|
||||
{
|
||||
if( Settings.VERBOSE == Settings.V_LEVEL.INFO ) System.out.println("Bewertung nicht geändert, da sich die Bewertung aus den Bewertungen der Episoden berechnet.");
|
||||
//Nichts tun, da die Bewertung aus der Bewertung der Episoden berechnet wird.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
import java.util.*;
|
||||
import java.time.*;
|
||||
|
||||
/**
|
||||
* Eine Episode einer Serie
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class SerienEpisode extends Film
|
||||
{
|
||||
/**
|
||||
* Die Serie zu der die Episode gehört
|
||||
*/
|
||||
private Serie serie;
|
||||
/**
|
||||
* Die Nummer der Episode innerhalb der Serie
|
||||
*/
|
||||
private int episode;
|
||||
/**
|
||||
* Die Nummer der Staffel zu der die Episode gehört
|
||||
*/
|
||||
private int staffel;
|
||||
|
||||
/**
|
||||
* Erzeugt eine Episode einer Serie
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param laufzeit Laufzeit in Minuten
|
||||
* @param bewertung Bewertung (0.0 bis 10.0)
|
||||
* @param serie Zugehörige Serie
|
||||
* @param staffel Nummer der Staffel
|
||||
* @param episode Nummer der Episode
|
||||
*/
|
||||
public SerienEpisode(String titel, Year produktionsjahr, String genre, int laufzeit, double bewertung, Serie serie, int staffel, int episode )
|
||||
{
|
||||
super(titel, produktionsjahr, genre, laufzeit, -1, bewertung);
|
||||
this.typ = FilmTyp.EPISODE;
|
||||
this.serie = serie;
|
||||
this.serie.addEpisode(this);
|
||||
this.staffel = staffel;
|
||||
this.episode = episode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt eine Episode einer Serie
|
||||
*
|
||||
* @param titel Filmtitel
|
||||
* @param produktionsjahr Das Produktionsjahr
|
||||
* @param genre Hauptgenre
|
||||
* @param laufzeit Laufzeit in Minuten
|
||||
* @param serie Zugehörige Serie
|
||||
* @param staffel Nummer der Staffel
|
||||
* @param episode Nummer der Episode
|
||||
*/
|
||||
public SerienEpisode(String titel, Year produktionsjahr, String genre, int laufzeit, Serie serie, int staffel, int episode )
|
||||
{
|
||||
super(titel, produktionsjahr, genre, laufzeit, -1);
|
||||
this.typ = FilmTyp.EPISODE;
|
||||
this.serie = serie;
|
||||
this.staffel = staffel;
|
||||
this.episode = episode;
|
||||
}
|
||||
|
||||
/* TODO: Getter
|
||||
* Schreibe Getter für die privaten Attribute und dokumentiere diese.
|
||||
*/
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
/**
|
||||
* Globale Einstellungen des Projekts
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Settings
|
||||
{
|
||||
/**
|
||||
* Verbosität
|
||||
* {@link #NONE}
|
||||
* {@link #INFO}
|
||||
* {@link #DEBUG}
|
||||
* {@link #ALL}
|
||||
*/
|
||||
static enum V_LEVEL {
|
||||
/**
|
||||
* Keine Ausgaben in der Konsole
|
||||
*/
|
||||
NONE,
|
||||
/**
|
||||
* Auf der Konsole werden Informationen für den Nutzer ausgegeben.
|
||||
*/
|
||||
INFO,
|
||||
/**
|
||||
* Auf der Konsole werden Informationen für den Programmierer ausgegeben.
|
||||
*/
|
||||
DEBUG,
|
||||
/**
|
||||
* Alle verfügbaren Informationen werden auf der Konsole ausgegeben.
|
||||
*/
|
||||
ALL
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Verbosität des Programms.
|
||||
* Im Code kann diese überprüft und entsprechend Ausgaben erstellt werden.
|
||||
*/
|
||||
static V_LEVEL VERBOSE = V_LEVEL.INFO;
|
||||
}
|
||||
|
|
@ -0,0 +1,161 @@
|
|||
#BlueJ package file
|
||||
dependency1.from=Basis
|
||||
dependency1.to=Filmsammlung
|
||||
dependency1.type=UsesDependency
|
||||
dependency10.from=Aufgabe
|
||||
dependency10.to=Film
|
||||
dependency10.type=UsesDependency
|
||||
dependency11.from=Aufgabe
|
||||
dependency11.to=Kinofilm
|
||||
dependency11.type=UsesDependency
|
||||
dependency12.from=Aufgabe
|
||||
dependency12.to=Daten
|
||||
dependency12.type=UsesDependency
|
||||
dependency13.from=Filmsammlung
|
||||
dependency13.to=Film
|
||||
dependency13.type=UsesDependency
|
||||
dependency14.from=Film
|
||||
dependency14.to=Settings
|
||||
dependency14.type=UsesDependency
|
||||
dependency15.from=Serie
|
||||
dependency15.to=Filmsammlung
|
||||
dependency15.type=UsesDependency
|
||||
dependency16.from=Serie
|
||||
dependency16.to=SerienEpisode
|
||||
dependency16.type=UsesDependency
|
||||
dependency17.from=Serie
|
||||
dependency17.to=Settings
|
||||
dependency17.type=UsesDependency
|
||||
dependency18.from=SerienEpisode
|
||||
dependency18.to=Serie
|
||||
dependency18.type=UsesDependency
|
||||
dependency19.from=Daten
|
||||
dependency19.to=Kinofilm
|
||||
dependency19.type=UsesDependency
|
||||
dependency2.from=Basis
|
||||
dependency2.to=FilmsammlungGeneric
|
||||
dependency2.type=UsesDependency
|
||||
dependency20.from=Daten
|
||||
dependency20.to=Serie
|
||||
dependency20.type=UsesDependency
|
||||
dependency21.from=Daten
|
||||
dependency21.to=SerienEpisode
|
||||
dependency21.type=UsesDependency
|
||||
dependency22.from=Daten
|
||||
dependency22.to=Film
|
||||
dependency22.type=UsesDependency
|
||||
dependency3.from=Basis
|
||||
dependency3.to=Kinofilm
|
||||
dependency3.type=UsesDependency
|
||||
dependency4.from=Basis
|
||||
dependency4.to=Serie
|
||||
dependency4.type=UsesDependency
|
||||
dependency5.from=Basis
|
||||
dependency5.to=Daten
|
||||
dependency5.type=UsesDependency
|
||||
dependency6.from=Aufgabe
|
||||
dependency6.to=Filmsammlung
|
||||
dependency6.type=UsesDependency
|
||||
dependency7.from=Aufgabe
|
||||
dependency7.to=FilmsammlungGeneric
|
||||
dependency7.type=UsesDependency
|
||||
dependency8.from=Aufgabe
|
||||
dependency8.to=Serie
|
||||
dependency8.type=UsesDependency
|
||||
dependency9.from=Aufgabe
|
||||
dependency9.to=SerienEpisode
|
||||
dependency9.type=UsesDependency
|
||||
editor.fx.0.height=0
|
||||
editor.fx.0.width=0
|
||||
editor.fx.0.x=0
|
||||
editor.fx.0.y=0
|
||||
objectbench.height=271
|
||||
objectbench.width=749
|
||||
package.divider.horizontal=0.6
|
||||
package.divider.vertical=0.6971677559912854
|
||||
package.editor.height=633
|
||||
package.editor.width=1126
|
||||
package.editor.x=100
|
||||
package.editor.y=27
|
||||
package.frame.height=1020
|
||||
package.frame.width=1280
|
||||
package.numDependencies=22
|
||||
package.numTargets=10
|
||||
package.showExtends=true
|
||||
package.showUses=true
|
||||
project.charset=UTF-8
|
||||
readme.height=60
|
||||
readme.name=@README
|
||||
readme.width=49
|
||||
readme.x=10
|
||||
readme.y=10
|
||||
target1.height=50
|
||||
target1.name=Basis
|
||||
target1.showInterface=false
|
||||
target1.type=UnitTestTargetJunit4
|
||||
target1.width=120
|
||||
target1.x=30
|
||||
target1.y=90
|
||||
target10.height=50
|
||||
target10.name=Settings
|
||||
target10.showInterface=false
|
||||
target10.type=ClassTarget
|
||||
target10.width=130
|
||||
target10.x=340
|
||||
target10.y=50
|
||||
target2.height=50
|
||||
target2.name=Filmsammlung
|
||||
target2.showInterface=false
|
||||
target2.type=ClassTarget
|
||||
target2.width=180
|
||||
target2.x=300
|
||||
target2.y=210
|
||||
target3.height=50
|
||||
target3.name=FilmsammlungGeneric
|
||||
target3.showInterface=false
|
||||
target3.type=ClassTarget
|
||||
target3.width=270
|
||||
target3.x=370
|
||||
target3.y=270
|
||||
target4.height=50
|
||||
target4.name=Kinofilm
|
||||
target4.showInterface=false
|
||||
target4.type=ClassTarget
|
||||
target4.width=90
|
||||
target4.x=600
|
||||
target4.y=330
|
||||
target5.height=50
|
||||
target5.name=Film
|
||||
target5.showInterface=false
|
||||
target5.type=AbstractTarget
|
||||
target5.width=80
|
||||
target5.x=630
|
||||
target5.y=160
|
||||
target6.height=50
|
||||
target6.name=Aufgabe
|
||||
target6.showInterface=false
|
||||
target6.type=ClassTarget
|
||||
target6.width=100
|
||||
target6.x=120
|
||||
target6.y=160
|
||||
target7.height=50
|
||||
target7.name=SerienEpisode
|
||||
target7.showInterface=false
|
||||
target7.type=ClassTarget
|
||||
target7.width=130
|
||||
target7.x=760
|
||||
target7.y=450
|
||||
target8.height=50
|
||||
target8.name=Daten
|
||||
target8.showInterface=false
|
||||
target8.type=ClassTarget
|
||||
target8.width=100
|
||||
target8.x=220
|
||||
target8.y=50
|
||||
target9.height=50
|
||||
target9.name=Serie
|
||||
target9.showInterface=false
|
||||
target9.type=ClassTarget
|
||||
target9.width=80
|
||||
target9.x=680
|
||||
target9.y=390
|
||||
6
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/02_Filmsammlung_Loes/.gitignore
vendored
Normal file
6
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/02_Filmsammlung_Loes/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
*.sh
|
||||
*.class
|
||||
*.ctxt
|
||||
repo.adoc
|
||||
repo_subtree.adoc
|
||||
/alt
|
||||
|
|
@ -0,0 +1,240 @@
|
|||
import java.util.*;
|
||||
import java.time.*;
|
||||
|
||||
/**
|
||||
* Verschiedene Aufgaben, die statisch direkt aus BlueJ heraus aufgerufen werden.
|
||||
*
|
||||
* @author S.Gebert
|
||||
* @version 12.2020
|
||||
*/
|
||||
public class Aufgabe
|
||||
{
|
||||
|
||||
/**
|
||||
* Aufgabe.a1
|
||||
* Schreibe eine Methode, die für das erste Element einer gegebene Filmsammlung (von Serien) die Bewertung auf 5.0 setzt
|
||||
* und
|
||||
* den Titel und die Anzahl der vorhandenen Episoden auf der Konsole ausgibt.
|
||||
*
|
||||
* Hinweise: - Betrachte die Dokumentation der Klasse Filmsammlung. Mit welcher Methode kannst du auf die Elemente der Sammlung zugreifen?
|
||||
* - Prüfe an welcher Stelle eine Typkonvertierung nötig ist.
|
||||
*
|
||||
* Teste deine Methode mit der Filmsammlung s und kf (Basis - Objektzustand wiederherstellen)
|
||||
*
|
||||
* @param fs Eine Filmsammlung
|
||||
*/
|
||||
public static void a1(Filmsammlung fs)
|
||||
{
|
||||
fs.get(0).setBewertung( 5.0 ); // Durch Polymorphie wird die korrekte Methode der Serie bzw. des Films aufgerufen, bei einer Serie findet keine Änderung der Bewertung statt.
|
||||
System.out.println( "Anzahl Episoden der Serie '"+ fs.get(0).getTitel()+"': " + ( (Serie) fs.get(0) ).getAnzahlEpisoden() );
|
||||
/*
|
||||
* Falls fs eine Filmsammlung von Serien:
|
||||
* fs.get(0).getTitel(); //implitzite erweiternde Typumwandlung: Serie -> Film
|
||||
* ( (Serie) fs.getFilm(0) ).getAnzahlEpisoden(); //explizite einschränkende Typumwandlung: Film -> Serie
|
||||
*
|
||||
* Falls fs eine Filmsammlung von Kinofilmen:
|
||||
* Exception: java.lang.ClassCastException (class Kinofilm cannot be cast to class Serie)
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a2
|
||||
* Schreibe eine Methode, die für das zweite Element einer gegebene Filmsammlung (von Serien) die Bewertung auf 5.0 setzt
|
||||
* und
|
||||
* den Titel und die Anzahl der vorhandenen Episoden auf der Konsole ausgibt.
|
||||
*
|
||||
* Teste deine Methode mit der Filmsammlung s und kf (Basis - Objektzustand wiederherstellen)
|
||||
*
|
||||
* @param fsG Eine Seriensammlung
|
||||
*/
|
||||
public static void a2(FilmsammlungGeneric<Serie> fsG)
|
||||
{
|
||||
fsG.get(1).setBewertung( 5.0 ); // die Methode der Serie aufgerufen, es findet keine Änderung der Bewertung statt.
|
||||
System.out.println( "Anzahl Episoden der Serie '"+ fsG.get(1).getTitel()+"': " + fsG.get(1).getAnzahlEpisoden() );
|
||||
/*
|
||||
* fsG.get(1).getTitel(); //keine Typumwandlung, die von der Vaterklasse geerbte Methode wird aufgerufen.
|
||||
* fsG.get(1).getAnzahlEpisoden(); //keine Typumwandlung notwendig, weder implizit noch explizit
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a3
|
||||
* Erstelle verschieden Filmsammlungen und teste deren Methoden.
|
||||
* Um einzelne Filme zu erhalten kannst die Methoden Daten.randomFilm(), Daten.randomKinofilm(), Daten.randomSerie() und Daten.randomEpisode() verwenden.
|
||||
*
|
||||
* - Welche konkreten Typparameter sind erlaubt, welche nicht?
|
||||
* - Finde Beispiele für die es zu Compilierungs/Laufzeitfehlern kommen kann.
|
||||
*/
|
||||
public static void a3()
|
||||
{
|
||||
//Beispiel
|
||||
FilmsammlungGeneric<SerienEpisode> sammlung1 = new FilmsammlungGeneric<>( new SerienEpisode[]{Daten.randomEpisode(), Daten.randomEpisode() });
|
||||
System.out.println(sammlung1.get(0).getTitel());
|
||||
|
||||
//Lösungsbeispiel
|
||||
FilmsammlungGeneric<String> sammlung2 = new FilmsammlungGeneric<>( new String[]{"1","blabla" });
|
||||
//System.out.println(sammlung2.get(0).getTitel()); //Hier kommt es zum Compilierungsfehler "cannot find symbol - method getTitel()
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a4
|
||||
* Die gegebene Methode soll die Titel aller Filme in einer Filmsammlung ausgeben.
|
||||
* Teste die gegebene Methode mit den Basisdaten sG und kfG.
|
||||
*
|
||||
* - Notiere dir den Laufzeitfehler den du erhälst.
|
||||
* - Ändere die Methode so ab, dass es mit sG bzw. kfG funktioniert. Gibt es eine allgemeine Lösung?
|
||||
* @param fsG Eine Filmsammlung
|
||||
*/
|
||||
public static void a4(FilmsammlungGeneric<Film> fsG)
|
||||
{
|
||||
Iterator<Film> iter = fsG.iterator();
|
||||
|
||||
while( iter.hasNext() ){
|
||||
System.out.print( iter.next().getTitel() +", ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Musterlösung der Aufgabe.a4
|
||||
* generische Implementierung
|
||||
*
|
||||
* @param fsG Eine Filmsammlung
|
||||
*/
|
||||
public static <E extends Film> void a4_generic(FilmsammlungGeneric<E> fsG)
|
||||
{
|
||||
Iterator<E> iter = fsG.iterator();
|
||||
|
||||
while( iter.hasNext() ){
|
||||
System.out.print( iter.next().getTitel() +", ");
|
||||
}
|
||||
|
||||
//Alternativ
|
||||
for( E f : fsG ){
|
||||
System.out.print( f.getTitel() + ", ");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a5
|
||||
* Die gegebene Methode soll die Titel aller Filme in einer Filmsammlung von Kinofilmen ausgeben.
|
||||
* Implementiere die Methode mit der erweiterten for-Schleife
|
||||
* Teste mit den Basisdaten kfG.
|
||||
*
|
||||
* @param fsG Eine Filmsammlung
|
||||
*/
|
||||
public static void a5(FilmsammlungGeneric<Kinofilm> fsG)
|
||||
{
|
||||
for( Kinofilm f : fsG ){
|
||||
System.out.print( f.getTitel() +", ");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgabe.a6
|
||||
* Finde für jede gegebene Reihung jeweils das Minimum.
|
||||
* Schreibe dafür je eine private statische Methode und rufe diese auf.
|
||||
* Gib das Ergebnis auf der Konsole aus.
|
||||
*
|
||||
*/
|
||||
public static void a6()
|
||||
{
|
||||
//Gegebene Reihungen
|
||||
Integer[] rInt = {5, 90, 4, 1, -70, 400, 30};
|
||||
String[] rString = {"Bär","Affe","Nilpferd","Zebra"};
|
||||
Float[] rFloat = {3.4f, 9.78f,.01f};
|
||||
|
||||
//Aufruf
|
||||
System.out.println( getMinInteger(rInt) );
|
||||
System.out.println( getMinString(rString) );
|
||||
System.out.println( getMinFloat(rFloat) );
|
||||
|
||||
//Aufruf der generischen Implementierung
|
||||
System.out.println(getMinGeneric(Arrays.asList(rInt)));
|
||||
System.out.println(getMinGeneric(Arrays.asList(rString)));
|
||||
System.out.println(getMinGeneric(Arrays.asList(rFloat)));
|
||||
}
|
||||
|
||||
private static Integer getMinInteger(Integer[] r)
|
||||
{
|
||||
|
||||
Integer min = r[0];
|
||||
|
||||
for(int i = 1; i < r.length; i++)
|
||||
{
|
||||
if(r[i] < min)
|
||||
min = r[i];
|
||||
}
|
||||
|
||||
return min;
|
||||
}
|
||||
|
||||
private static String getMinString(String[] r)
|
||||
{
|
||||
|
||||
String min = r[0];
|
||||
|
||||
for(int i = 1; i < r.length; i++)
|
||||
{
|
||||
if(r[i].toLowerCase().compareTo(min.toLowerCase()) < 0)
|
||||
min = r[i];
|
||||
}
|
||||
|
||||
return min;
|
||||
}
|
||||
|
||||
private static Float getMinFloat(Float[] r)
|
||||
{
|
||||
Float min = r[0];
|
||||
|
||||
for(int i = 1; i < r.length; i++)
|
||||
{
|
||||
if(r[i] < min)
|
||||
min = r[i];
|
||||
}
|
||||
|
||||
return min;
|
||||
}
|
||||
|
||||
//verwende generische Methoden um Abhängigkeiten zwischen Parametern und/oder Rückgabewert auszudrücken.
|
||||
private static < T extends Comparable > T getMinGeneric(List<T> r)
|
||||
{
|
||||
T min = r.get(0);
|
||||
|
||||
for( T t : r )
|
||||
{
|
||||
if(t.compareTo(min) < 0)
|
||||
min = t;
|
||||
}
|
||||
|
||||
return min;
|
||||
|
||||
}
|
||||
|
||||
//Einzeiler für die Nutzung in der Direkteingabe. Siehe Beispielaufgaben im Unterrichtsgang
|
||||
private static void einZeiler(FilmsammlungGeneric<Kinofilm> kfG)
|
||||
{
|
||||
//Filme mit Bewertung schlechter als 7.0 aus Sammlung entfernen.
|
||||
kfG.removeIf(f -> (f.getBewertung()<7.0));
|
||||
|
||||
//Alle Titel einer Sammlung ausgeben.
|
||||
kfG.forEach(f -> System.out.print(f.getTitel()+", "));
|
||||
|
||||
//Alle Bewertungen um 0.5 erhöhen, aber nicht über 10.0
|
||||
kfG.forEach(f -> {if(f.getBewertung()<=9.5) f.setBewertung(f.getBewertung()+0.5);});
|
||||
|
||||
//Filmtitel mit schlechtester Bewertung ausgeben
|
||||
System.out.println("Schlechteste Bewertung: " + java.util.Collections.min(kfG, java.util.Comparator.comparing(f -> f.getBewertung() )).getTitel());
|
||||
|
||||
//Filmtitel mit schlechtester Bewertung via Stream bestimmen und ausgeben.
|
||||
System.out.println("Schlechteste Bewertung:"+ kfG.stream().reduce(kfG.get(0), (min, t) -> (t.getBewertung() < min.getBewertung()) ? t : min).getTitel() );
|
||||
|
||||
// Anzahl aller Filme der Sammlung mit einer Bewertung besser als 7.0
|
||||
System.out.println("Anzahl Bewertungen über 7.0:" + kfG.stream().filter( f -> f.getBewertung()>7.0 ).mapToInt(f -> 1).sum() );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
11
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/readme.adoc
Normal file
11
Quellcodes/Alg_GR_Str_Progr_Filmsammlung/readme.adoc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
= Material :
|
||||
|
||||
|===
|
||||
|Zuordnung|
|
||||
|Klassenstufe|
|
||||
|Bildungsplanbezug |
|
||||
|Werkzeug|
|
||||
|Autoren|
|
||||
|===
|
||||
|
||||
== Inhalt
|
||||
Loading…
Add table
Add a link
Reference in a new issue