From 741e9b448225919c830b9fb1aed477c28bef9d2b Mon Sep 17 00:00:00 2001 From: Thomas Smits Date: Sat, 30 Aug 2025 05:38:06 +0200 Subject: [PATCH] Update of exercises --- Abstrakte_Klassen_001/readme.md | 2 +- Abstrakte_Klassen_002/readme.md | 2 +- Auffrischung_001/readme.md | 2 +- Auffrischung_002/readme.md | 2 +- Auffrischung_003/readme.md | 2 +- Auffrischung_004/readme.md | 2 +- Auffrischung_005/readme.md | 2 +- Auffrischung_006/readme.md | 2 +- Ausnahmen_001/readme.md | 2 +- Ausnahmen_002/readme.md | 2 +- Ausnahmen_003/readme.md | 2 +- Ausnahmen_004/readme.md | 2 +- Ausnahmen_005/readme.md | 2 +- Collections_001/readme.md | 2 +- Collections_002/readme.md | 2 +- Collections_003/readme.md | 4 +- Collections_004/readme.md | 2 +- Collections_005/readme.md | 2 +- Collections_006/readme.md | 2 +- Collections_007/readme.md | 4 +- Collections_008/readme.md | 2 +- Collections_009/readme.md | 2 +- Collections_010/readme.md | 2 +- Collections_011/readme.md | 4 +- Einfuehrung_001/readme.md | 2 +- Einfuehrung_002/readme.md | 2 +- Einfuehrung_003/readme.md | 2 +- Enumerationen_001/readme.md | 2 +- Enumerationen_002/readme.md | 2 +- Enumerationen_003/readme.md | 2 +- Enumerationen_004/readme.md | 2 +- Generische_Typen_001/readme.md | 2 +- Generische_Typen_002/readme.md | 2 +- Generische_Typen_003/readme.md | 2 +- Generische_Typen_004/readme.md | 2 +- Generische_Typen_005/readme.md | 2 +- Generische_Typen_006/readme.md | 2 +- Generische_Typen_007/readme.md | 2 +- Generische_Typen_008/readme.md | 2 +- Generische_Typen_009/readme.md | 2 +- Geschachtelte_Klassen_001/readme.md | 2 +- Geschachtelte_Klassen_002/readme.md | 2 +- Geschachtelte_Klassen_003/readme.md | 2 +- Input_und_Output_001/readme.md | 2 +- Input_und_Output_002/readme.md | 2 +- Input_und_Output_003/readme.md | 2 +- Input_und_Output_004/readme.md | 2 +- Input_und_Output_005/readme.md | 2 +- Input_und_Output_006/readme.md | 4 +- Input_und_Output_007/readme.md | 2 +- Input_und_Output_008/readme.md | 2 +- Input_und_Output_009/readme.md | 2 +- Input_und_Output_010/readme.md | 2 +- Input_und_Output_011/readme.md | 2 +- Input_und_Output_012/readme.md | 2 +- Input_und_Output_013/readme.md | 2 +- Input_und_Output_014/readme.md | 2 +- Input_und_Output_015/readme.md | 2 +- Input_und_Output_016/readme.md | 2 +- Interfaces_001/readme.md | 2 +- Interfaces_002/readme.md | 2 +- Interfaces_003/readme.md | 2 +- Interfaces_004/readme.md | 2 +- Lambdas_001/readme.md | 2 +- Lambdas_002/readme.md | 2 +- Object_und_Wrapper_001/readme.md | 2 +- Object_und_Wrapper_002/readme.md | 2 +- Object_und_Wrapper_003/readme.md | 2 +- Object_und_Wrapper_004/readme.md | 2 +- Object_und_Wrapper_005/readme.md | 2 +- Object_und_Wrapper_006/readme.md | 2 +- Object_und_Wrapper_007/readme.md | 2 +- Streams_001/readme.md | 2 +- Streams_002/readme.md | 2 +- Streams_003/readme.md | 2 +- Streams_004/readme.md | 2 +- Streams_005/readme.md | 2 +- Streams_006/readme.md | 2 +- Streams_007/readme.md | 2 +- Streams_008/readme.md | 2 +- Streams_009/readme.md | 2 +- Streams_010/readme.md | 2 +- Strukturierung_001/readme.md | 2 +- Strukturierung_002/readme.md | 2 +- Threads_001/readme.md | 2 +- Threads_002/readme.md | 2 +- Threads_003/readme.md | 2 +- Threads_004/readme.md | 2 +- Threads_005/readme.md | 2 +- Threads_006/readme.md | 2 +- Threads_007/readme.md | 2 +- Threads_008/readme.md | 2 +- Vererbung_001/readme.md | 2 +- Vererbung_002/readme.md | 2 +- Vererbung_003/readme.md | 2 +- Vererbung_004/readme.md | 2 +- Vererbung_005/readme.md | 2 +- Vererbung_006/readme.md | 2 +- Vererbung_007/readme.md | 2 +- Vererbung_008/readme.md | 2 +- Vererbung_009/readme.md | 2 +- Vererbung_010/readme.md | 2 +- Vererbung_011/readme.md | 2 +- Vererbung_012/readme.md | 2 +- readme.md | 222 +- solutions/pmd.xml | 2297 +---------------- solutions/pom.xml | 52 +- .../auffrischung/grossmacher/Grossmacher.java | 16 - .../labeled_break/ArraySucher.java | 27 - .../password/PasswortChecker.java | 53 - .../auffrischung/printf/DoubleFormatter.java | 18 - .../auffrischung/suchemax/GroessteZahl.java | 21 - .../taschenrechner/Taschenrechner.java | 25 - .../pr2/collections/iterator/SimpleStack.java | 79 - .../iterator/test/SimpleStackTest.java | 86 - .../pr2/collections/list/WordCollector.java | 123 - .../pr2/collections/list_iterator/Liste.java | 57 - .../java/pr2/collections/map/WordCount.java | 83 - .../pr2/collections/map/WordFrequency.java | 56 - .../pr2/collections/reverser/Reverser.java | 18 - .../reverser/test/ReverserTest.java | 23 - .../reverser_generic/Reverser.java | 19 - .../reverser_generic/test/ReverserTest.java | 23 - .../pr2/collections/set/WordCollector.java | 81 - .../sorter_1/CommandLineSorter.java | 17 - .../sorter_2/CommandLineSorter.java | 16 - .../pr2/collections/sortieren/Sorter.java | 83 - .../sortieren/test/SorterTest.java | 75 - .../collections/woerterbuch/Woerterbuch.java | 37 - .../main/java/pr2/enums/eigene/Wuerfel.java | 38 - .../java/pr2/enums/eigene/WuerfelTyp.java | 70 - .../pr2/enums/eigene/test/WuerfelTest.java | 41 - .../java/pr2/enums/filme/LieblingsFilme.java | 50 - .../src/main/java/pr2/enums/filme/Main.java | 9 - .../src/main/java/pr2/enums/schnick/Move.java | 46 - .../enums/schnick/SchnickSchnackSchnuck.java | 89 - .../main/java/pr2/enums/singleton/MyEnum.java | 7 - .../pr2/enums/singleton/SingletonBeweis.java | 14 - .../ausnahmen_testen/CrypterCaesar.java | 164 -- .../ausnahmen_testen/IllegalKeyException.java | 31 - .../IllegalMessageException.java | 31 - .../ausnahmen_testen/test/CaesarTest.java | 149 -- .../pr2/exceptions/eigene_ausnahme/Fuse.java | 58 - .../eigene_ausnahme/FuseTrippedException.java | 37 - .../IllegalCurrentException.java | 30 - .../eigene_ausnahme/test/FuseTest.java | 158 -- .../pr2/exceptions/fakultaet/Fakultaet.java | 18 - .../fakultaet/FakultaetException.java | 15 - .../fakultaet/test/FakultaetTest.java | 38 - .../handle_or_declare/Buchstabenzaehler.java | 120 - .../handle_or_declare/StatistikException.java | 31 - .../pr2/exceptions/try_catch/Zahlenraten.java | 68 - .../main/java/pr2/generics/einfach/Liste.java | 88 - .../java/pr2/generics/einfach/ListeNode.java | 28 - .../pr2/generics/einfach/test/ListeTest.java | 61 - .../java/pr2/generics/number_pair/Main.java | 15 - .../pr2/generics/number_pair/NumberPair.java | 8 - .../java/pr2/generics/number_pair/Pair.java | 20 - .../src/main/java/pr2/generics/pair/Main.java | 17 - .../src/main/java/pr2/generics/pair/Pair.java | 20 - .../main/java/pr2/generics/pairlist/Main.java | 19 - .../main/java/pr2/generics/pairlist/Pair.java | 20 - .../java/pr2/generics/pairlist/PairList.java | 20 - .../generics/printer/CollectionPrinter.java | 11 - .../main/java/pr2/generics/printer/Main.java | 23 - .../main/java/pr2/generics/queue/Queue.java | 39 - .../java/pr2/generics/same_pair/Main.java | 15 - .../java/pr2/generics/same_pair/Pair.java | 20 - .../java/pr2/generics/same_pair/SamePair.java | 8 - .../pr2/generics/super_extends/Liste.java | 108 - .../pr2/generics/super_extends/ListeNode.java | 28 - .../super_extends/test/ListeTest.java | 42 - .../pr2/generics/wildcards/ListHelper.java | 35 - .../java/pr2/generics/wildcards/Main.java | 39 - .../pr2/generics/wildcards/SimpleList.java | 12 - .../pr2/interfaces/abstrakt_form/Form.java | 16 - .../abstrakte_klassen_s/Dreieck.java | 39 - .../interfaces/abstrakte_klassen_s/Figur.java | 14 - .../abstrakte_klassen_s/Geometer.java | 43 - .../interfaces/abstrakte_klassen_s/Kreis.java | 32 - .../comparable_student/Student.java | 42 - .../interfaces_s/api/AnalogController.java | 44 - .../interfaces_s/api/DigitalController.java | 36 - .../impl/AnalogControllerImpl.java | 61 - .../impl/DigitalControllerImpl.java | 55 - .../interfaces_s/impl/DualShock4.java | 95 - .../test/AnalogControllerTest.java | 52 - .../test/DigitalControllerTest.java | 62 - .../interfaces_s/test/DualShock4Test.java | 45 - .../main/java/pr2/interfaces/stack/Stack.java | 12 - .../java/pr2/interfaces/stack/StackImpl.java | 43 - .../pr2/interfaces/stack/test/StackTest.java | 35 - .../interfaces/uebersetzer/Translator.java | 37 - .../interfaces/uebersetzer/Uebersetzer.java | 13 - .../UebersetzerDeutschEnglisch.java | 16 - .../UebersetzerDeutschSpanisch.java | 16 - .../intro/coding_standard/CodingStandard.java | 52 - .../main/java/pr2/intro/javadoc/Waehrung.java | 140 - .../pr2/intro/junit_faculty/Fakultaet.java | 14 - .../junit_faculty/test/FakultaetTest.java | 20 - .../io/buffered_reader/LineNumberPrinter.java | 36 - .../main/java/pr2/io/data_output/Board.java | 172 -- .../main/java/pr2/io/data_output/Color.java | 30 - .../pr2/io/data_output/test/BoardTest.java | 63 - .../pr2/io/datainputoutput_1/DateReader.java | 43 - .../pr2/io/datainputoutput_1/DateWriter.java | 63 - .../pr2/io/datainputoutput_2/DateReader.java | 45 - .../pr2/io/datainputoutput_2/DateWriter.java | 63 - .../java/pr2/io/datei_lesen/ReadData.java | 33 - .../pr2/io/datei_schreiben/WriteData.java | 33 - .../pr2/io/datei_schreiben/test/DataTest.java | 39 - .../java/pr2/io/file/FilesystemWalker.java | 94 - .../main/java/pr2/io/filetest/FileInfo.java | 40 - .../main/java/pr2/io/filter/UCaseReader.java | 36 - .../pr2/io/filter/test/UCaseReaderTest.java | 34 - .../java/pr2/io/konsole/ConsoleToFile.java | 46 - .../java/pr2/io/linecounter/LineCounter.java | 29 - .../java/pr2/io/random_access/FileSort.java | 58 - .../io/random_access/test/FileSortTest.java | 63 - .../io/reader_writer/ReadAndPrintFile.java | 34 - .../src/main/java/pr2/io/rot13/Rot13.java | 25 - .../main/java/pr2/io/rot13/Rot13Reader.java | 24 - .../main/java/pr2/io/scrambler/Scrambler.java | 38 - .../java/pr2/io/serialisierung/Board.java | 139 - .../java/pr2/io/serialisierung/Color.java | 30 - .../pr2/io/serialisierung/test/BoardTest.java | 46 - .../pr2/lambda/array_sorter/ReverseSort.java | 28 - .../main/java/pr2/lambda/callback/Main.java | 46 - .../pr2/lambda/callback/NumberSelector.java | 30 - .../java/pr2/lambda/callback/Predicate.java | 20 - .../pr2/lambda/comparator/SortLambda.java | 12 - .../main/java/pr2/lambda/lambdas/Main.java | 31 - .../pr2/lambda/lambdas/NumberSelector.java | 30 - .../java/pr2/lambda/lambdas/Predicate.java | 20 - .../pr2/lambda/matrixsuche/MatrixSuche.java | 39 - .../matrixsuche/test/MatrixSucheTest.java | 32 - .../lambda/mogrifier_1/StringFunction.java | 6 - .../mogrifier_1/StringTransmogrifier.java | 14 - .../test/StringTransmogrifierTest.java | 33 - .../lambda/mogrifier_2/StringFunction.java | 18 - .../mogrifier_2/StringTransmogrifier.java | 14 - .../test/StringTransmogrifierTest.java | 43 - .../java/pr2/lambda/observer/Beobachter.java | 5 - .../java/pr2/lambda/observer/Datenhalter.java | 23 - .../lambda/observer/DatenhalterAnonym.java | 19 - .../lambda/observer/test/BeobachterTest.java | 17 - .../java/pr2/object/clone_alien/Alien.java | 100 - .../pr2/object/clone_alien/Raumanzug.java | 75 - .../clone_alien/test/AlienCloneTest.java | 37 - .../java/pr2/object/clone_person/Person.java | 34 - .../java/pr2/object/equals_hashcode/Ork.java | 57 - .../pr2/object/equals_hashcode/Wesen.java | 66 - .../equals_hashcode/test/WesenTest.java | 87 - .../java/pr2/object/equals_person/Person.java | 54 - .../main/java/pr2/object/tostring/Alien.java | 56 - .../java/pr2/object/tostring/Ausgabe.java | 24 - .../java/pr2/object/tostring/Raumanzug.java | 52 - .../object/wrapper_boxsearch/BoxSearcher.java | 18 - .../object/wrapper_umwandler/Umwandler.java | 47 - .../pr2/streams/chars_1/CountLetters.java | 13 - .../chars_1/test/CountLettersTest.java | 16 - .../pr2/streams/chars_2/CountLetters.java | 16 - .../chars_2/test/CountLettersTest.java | 19 - .../pr2/streams/chars_3/CountLetters.java | 17 - .../chars_3/test/CountLettersTest.java | 19 - .../java/pr2/streams/filter/FilterList.java | 17 - .../streams/filter/test/FilterListTest.java | 25 - .../interne_iteration/ComputerGame.java | 87 - .../interne_iteration/GameDatabase.java | 61 - .../streams/interne_iteration/ListGames.java | 39 - .../pr2/streams/map_filter/ComputerGame.java | 88 - .../pr2/streams/map_filter/GameDatabase.java | 61 - .../streams/map_filter/MapFilterGames.java | 47 - .../main/java/pr2/streams/reduce/Squarer.java | 25 - .../pr2/streams/reduce/test/SquarerTest.java | 26 - .../streams/reduce_critics/ComputerGame.java | 88 - .../streams/reduce_critics/GameDatabase.java | 61 - .../reduce_critics/MapReduceGames.java | 41 - .../java/pr2/streams/summieren/SumUp.java | 11 - .../pr2/streams/summieren/test/SumUpTest.java | 18 - .../pr2/streams/word_count/WordCount.java | 20 - .../word_count/test/WordCountTest.java | 21 - .../information_hiding/Rechner.java | 60 - .../information_hiding/test/RechnerTest.java | 50 - .../threads/fakultaet/FakultaetParallel.java | 51 - .../main/java/pr2/threads/fakultaet/Main.java | 13 - .../pr2/threads/interrupt/ThreadsBeenden.java | 26 - .../main/java/pr2/threads/notifier/Main.java | 40 - .../java/pr2/threads/notifier/Notifier.java | 34 - .../paralleldrucker/ParallelDrucker.java | 25 - .../java/pr2/threads/race_condition/Main.java | 41 - .../race_condition/NumberIncrementer.java | 42 - .../threads/race_condition/NumberList.java | 60 - .../pr2/threads/stack_heap/ThreadProblem.java | 32 - .../pr2/threads/synchronize/Synchronizer.java | 24 - .../pr2/threads/timer/FakultaetTimer.java | 39 - .../src/main/java/pr2/threads/timer/Main.java | 14 - .../src/main/java/pr2/vererbung/finals/A.java | 32 - .../src/main/java/pr2/vererbung/finals/B.java | 22 - .../java/pr2/vererbung/geometrie1/Figur.java | 14 - .../java/pr2/vererbung/geometrie1/Main.java | 12 - .../pr2/vererbung/geometrie1/Rechteck.java | 8 - .../java/pr2/vererbung/geometrie2/Figur.java | 6 - .../java/pr2/vererbung/geometrie2/Main.java | 12 - .../pr2/vererbung/geometrie2/Rechteck.java | 8 - .../pr2/vererbung/geometrie3/Dreieck.java | 8 - .../java/pr2/vererbung/geometrie3/Figur.java | 19 - .../java/pr2/vererbung/geometrie3/Gerade.java | 17 - .../java/pr2/vererbung/geometrie3/Main.java | 12 - .../pr2/vererbung/geometrie3/Quadrat.java | 8 - .../pr2/vererbung/geometrie3/Rechteck.java | 8 - .../pr2/vererbung/konstruktoren/Nachtelf.java | 47 - .../pr2/vererbung/konstruktoren/Untoter.java | 47 - .../pr2/vererbung/konstruktoren/Wesen.java | 30 - .../konstruktoren/test/WesenTest.java | 47 - .../java/pr2/vererbung/polymorphie/Affe.java | 16 - .../vererbung/polymorphie/Futterstelle.java | 17 - .../pr2/vererbung/polymorphie/Giraffe.java | 16 - .../pr2/vererbung/polymorphie/Gorilla.java | 16 - .../vererbung/polymorphie/ZooSimulation.java | 40 - .../pr2/vererbung/polymorphie/ZooTier.java | 41 - .../singleton_einfach/Singleton.java | 12 - .../java/pr2/vererbung/statics/Spiel.java | 35 - .../java/pr2/vererbung/statics/Wuerfel.java | 53 - .../vererbung/ueberladen_summe/Summator.java | 20 - .../ueberladen_summe/test/SummatorTest.java | 22 - .../ueberschreiben_lebewesen/Amoebe.java | 9 - .../ueberschreiben_lebewesen/Dackel.java | 13 - .../ueberschreiben_lebewesen/Lebewesen.java | 8 - .../ueberschreiben_lebewesen/Main.java | 16 - .../pr2/vererbung/vararg_summe/Summator.java | 22 - .../vararg_summe/test/SummatorTest.java | 23 - .../vererbung_geometrie/Dreieck.java | 17 - .../vererbung/vererbung_geometrie/Figur.java | 37 - .../vererbung/vererbung_geometrie/Gerade.java | 31 - .../vererbung_geometrie/Quadrat.java | 16 - .../vererbung_geometrie/Rechteck.java | 17 - .../vererbung_geometrie/test/FigurenTest.java | 67 - sources/pmd.xml | 2297 +---------------- sources/pom.xml | 52 +- .../iterator/test/SimpleStackTest.java | 87 - .../reverser/test/ReverserTest.java | 18 - .../reverser_generic/test/ReverserTest.java | 18 - .../sortieren/test/SorterTest.java | 75 - .../pr2/enums/eigene/test/WuerfelTest.java | 60 - .../ausnahmen_testen/test/CaesarTest.java | 36 - .../eigene_ausnahme/test/FuseTest.java | 159 -- .../fakultaet/test/FakultaetTest.java | 32 - .../pr2/generics/einfach/test/ListeTest.java | 61 - .../super_extends/test/ListeTest.java | 43 - .../java/pr2/generics/wildcards/Main.java | 2 + .../test/AnalogControllerTest.java | 53 - .../test/DigitalControllerTest.java | 63 - .../interfaces_e/test/DualShock4Test.java | 43 - .../pr2/interfaces/stack/test/StackTest.java | 36 - .../junit_faculty/test/FakultaetTest.java | 13 - .../pr2/io/data_output/test/BoardTest.java | 63 - .../pr2/io/datei_schreiben/WriteData.java | 8 +- .../pr2/io/datei_schreiben/test/DataTest.java | 39 - .../pr2/io/filter/test/UCaseReaderTest.java | 35 - .../io/random_access/test/FileSortTest.java | 63 - .../pr2/io/serialisierung/test/BoardTest.java | 46 - .../matrixsuche/test/MatrixSucheTest.java | 33 - .../test/StringTransmogrifierTest.java | 15 - .../test/StringTransmogrifierTest.java | 38 - .../clone_alien/test/AlienCloneTest.java | 38 - .../equals_hashcode/test/WesenTest.java | 87 - .../chars_1/test/CountLettersTest.java | 13 - .../chars_2/test/CountLettersTest.java | 16 - .../chars_3/test/CountLettersTest.java | 16 - .../streams/filter/test/FilterListTest.java | 25 - .../pr2/streams/reduce/test/SquarerTest.java | 26 - .../pr2/streams/summieren/test/SumUpTest.java | 18 - .../word_count/test/WordCountTest.java | 21 - .../information_hiding/test/RechnerTest.java | 38 - .../konstruktoren/test/WesenTest.java | 49 - .../ueberladen_summe/test/SummatorTest.java | 23 - .../vararg_summe/test/SummatorTest.java | 24 - .../vererbung_geometrie/test/FigurenTest.java | 71 - .../resources/pr2/io/random_access/data.dat | Bin 100 -> 0 bytes .../pr2/io/random_access/output/.gitkeep | 0 .../pr2/io/serialisierung/testdata.dat | Bin 443 -> 0 bytes 382 files changed, 405 insertions(+), 15264 deletions(-) delete mode 100644 solutions/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java delete mode 100644 solutions/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java delete mode 100644 solutions/src/main/java/pr2/auffrischung/password/PasswortChecker.java delete mode 100644 solutions/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java delete mode 100644 solutions/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java delete mode 100644 solutions/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java delete mode 100644 solutions/src/main/java/pr2/collections/iterator/SimpleStack.java delete mode 100644 solutions/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java delete mode 100644 solutions/src/main/java/pr2/collections/list/WordCollector.java delete mode 100644 solutions/src/main/java/pr2/collections/list_iterator/Liste.java delete mode 100644 solutions/src/main/java/pr2/collections/map/WordCount.java delete mode 100644 solutions/src/main/java/pr2/collections/map/WordFrequency.java delete mode 100644 solutions/src/main/java/pr2/collections/reverser/Reverser.java delete mode 100644 solutions/src/main/java/pr2/collections/reverser/test/ReverserTest.java delete mode 100644 solutions/src/main/java/pr2/collections/reverser_generic/Reverser.java delete mode 100644 solutions/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java delete mode 100644 solutions/src/main/java/pr2/collections/set/WordCollector.java delete mode 100644 solutions/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java delete mode 100644 solutions/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java delete mode 100644 solutions/src/main/java/pr2/collections/sortieren/Sorter.java delete mode 100644 solutions/src/main/java/pr2/collections/sortieren/test/SorterTest.java delete mode 100644 solutions/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java delete mode 100644 solutions/src/main/java/pr2/enums/eigene/Wuerfel.java delete mode 100644 solutions/src/main/java/pr2/enums/eigene/WuerfelTyp.java delete mode 100644 solutions/src/main/java/pr2/enums/eigene/test/WuerfelTest.java delete mode 100644 solutions/src/main/java/pr2/enums/filme/LieblingsFilme.java delete mode 100644 solutions/src/main/java/pr2/enums/filme/Main.java delete mode 100644 solutions/src/main/java/pr2/enums/schnick/Move.java delete mode 100644 solutions/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java delete mode 100644 solutions/src/main/java/pr2/enums/singleton/MyEnum.java delete mode 100644 solutions/src/main/java/pr2/enums/singleton/SingletonBeweis.java delete mode 100644 solutions/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java delete mode 100644 solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java delete mode 100644 solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java delete mode 100644 solutions/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java delete mode 100644 solutions/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java delete mode 100644 solutions/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java delete mode 100644 solutions/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java delete mode 100644 solutions/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java delete mode 100644 solutions/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java delete mode 100644 solutions/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java delete mode 100644 solutions/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java delete mode 100644 solutions/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java delete mode 100644 solutions/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java delete mode 100644 solutions/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java delete mode 100644 solutions/src/main/java/pr2/generics/einfach/Liste.java delete mode 100644 solutions/src/main/java/pr2/generics/einfach/ListeNode.java delete mode 100644 solutions/src/main/java/pr2/generics/einfach/test/ListeTest.java delete mode 100644 solutions/src/main/java/pr2/generics/number_pair/Main.java delete mode 100644 solutions/src/main/java/pr2/generics/number_pair/NumberPair.java delete mode 100644 solutions/src/main/java/pr2/generics/number_pair/Pair.java delete mode 100644 solutions/src/main/java/pr2/generics/pair/Main.java delete mode 100644 solutions/src/main/java/pr2/generics/pair/Pair.java delete mode 100644 solutions/src/main/java/pr2/generics/pairlist/Main.java delete mode 100644 solutions/src/main/java/pr2/generics/pairlist/Pair.java delete mode 100644 solutions/src/main/java/pr2/generics/pairlist/PairList.java delete mode 100644 solutions/src/main/java/pr2/generics/printer/CollectionPrinter.java delete mode 100644 solutions/src/main/java/pr2/generics/printer/Main.java delete mode 100644 solutions/src/main/java/pr2/generics/queue/Queue.java delete mode 100644 solutions/src/main/java/pr2/generics/same_pair/Main.java delete mode 100644 solutions/src/main/java/pr2/generics/same_pair/Pair.java delete mode 100644 solutions/src/main/java/pr2/generics/same_pair/SamePair.java delete mode 100644 solutions/src/main/java/pr2/generics/super_extends/Liste.java delete mode 100644 solutions/src/main/java/pr2/generics/super_extends/ListeNode.java delete mode 100644 solutions/src/main/java/pr2/generics/super_extends/test/ListeTest.java delete mode 100644 solutions/src/main/java/pr2/generics/wildcards/ListHelper.java delete mode 100644 solutions/src/main/java/pr2/generics/wildcards/Main.java delete mode 100644 solutions/src/main/java/pr2/generics/wildcards/SimpleList.java delete mode 100644 solutions/src/main/java/pr2/interfaces/abstrakt_form/Form.java delete mode 100644 solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Dreieck.java delete mode 100644 solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Figur.java delete mode 100644 solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Geometer.java delete mode 100644 solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Kreis.java delete mode 100644 solutions/src/main/java/pr2/interfaces/comparable_student/Student.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/api/AnalogController.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/api/DigitalController.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/impl/AnalogControllerImpl.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DigitalControllerImpl.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DualShock4.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/test/AnalogControllerTest.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/test/DigitalControllerTest.java delete mode 100644 solutions/src/main/java/pr2/interfaces/interfaces_s/test/DualShock4Test.java delete mode 100644 solutions/src/main/java/pr2/interfaces/stack/Stack.java delete mode 100644 solutions/src/main/java/pr2/interfaces/stack/StackImpl.java delete mode 100644 solutions/src/main/java/pr2/interfaces/stack/test/StackTest.java delete mode 100644 solutions/src/main/java/pr2/interfaces/uebersetzer/Translator.java delete mode 100644 solutions/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java delete mode 100644 solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschEnglisch.java delete mode 100644 solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschSpanisch.java delete mode 100644 solutions/src/main/java/pr2/intro/coding_standard/CodingStandard.java delete mode 100644 solutions/src/main/java/pr2/intro/javadoc/Waehrung.java delete mode 100644 solutions/src/main/java/pr2/intro/junit_faculty/Fakultaet.java delete mode 100644 solutions/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java delete mode 100644 solutions/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java delete mode 100644 solutions/src/main/java/pr2/io/data_output/Board.java delete mode 100644 solutions/src/main/java/pr2/io/data_output/Color.java delete mode 100644 solutions/src/main/java/pr2/io/data_output/test/BoardTest.java delete mode 100644 solutions/src/main/java/pr2/io/datainputoutput_1/DateReader.java delete mode 100644 solutions/src/main/java/pr2/io/datainputoutput_1/DateWriter.java delete mode 100644 solutions/src/main/java/pr2/io/datainputoutput_2/DateReader.java delete mode 100644 solutions/src/main/java/pr2/io/datainputoutput_2/DateWriter.java delete mode 100644 solutions/src/main/java/pr2/io/datei_lesen/ReadData.java delete mode 100644 solutions/src/main/java/pr2/io/datei_schreiben/WriteData.java delete mode 100644 solutions/src/main/java/pr2/io/datei_schreiben/test/DataTest.java delete mode 100644 solutions/src/main/java/pr2/io/file/FilesystemWalker.java delete mode 100644 solutions/src/main/java/pr2/io/filetest/FileInfo.java delete mode 100644 solutions/src/main/java/pr2/io/filter/UCaseReader.java delete mode 100644 solutions/src/main/java/pr2/io/filter/test/UCaseReaderTest.java delete mode 100644 solutions/src/main/java/pr2/io/konsole/ConsoleToFile.java delete mode 100644 solutions/src/main/java/pr2/io/linecounter/LineCounter.java delete mode 100644 solutions/src/main/java/pr2/io/random_access/FileSort.java delete mode 100644 solutions/src/main/java/pr2/io/random_access/test/FileSortTest.java delete mode 100644 solutions/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java delete mode 100644 solutions/src/main/java/pr2/io/rot13/Rot13.java delete mode 100644 solutions/src/main/java/pr2/io/rot13/Rot13Reader.java delete mode 100644 solutions/src/main/java/pr2/io/scrambler/Scrambler.java delete mode 100644 solutions/src/main/java/pr2/io/serialisierung/Board.java delete mode 100644 solutions/src/main/java/pr2/io/serialisierung/Color.java delete mode 100644 solutions/src/main/java/pr2/io/serialisierung/test/BoardTest.java delete mode 100644 solutions/src/main/java/pr2/lambda/array_sorter/ReverseSort.java delete mode 100644 solutions/src/main/java/pr2/lambda/callback/Main.java delete mode 100644 solutions/src/main/java/pr2/lambda/callback/NumberSelector.java delete mode 100644 solutions/src/main/java/pr2/lambda/callback/Predicate.java delete mode 100644 solutions/src/main/java/pr2/lambda/comparator/SortLambda.java delete mode 100644 solutions/src/main/java/pr2/lambda/lambdas/Main.java delete mode 100644 solutions/src/main/java/pr2/lambda/lambdas/NumberSelector.java delete mode 100644 solutions/src/main/java/pr2/lambda/lambdas/Predicate.java delete mode 100644 solutions/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java delete mode 100644 solutions/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java delete mode 100644 solutions/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java delete mode 100644 solutions/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java delete mode 100644 solutions/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java delete mode 100644 solutions/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java delete mode 100644 solutions/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java delete mode 100644 solutions/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java delete mode 100644 solutions/src/main/java/pr2/lambda/observer/Beobachter.java delete mode 100644 solutions/src/main/java/pr2/lambda/observer/Datenhalter.java delete mode 100644 solutions/src/main/java/pr2/lambda/observer/DatenhalterAnonym.java delete mode 100644 solutions/src/main/java/pr2/lambda/observer/test/BeobachterTest.java delete mode 100644 solutions/src/main/java/pr2/object/clone_alien/Alien.java delete mode 100644 solutions/src/main/java/pr2/object/clone_alien/Raumanzug.java delete mode 100644 solutions/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java delete mode 100644 solutions/src/main/java/pr2/object/clone_person/Person.java delete mode 100644 solutions/src/main/java/pr2/object/equals_hashcode/Ork.java delete mode 100644 solutions/src/main/java/pr2/object/equals_hashcode/Wesen.java delete mode 100644 solutions/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java delete mode 100644 solutions/src/main/java/pr2/object/equals_person/Person.java delete mode 100644 solutions/src/main/java/pr2/object/tostring/Alien.java delete mode 100644 solutions/src/main/java/pr2/object/tostring/Ausgabe.java delete mode 100644 solutions/src/main/java/pr2/object/tostring/Raumanzug.java delete mode 100644 solutions/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java delete mode 100644 solutions/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java delete mode 100644 solutions/src/main/java/pr2/streams/chars_1/CountLetters.java delete mode 100644 solutions/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java delete mode 100644 solutions/src/main/java/pr2/streams/chars_2/CountLetters.java delete mode 100644 solutions/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java delete mode 100644 solutions/src/main/java/pr2/streams/chars_3/CountLetters.java delete mode 100644 solutions/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java delete mode 100644 solutions/src/main/java/pr2/streams/filter/FilterList.java delete mode 100644 solutions/src/main/java/pr2/streams/filter/test/FilterListTest.java delete mode 100644 solutions/src/main/java/pr2/streams/interne_iteration/ComputerGame.java delete mode 100644 solutions/src/main/java/pr2/streams/interne_iteration/GameDatabase.java delete mode 100644 solutions/src/main/java/pr2/streams/interne_iteration/ListGames.java delete mode 100644 solutions/src/main/java/pr2/streams/map_filter/ComputerGame.java delete mode 100644 solutions/src/main/java/pr2/streams/map_filter/GameDatabase.java delete mode 100644 solutions/src/main/java/pr2/streams/map_filter/MapFilterGames.java delete mode 100644 solutions/src/main/java/pr2/streams/reduce/Squarer.java delete mode 100644 solutions/src/main/java/pr2/streams/reduce/test/SquarerTest.java delete mode 100644 solutions/src/main/java/pr2/streams/reduce_critics/ComputerGame.java delete mode 100644 solutions/src/main/java/pr2/streams/reduce_critics/GameDatabase.java delete mode 100644 solutions/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java delete mode 100644 solutions/src/main/java/pr2/streams/summieren/SumUp.java delete mode 100644 solutions/src/main/java/pr2/streams/summieren/test/SumUpTest.java delete mode 100644 solutions/src/main/java/pr2/streams/word_count/WordCount.java delete mode 100644 solutions/src/main/java/pr2/streams/word_count/test/WordCountTest.java delete mode 100644 solutions/src/main/java/pr2/strukturierung/information_hiding/Rechner.java delete mode 100644 solutions/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java delete mode 100644 solutions/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java delete mode 100644 solutions/src/main/java/pr2/threads/fakultaet/Main.java delete mode 100644 solutions/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java delete mode 100644 solutions/src/main/java/pr2/threads/notifier/Main.java delete mode 100644 solutions/src/main/java/pr2/threads/notifier/Notifier.java delete mode 100644 solutions/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java delete mode 100644 solutions/src/main/java/pr2/threads/race_condition/Main.java delete mode 100644 solutions/src/main/java/pr2/threads/race_condition/NumberIncrementer.java delete mode 100644 solutions/src/main/java/pr2/threads/race_condition/NumberList.java delete mode 100644 solutions/src/main/java/pr2/threads/stack_heap/ThreadProblem.java delete mode 100644 solutions/src/main/java/pr2/threads/synchronize/Synchronizer.java delete mode 100644 solutions/src/main/java/pr2/threads/timer/FakultaetTimer.java delete mode 100644 solutions/src/main/java/pr2/threads/timer/Main.java delete mode 100644 solutions/src/main/java/pr2/vererbung/finals/A.java delete mode 100644 solutions/src/main/java/pr2/vererbung/finals/B.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie1/Figur.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie1/Main.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie1/Rechteck.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie2/Figur.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie2/Main.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie2/Rechteck.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie3/Dreieck.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie3/Figur.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie3/Gerade.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie3/Main.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie3/Quadrat.java delete mode 100644 solutions/src/main/java/pr2/vererbung/geometrie3/Rechteck.java delete mode 100644 solutions/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java delete mode 100644 solutions/src/main/java/pr2/vererbung/konstruktoren/Untoter.java delete mode 100644 solutions/src/main/java/pr2/vererbung/konstruktoren/Wesen.java delete mode 100644 solutions/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java delete mode 100644 solutions/src/main/java/pr2/vererbung/polymorphie/Affe.java delete mode 100644 solutions/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java delete mode 100644 solutions/src/main/java/pr2/vererbung/polymorphie/Giraffe.java delete mode 100644 solutions/src/main/java/pr2/vererbung/polymorphie/Gorilla.java delete mode 100644 solutions/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java delete mode 100644 solutions/src/main/java/pr2/vererbung/polymorphie/ZooTier.java delete mode 100644 solutions/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java delete mode 100644 solutions/src/main/java/pr2/vererbung/statics/Spiel.java delete mode 100644 solutions/src/main/java/pr2/vererbung/statics/Wuerfel.java delete mode 100644 solutions/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java delete mode 100644 solutions/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java delete mode 100644 solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java delete mode 100644 solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java delete mode 100644 solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java delete mode 100644 solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vararg_summe/Summator.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java delete mode 100644 solutions/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java delete mode 100644 sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java delete mode 100644 sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java delete mode 100644 sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java delete mode 100644 sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java delete mode 100644 sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java delete mode 100644 sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java delete mode 100644 sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java delete mode 100644 sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java delete mode 100644 sources/src/main/java/pr2/generics/einfach/test/ListeTest.java delete mode 100644 sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java delete mode 100644 sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java delete mode 100644 sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java delete mode 100644 sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java delete mode 100644 sources/src/main/java/pr2/interfaces/stack/test/StackTest.java delete mode 100644 sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java delete mode 100644 sources/src/main/java/pr2/io/data_output/test/BoardTest.java delete mode 100644 sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java delete mode 100644 sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java delete mode 100644 sources/src/main/java/pr2/io/random_access/test/FileSortTest.java delete mode 100644 sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java delete mode 100644 sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java delete mode 100644 sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java delete mode 100644 sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java delete mode 100644 sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java delete mode 100644 sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java delete mode 100644 sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java delete mode 100644 sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java delete mode 100644 sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java delete mode 100644 sources/src/main/java/pr2/streams/filter/test/FilterListTest.java delete mode 100644 sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java delete mode 100644 sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java delete mode 100644 sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java delete mode 100644 sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java delete mode 100644 sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java delete mode 100644 sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java delete mode 100644 sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java delete mode 100644 sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java delete mode 100644 sources/src/main/resources/pr2/io/random_access/data.dat delete mode 100644 sources/src/main/resources/pr2/io/random_access/output/.gitkeep delete mode 100644 sources/src/main/resources/pr2/io/serialisierung/testdata.dat diff --git a/Abstrakte_Klassen_001/readme.md b/Abstrakte_Klassen_001/readme.md index ae04afe..5473313 100644 --- a/Abstrakte_Klassen_001/readme.md +++ b/Abstrakte_Klassen_001/readme.md @@ -1,6 +1,6 @@ # Abstrakte Klassen ## Lernziel - [Musterlösung](solution/) + Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten. diff --git a/Abstrakte_Klassen_002/readme.md b/Abstrakte_Klassen_002/readme.md index 6f073f6..1e421cf 100644 --- a/Abstrakte_Klassen_002/readme.md +++ b/Abstrakte_Klassen_002/readme.md @@ -1,6 +1,6 @@ # Abstrakte Klasse ## Lernziel - [Musterlösung](solution/) + Abstrakte Klasse verwenden. diff --git a/Auffrischung_001/readme.md b/Auffrischung_001/readme.md index afcaab4..eda7a40 100644 --- a/Auffrischung_001/readme.md +++ b/Auffrischung_001/readme.md @@ -1,6 +1,6 @@ # String in Großbuchstaben umwandeln ## Lernziel - [Musterlösung](solution/) + * Daten von der Kommandozeile lesen. diff --git a/Auffrischung_002/readme.md b/Auffrischung_002/readme.md index 45c55b4..9a55dbe 100644 --- a/Auffrischung_002/readme.md +++ b/Auffrischung_002/readme.md @@ -1,6 +1,6 @@ # Labeled Break ## Lernziel - [Musterlösung](solution/) + Ein labeled break verwenden. diff --git a/Auffrischung_003/readme.md b/Auffrischung_003/readme.md index 30f2c44..781c81d 100644 --- a/Auffrischung_003/readme.md +++ b/Auffrischung_003/readme.md @@ -1,6 +1,6 @@ # Passwortbewertung ## Lernziel - [Musterlösung](solution/) + Einfache String-Verarbeitung. diff --git a/Auffrischung_004/readme.md b/Auffrischung_004/readme.md index a523c93..b058cf6 100644 --- a/Auffrischung_004/readme.md +++ b/Auffrischung_004/readme.md @@ -1,6 +1,6 @@ # printf mit Formatstring ## Lernziel - [Musterlösung](solution/) + Formatierung mit Formatstrings. diff --git a/Auffrischung_005/readme.md b/Auffrischung_005/readme.md index a853bd1..20552f8 100644 --- a/Auffrischung_005/readme.md +++ b/Auffrischung_005/readme.md @@ -1,6 +1,6 @@ # Maximum in einem Array suchen ## Lernziel - [Musterlösung](solution/) + Über Arrays iterieren. diff --git a/Auffrischung_006/readme.md b/Auffrischung_006/readme.md index 5d4ba71..874855a 100644 --- a/Auffrischung_006/readme.md +++ b/Auffrischung_006/readme.md @@ -1,6 +1,6 @@ # Taschenrechner ## Lernziel - [Musterlösung](solution/) + `case` verwenden. diff --git a/Ausnahmen_001/readme.md b/Ausnahmen_001/readme.md index 2872da7..25d3898 100644 --- a/Ausnahmen_001/readme.md +++ b/Ausnahmen_001/readme.md @@ -1,6 +1,6 @@ # Ausnahmen testen ## Lernziel - [Musterlösung](solution/) + Bei einer gegebenen Klasse Testfälle mit JUnit schreiben, die auf das Werfen von Ausnahmen testen. diff --git a/Ausnahmen_002/readme.md b/Ausnahmen_002/readme.md index 2d6059b..a7299c1 100644 --- a/Ausnahmen_002/readme.md +++ b/Ausnahmen_002/readme.md @@ -1,6 +1,6 @@ # Eigene Ausnahmen schreiben und an entsprechender Stelle werfen ## Lernziel - [Musterlösung](solution/) + Ausnahmen programmieren und sinnvoll einsetzen. Bedeutung der Schlüsselwörter `throws` und `throw` verstehen. diff --git a/Ausnahmen_003/readme.md b/Ausnahmen_003/readme.md index e51f4aa..4713aa3 100644 --- a/Ausnahmen_003/readme.md +++ b/Ausnahmen_003/readme.md @@ -1,6 +1,6 @@ # Eigene Exception schreiben ## Lernziel - [Musterlösung](solution/) + Eigene Exceptions entwerfen und verwenden. diff --git a/Ausnahmen_004/readme.md b/Ausnahmen_004/readme.md index 7be7da1..514e219 100644 --- a/Ausnahmen_004/readme.md +++ b/Ausnahmen_004/readme.md @@ -1,6 +1,6 @@ # Handle-or-Declare-Regel anwenden ## Lernziel - [Musterlösung](solution/) + In einem vorhandenen Programm die Ausnahmen korrekt weiter deklarieren und an den richtigen Stellen fangen. diff --git a/Ausnahmen_005/readme.md b/Ausnahmen_005/readme.md index fd0b99c..0541024 100644 --- a/Ausnahmen_005/readme.md +++ b/Ausnahmen_005/readme.md @@ -1,6 +1,6 @@ # Ausnahmen mit `try` und `catch` behandeln. ## Lernziel - [Musterlösung](solution/) + Vorhandene Ausnahmen mit `try` und `catch` abfangen und behandeln. diff --git a/Collections_001/readme.md b/Collections_001/readme.md index f36bba3..75fa977 100644 --- a/Collections_001/readme.md +++ b/Collections_001/readme.md @@ -1,6 +1,6 @@ # Iterator schreiben ## Lernziel - [Musterlösung](solution/) + Für eine gegebene Klasse einen Iterator schreiben. diff --git a/Collections_002/readme.md b/Collections_002/readme.md index ac0bb90..32bc0e1 100644 --- a/Collections_002/readme.md +++ b/Collections_002/readme.md @@ -1,6 +1,6 @@ # Iterator programmieren ## Lernziel - [Musterlösung](solution/) + Iteratoren verstehen und programmieren. diff --git a/Collections_003/readme.md b/Collections_003/readme.md index 52866c4..e76858f 100644 --- a/Collections_003/readme.md +++ b/Collections_003/readme.md @@ -1,6 +1,6 @@ # `List` und dessen Implementierungen ## Lernziel - [Musterlösung](solution/) + Das Interface `List` und eine passende Implementierung einsetzen. @@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.collections.list](../sources/src/main/java/pr2/colle Im Projekt finden Sie die Klasse `WordCollector` mit deren Hilfe man die Wörter in einem Text analysieren kann. Nach Übergabe eines Dateinamens wird die Datei eingelesen und die vorhandenen Wörter werden gesammelt. Am Ende wird die Liste der Wörter alphabetisch sortiert ausgegeben. -Leider wurde `WordCollector` von einem Entwickler geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden. +Leider wurde `WordCollector` von einem/einer Entwickler:in geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden. Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Schauen Sie sich die Klasse `WordCollector` an und versuchen Sie die Funktionsweise und die Implementierung genau zu verstehen. Dieser Schritt ist wichtig, um die im Folgenden beschriebenen Änderungen an der Klasse vornehmen zu können, lassen Sie sich also Zeit für diesen Schritt. diff --git a/Collections_004/readme.md b/Collections_004/readme.md index d95968f..94b9db9 100644 --- a/Collections_004/readme.md +++ b/Collections_004/readme.md @@ -1,6 +1,6 @@ # `Map` verwenden ## Lernziel - [Musterlösung](solution/) + Das Interface `Map` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten. diff --git a/Collections_005/readme.md b/Collections_005/readme.md index 5e7737f..b32a790 100644 --- a/Collections_005/readme.md +++ b/Collections_005/readme.md @@ -1,6 +1,6 @@ # ReverserGeneric ## Lernziel - [Musterlösung](solution/) + `Comparable` verstehen und nutzen. diff --git a/Collections_006/readme.md b/Collections_006/readme.md index 812e15e..1e3a537 100644 --- a/Collections_006/readme.md +++ b/Collections_006/readme.md @@ -1,6 +1,6 @@ # Strings umgekehrt sortieren: Reverser ## Lernziel - [Musterlösung](solution/) + `Comparable` verstehen und nutzen. diff --git a/Collections_007/readme.md b/Collections_007/readme.md index 5708a8f..8d2d161 100644 --- a/Collections_007/readme.md +++ b/Collections_007/readme.md @@ -1,6 +1,6 @@ # `Set` und dessen Implementierungen ## Lernziel - [Musterlösung](solution/) + Das Interface `Set` und eine passende Implementierung einsetzen. @@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.collections.set](../sources/src/main/java/pr2/collec Im Projekt finden Sie die Klasse `WordCollector` mit deren Hilfe man die Wörter in einem Text analysieren kann. Nach Übergabe eines Dateinamens wird die Datei eingelesen und die vorhandenen Wörter werden gesammelt. Am Ende wird die Liste der Wörter alphabetisch sortiert ausgegeben. -Leider wurde `WordCollector` von einem Entwickler geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden. +Leider wurde `WordCollector` von einem/einer Entwickler:in geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden. Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Schauen Sie sich die Klasse `WordCollector` an und versuchen Sie die Funktionsweise und die Implementierung genau zu verstehen. Dieser Schritt ist wichtig, um die im Folgenden beschriebenen Änderungen an der Klasse vornehmen zu können, lassen Sie sich also Zeit für diesen Schritt. diff --git a/Collections_008/readme.md b/Collections_008/readme.md index 20cae96..f150c63 100644 --- a/Collections_008/readme.md +++ b/Collections_008/readme.md @@ -1,6 +1,6 @@ # CommandLineSorter ## Lernziel - [Musterlösung](solution/) + Sortieren von Collections. diff --git a/Collections_009/readme.md b/Collections_009/readme.md index 13247e8..0d76a7f 100644 --- a/Collections_009/readme.md +++ b/Collections_009/readme.md @@ -1,6 +1,6 @@ # CommandLineSorter -- Version 2 ## Lernziel - [Musterlösung](solution/) + Sortieren von Collections. diff --git a/Collections_010/readme.md b/Collections_010/readme.md index e7fa2f3..7a8066c 100644 --- a/Collections_010/readme.md +++ b/Collections_010/readme.md @@ -1,6 +1,6 @@ # `Comparator` verwenden und Objekte sortieren ## Lernziel - [Musterlösung](solution/) + Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator` realisieren. diff --git a/Collections_011/readme.md b/Collections_011/readme.md index 8e4705c..7fcba71 100644 --- a/Collections_011/readme.md +++ b/Collections_011/readme.md @@ -1,6 +1,6 @@ # Wörterbuchprogramm ## Lernziel - [Musterlösung](solution/) + Interface `Map` und seine Implementierungen einsetzen. @@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.collections.woerterbuch](../sources/src/main/java/pr Schreiben Sie ein einfaches Wörterbuchprogramm, dem man auf der Kommandozeile eine beliebige Anzahl von Wörtern übergeben kann und das dann die entsprechende Übersetzung ausgibt. Die Wörter des Wörterbuchs sollen fest im Programm einprogrammiert sein. Es reicht, wenn Sie einige wenige Wörter vorsehen. -Berücksichtigen Sie bitte den Fall, dass der Benutzer kein Wort auf der Kommandozeile angibt bzw. dass ein Wort nicht im Wörterbuch vorhanden ist. +Berücksichtigen Sie bitte den Fall, dass der/die Benutzer:in kein Wort auf der Kommandozeile angibt bzw. dass ein Wort nicht im Wörterbuch vorhanden ist. ```console > java Woerterbuch diff --git a/Einfuehrung_001/readme.md b/Einfuehrung_001/readme.md index a981876..28b225e 100644 --- a/Einfuehrung_001/readme.md +++ b/Einfuehrung_001/readme.md @@ -1,6 +1,6 @@ # Java-Coding-Standard anwenden ## Lernziel - [Musterlösung](solution/) + Java-Code korrekt entsprechend dem [Coding-Standard von Oracle](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf) formatieren. diff --git a/Einfuehrung_002/readme.md b/Einfuehrung_002/readme.md index 4a2c597..c2907be 100644 --- a/Einfuehrung_002/readme.md +++ b/Einfuehrung_002/readme.md @@ -1,6 +1,6 @@ # JavaDoc schreiben ## Lernziel - [Musterlösung](solution/) + Eine vorhandene Klasse mit korrekten JavaDoc-Kommentaren versehen. diff --git a/Einfuehrung_003/readme.md b/Einfuehrung_003/readme.md index eb86b02..3e208b9 100644 --- a/Einfuehrung_003/readme.md +++ b/Einfuehrung_003/readme.md @@ -1,6 +1,6 @@ # Klasse mit JUnit testen ## Lernziel - [Musterlösung](solution/) + Einen JUnit-Test für eine gegebene Klasse schreiben. diff --git a/Enumerationen_001/readme.md b/Enumerationen_001/readme.md index 60f3890..7b036ac 100644 --- a/Enumerationen_001/readme.md +++ b/Enumerationen_001/readme.md @@ -1,6 +1,6 @@ # Eigene Enumeration schreiben und verwenden ## Lernziel - [Musterlösung](solution/) + Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. diff --git a/Enumerationen_002/readme.md b/Enumerationen_002/readme.md index a21124c..2d96a2e 100644 --- a/Enumerationen_002/readme.md +++ b/Enumerationen_002/readme.md @@ -1,6 +1,6 @@ # Enumeration schreiben ## Lernziel - [Musterlösung](solution/) + Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. diff --git a/Enumerationen_003/readme.md b/Enumerationen_003/readme.md index 1deb232..f986150 100644 --- a/Enumerationen_003/readme.md +++ b/Enumerationen_003/readme.md @@ -1,6 +1,6 @@ # Singleton-Eigenschaft von Enumerationen ## Lernziel - [Musterlösung](solution/) + Die Singleton-Eigenschaft von Enumerationen verstehen. diff --git a/Enumerationen_004/readme.md b/Enumerationen_004/readme.md index c1a5dc3..d63cac8 100644 --- a/Enumerationen_004/readme.md +++ b/Enumerationen_004/readme.md @@ -1,6 +1,6 @@ # Assignment: Stein, Papier, Schere, Echse, Spock ## Lernziel - [Musterlösung](solution/) + Mit Enumerationen arbeiten. diff --git a/Generische_Typen_001/readme.md b/Generische_Typen_001/readme.md index 8fa3cd7..73d89a5 100644 --- a/Generische_Typen_001/readme.md +++ b/Generische_Typen_001/readme.md @@ -1,6 +1,6 @@ # Einen generischen Typ schreiben ## Lernziel - [Musterlösung](solution/) + Einen vorhandenen Typ so umgestalten, dass er als generischer Typ verwendet werden kann. diff --git a/Generische_Typen_002/readme.md b/Generische_Typen_002/readme.md index fa9ab2d..79da9ec 100644 --- a/Generische_Typen_002/readme.md +++ b/Generische_Typen_002/readme.md @@ -1,6 +1,6 @@ # Generische Klasse Pair schreiben ## Lernziel - [Musterlösung](solution/) + Von einem generischen Typ erben. diff --git a/Generische_Typen_003/readme.md b/Generische_Typen_003/readme.md index f4edfcd..682e5e1 100644 --- a/Generische_Typen_003/readme.md +++ b/Generische_Typen_003/readme.md @@ -1,6 +1,6 @@ # Generische Klasse Pair erweitern: NumberPair ## Lernziel - [Musterlösung](solution/) + Von einem generischen Typ erben. diff --git a/Generische_Typen_004/readme.md b/Generische_Typen_004/readme.md index 796bca0..4ae6226 100644 --- a/Generische_Typen_004/readme.md +++ b/Generische_Typen_004/readme.md @@ -1,6 +1,6 @@ # Generische Klasse Pair erweitern: SamePair ## Lernziel - [Musterlösung](solution/) + Von einem generischen Typ erben. diff --git a/Generische_Typen_005/readme.md b/Generische_Typen_005/readme.md index 232d90b..55a9b8f 100644 --- a/Generische_Typen_005/readme.md +++ b/Generische_Typen_005/readme.md @@ -1,6 +1,6 @@ # PairList ## Lernziel - [Musterlösung](solution/) + Sammlungen von Objekten eines generischen Typs erstellen. diff --git a/Generische_Typen_006/readme.md b/Generische_Typen_006/readme.md index c022b93..4cbb3db 100644 --- a/Generische_Typen_006/readme.md +++ b/Generische_Typen_006/readme.md @@ -1,6 +1,6 @@ # Wildcard benutzen ## Lernziel - [Musterlösung](solution/) + Wildcards einsetzen. diff --git a/Generische_Typen_007/readme.md b/Generische_Typen_007/readme.md index 674f811..d14fccf 100644 --- a/Generische_Typen_007/readme.md +++ b/Generische_Typen_007/readme.md @@ -1,6 +1,6 @@ # Generische Queue ## Lernziel - [Musterlösung](solution/) + Einen komplexeren generischen Typ entwickeln. diff --git a/Generische_Typen_008/readme.md b/Generische_Typen_008/readme.md index 90c6490..89d585d 100644 --- a/Generische_Typen_008/readme.md +++ b/Generische_Typen_008/readme.md @@ -1,6 +1,6 @@ # `super` und `extends` einsetzen ## Lernziel - [Musterlösung](solution/) + Methoden unter Verwendung von `super` und `extends` gestalten, sodass sie flexibel auch mit Sub- bzw. Supertypen umgehen können. diff --git a/Generische_Typen_009/readme.md b/Generische_Typen_009/readme.md index ac06be2..d936508 100644 --- a/Generische_Typen_009/readme.md +++ b/Generische_Typen_009/readme.md @@ -1,6 +1,6 @@ # Generische Typen zusammen mit Wildcards einsetzen ## Lernziel - [Musterlösung](solution/) + Gebundene und ungebundene Wildcards einsetzen. diff --git a/Geschachtelte_Klassen_001/readme.md b/Geschachtelte_Klassen_001/readme.md index 093e549..35d8843 100644 --- a/Geschachtelte_Klassen_001/readme.md +++ b/Geschachtelte_Klassen_001/readme.md @@ -1,6 +1,6 @@ # MatrixSuche ## Lernziel - [Musterlösung](solution/) + Statische innere Klassen einsetzen. diff --git a/Geschachtelte_Klassen_002/readme.md b/Geschachtelte_Klassen_002/readme.md index 0933f0b..e6d59c4 100644 --- a/Geschachtelte_Klassen_002/readme.md +++ b/Geschachtelte_Klassen_002/readme.md @@ -1,6 +1,6 @@ # Innere Klasse Beobachter ## Lernziel - [Musterlösung](solution/) + Zugriff von inneren Klassen auf die umgebende Klasse. diff --git a/Geschachtelte_Klassen_003/readme.md b/Geschachtelte_Klassen_003/readme.md index 09845c5..bef6698 100644 --- a/Geschachtelte_Klassen_003/readme.md +++ b/Geschachtelte_Klassen_003/readme.md @@ -1,6 +1,6 @@ # Callback mit anonymer Klasse realisieren ## Lernziel - [Musterlösung](solution/) + Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert. diff --git a/Input_und_Output_001/readme.md b/Input_und_Output_001/readme.md index 810635e..b3dfbe0 100644 --- a/Input_und_Output_001/readme.md +++ b/Input_und_Output_001/readme.md @@ -1,6 +1,6 @@ # `BufferedReader` zum zeilenweisen Lesen einsetzen ## Lernziel - [Musterlösung](solution/) + Daten Zeilenweise mit einem `BufferedReader` verwenden und dabei das Decorator Pattern einsetzen. diff --git a/Input_und_Output_002/readme.md b/Input_und_Output_002/readme.md index e049e0c..bdbab59 100644 --- a/Input_und_Output_002/readme.md +++ b/Input_und_Output_002/readme.md @@ -1,6 +1,6 @@ # DataOutputStream ## Lernziel - [Musterlösung](solution/) + Daten mit einem `DataOutputStreams` manuell serialisieren. diff --git a/Input_und_Output_003/readme.md b/Input_und_Output_003/readme.md index e8683fc..8f0233e 100644 --- a/Input_und_Output_003/readme.md +++ b/Input_und_Output_003/readme.md @@ -1,6 +1,6 @@ # DataOutputStream durch Serialisierung ersetzen ## Lernziel - [Musterlösung](solution/) + Daten mit einem `ObjectOutputStreams` serialisieren. diff --git a/Input_und_Output_004/readme.md b/Input_und_Output_004/readme.md index e31bbe5..4f919a2 100644 --- a/Input_und_Output_004/readme.md +++ b/Input_und_Output_004/readme.md @@ -1,6 +1,6 @@ # Daten mit `DataOutputStream` und `DataInputStream` verarbeiten ## Lernziel - [Musterlösung](solution/) + Ein eigenes Format für die Daten einer Klasse definieren und diese Dann in einer Datei speichern und aus dieser wieder laden. diff --git a/Input_und_Output_005/readme.md b/Input_und_Output_005/readme.md index 8820ca1..7656507 100644 --- a/Input_und_Output_005/readme.md +++ b/Input_und_Output_005/readme.md @@ -1,6 +1,6 @@ # Daten mit einem `InputStream` lesen ## Lernziel - [Musterlösung](solution/) + Einen `InputStream` benutzen, um Daten aus einer Datei zu lesen. diff --git a/Input_und_Output_006/readme.md b/Input_und_Output_006/readme.md index 6dfe63d..986d7fe 100644 --- a/Input_und_Output_006/readme.md +++ b/Input_und_Output_006/readme.md @@ -1,6 +1,6 @@ # Daten mit einem `OutputStream` schreiben ## Lernziel - [Musterlösung](solution/) + Einen `OutputStream` verwenden, um Daten zu schreiben. @@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.io.datei_schreiben](../sources/src/main/java/pr2/io/ In dieser Aufgabe sollen Sie eine Reihe von Bytes in eine Datei schreiben. Ein JUnit-Test wird überprüfen, ob Sie dies richtig getan haben. -Öffnen Sie einen passenden `OutputStream`, um in die Datei `output/daten.dat` zu schreiben (verwenden Sie die Konstante `FILE` für den Dateinamen). Schreiben Sie nun die Byte-Folge +Öffnen Sie einen passenden `OutputStream`, um in die, die Ihnen als Kommandozeilenargument übergeben wird, zu schreiben. Schreiben Sie nun die Byte-Folge ```console 0xca 0xff 0xfe 0xba 0xbe 0x0 0xde 0xad 0xbe 0xef diff --git a/Input_und_Output_007/readme.md b/Input_und_Output_007/readme.md index d0ec5c0..ed6c479 100644 --- a/Input_und_Output_007/readme.md +++ b/Input_und_Output_007/readme.md @@ -1,6 +1,6 @@ # Filesystem-Abstraktion mit `File` ## Lernziel - [Musterlösung](solution/) + Die Klasse `Path` einsetzen, um plattformunabhängig Operationen auf dem Dateisystem durchzuführen. diff --git a/Input_und_Output_008/readme.md b/Input_und_Output_008/readme.md index d3b93cb..f00effd 100644 --- a/Input_und_Output_008/readme.md +++ b/Input_und_Output_008/readme.md @@ -1,6 +1,6 @@ # Fileattribute lesen ## Lernziel - [Musterlösung](solution/) + Methoden der Klassen `Path` und `Files` nutzen und verstehen. diff --git a/Input_und_Output_009/readme.md b/Input_und_Output_009/readme.md index f19ca0c..f16bd04 100644 --- a/Input_und_Output_009/readme.md +++ b/Input_und_Output_009/readme.md @@ -1,6 +1,6 @@ # `FilterReader` ## Lernziel - [Musterlösung](solution/) + Einen eigenen Filter in Form eines `FilterReaders` programmieren und hiermit in den Datenstrom eingreifen. diff --git a/Input_und_Output_010/readme.md b/Input_und_Output_010/readme.md index 94b7736..1856bac 100644 --- a/Input_und_Output_010/readme.md +++ b/Input_und_Output_010/readme.md @@ -1,6 +1,6 @@ # Konsolen Input/Output ## Lernziel - [Musterlösung](solution/) + Daten von der Konsole lesen und über eine Ausgabeumlenkung in eine Datei umlenken. `PrintStream` und `InputStreamReader` einsetzen. diff --git a/Input_und_Output_011/readme.md b/Input_und_Output_011/readme.md index 85eba1c..b7c2b0c 100644 --- a/Input_und_Output_011/readme.md +++ b/Input_und_Output_011/readme.md @@ -1,6 +1,6 @@ # Zeilen einer Textdatei zählen ## Lernziel - [Musterlösung](solution/) + Dateien zeilenweise lesen und verarbeiten. diff --git a/Input_und_Output_012/readme.md b/Input_und_Output_012/readme.md index 9e80fbd..a02cae2 100644 --- a/Input_und_Output_012/readme.md +++ b/Input_und_Output_012/readme.md @@ -1,6 +1,6 @@ # `RandomAccessFile` ## Lernziel - [Musterlösung](solution/) + `RandomAccessFile` sowohl zum Lesen, als auch zum Schreiben von Daten einsetzen. Verstehen, dass man sich wahlfrei durch die Datei bewegen kann. diff --git a/Input_und_Output_013/readme.md b/Input_und_Output_013/readme.md index 90fce18..457c146 100644 --- a/Input_und_Output_013/readme.md +++ b/Input_und_Output_013/readme.md @@ -1,6 +1,6 @@ # `Reader` verwenden ## Lernziel - [Musterlösung](solution/) + Textdaten mithilfe von `Reader` verarbeiten. diff --git a/Input_und_Output_014/readme.md b/Input_und_Output_014/readme.md index 5230a21..4b37ead 100644 --- a/Input_und_Output_014/readme.md +++ b/Input_und_Output_014/readme.md @@ -1,6 +1,6 @@ # Rot13-Verschlüsselung ## Lernziel - [Musterlösung](solution/) + Funktionsweise und Einsatz von Filtern. diff --git a/Input_und_Output_015/readme.md b/Input_und_Output_015/readme.md index 08d101c..c21c74a 100644 --- a/Input_und_Output_015/readme.md +++ b/Input_und_Output_015/readme.md @@ -1,6 +1,6 @@ # Datei zerhacken ## Lernziel - [Musterlösung](solution/) + Daten byteweise aus einem Stream lesen. diff --git a/Input_und_Output_016/readme.md b/Input_und_Output_016/readme.md index 6b0fda0..3c38348 100644 --- a/Input_und_Output_016/readme.md +++ b/Input_und_Output_016/readme.md @@ -1,6 +1,6 @@ # Serialisierung ## Lernziel - [Musterlösung](solution/) + Serialisierung einsetzen können, um Objekte zu persistieren und wieder zu laden. diff --git a/Interfaces_001/readme.md b/Interfaces_001/readme.md index 8fba410..efb5d6d 100644 --- a/Interfaces_001/readme.md +++ b/Interfaces_001/readme.md @@ -1,6 +1,6 @@ # Comparable implementieren ## Lernziel - [Musterlösung](solution/) + Klasse "comparable" machen. diff --git a/Interfaces_002/readme.md b/Interfaces_002/readme.md index 7e55882..94ceda5 100644 --- a/Interfaces_002/readme.md +++ b/Interfaces_002/readme.md @@ -1,6 +1,6 @@ # Interface Stack entwerfen ## Lernziel - [Musterlösung](solution/) + Ein Interface entwerfen und dieses dann implementieren. diff --git a/Interfaces_003/readme.md b/Interfaces_003/readme.md index a16f211..e05c6b9 100644 --- a/Interfaces_003/readme.md +++ b/Interfaces_003/readme.md @@ -1,6 +1,6 @@ # Interface: Uebersetzer ## Lernziel - [Musterlösung](solution/) + Ein Interface implementieren. diff --git a/Interfaces_004/readme.md b/Interfaces_004/readme.md index bf5f3e5..1e20447 100644 --- a/Interfaces_004/readme.md +++ b/Interfaces_004/readme.md @@ -1,6 +1,6 @@ # Interfaces anwenden und entwerfen ## Lernziel - [Musterlösung](solution/) + Ein vorhandenes Interface implementieren und ein eigenes Interface programmieren. Klassen schreiben, die mehrere Interfaces implementieren. Die Kollision von gleichnamigen Interface-Methoden und deren Konsequenzen verstehen. diff --git a/Lambdas_001/readme.md b/Lambdas_001/readme.md index 0540132..d9b8fdb 100644 --- a/Lambdas_001/readme.md +++ b/Lambdas_001/readme.md @@ -1,6 +1,6 @@ # StringTransmogrifier ## Lernziel - [Musterlösung](solution/) + Funktionale Interfaces entwerfen und verwenden. diff --git a/Lambdas_002/readme.md b/Lambdas_002/readme.md index f1ce368..8a3de32 100644 --- a/Lambdas_002/readme.md +++ b/Lambdas_002/readme.md @@ -1,6 +1,6 @@ # StringTransmogrifier erweitern ## Lernziel - [Musterlösung](solution/) + Funktionale Interfaces entwerfen und verwenden. diff --git a/Object_und_Wrapper_001/readme.md b/Object_und_Wrapper_001/readme.md index 7edc4a6..de42507 100644 --- a/Object_und_Wrapper_001/readme.md +++ b/Object_und_Wrapper_001/readme.md @@ -1,6 +1,6 @@ # Deep-Copy mit `clone()` ## Lernziel - [Musterlösung](solution/) + Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. diff --git a/Object_und_Wrapper_002/readme.md b/Object_und_Wrapper_002/readme.md index c459299..d2f43b5 100644 --- a/Object_und_Wrapper_002/readme.md +++ b/Object_und_Wrapper_002/readme.md @@ -1,6 +1,6 @@ # Clone ## Lernziel - [Musterlösung](solution/) + Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. diff --git a/Object_und_Wrapper_003/readme.md b/Object_und_Wrapper_003/readme.md index abec53a..337ee9e 100644 --- a/Object_und_Wrapper_003/readme.md +++ b/Object_und_Wrapper_003/readme.md @@ -1,6 +1,6 @@ # `equals()` und `hashCode()` implementieren und nutzen ## Lernziel - [Musterlösung](solution/) + Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. diff --git a/Object_und_Wrapper_004/readme.md b/Object_und_Wrapper_004/readme.md index e2702ab..cebe590 100644 --- a/Object_und_Wrapper_004/readme.md +++ b/Object_und_Wrapper_004/readme.md @@ -1,6 +1,6 @@ # equals und hashCode ## Lernziel - [Musterlösung](solution/) + Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. diff --git a/Object_und_Wrapper_005/readme.md b/Object_und_Wrapper_005/readme.md index add7d3c..5b276d3 100644 --- a/Object_und_Wrapper_005/readme.md +++ b/Object_und_Wrapper_005/readme.md @@ -1,6 +1,6 @@ # `toString()`-Methode implementieren ## Lernziel - [Musterlösung](solution/) + Klassen mit einer `toString()`-Methode versehen und diese gegenseitig nutzen. diff --git a/Object_und_Wrapper_006/readme.md b/Object_und_Wrapper_006/readme.md index a22d9d0..b82c722 100644 --- a/Object_und_Wrapper_006/readme.md +++ b/Object_und_Wrapper_006/readme.md @@ -1,6 +1,6 @@ # Optimierung bei Integer ## Lernziel - [Musterlösung](solution/) + Wrapper-Klassen und deren Optimierungen verstehen. diff --git a/Object_und_Wrapper_007/readme.md b/Object_und_Wrapper_007/readme.md index 2f68756..ed49b9f 100644 --- a/Object_und_Wrapper_007/readme.md +++ b/Object_und_Wrapper_007/readme.md @@ -1,6 +1,6 @@ # Methoden der Wrapper-Klassen ## Lernziel - [Musterlösung](solution/) + Wrapper-Klassen nutzen, um Zahlen umzuwandeln. diff --git a/Streams_001/readme.md b/Streams_001/readme.md index c95e4ec..39b74d5 100644 --- a/Streams_001/readme.md +++ b/Streams_001/readme.md @@ -1,6 +1,6 @@ # Kleinbuchstaben in einem String zählen ## Lernziel - [Musterlösung](solution/) + Streams verwenden. diff --git a/Streams_002/readme.md b/Streams_002/readme.md index aad8611..2b66375 100644 --- a/Streams_002/readme.md +++ b/Streams_002/readme.md @@ -1,6 +1,6 @@ # Buchstaben in einer Liste von Strings zählen ## Lernziel - [Musterlösung](solution/) + Streams verwenden. diff --git a/Streams_003/readme.md b/Streams_003/readme.md index 997e31b..798b2e6 100644 --- a/Streams_003/readme.md +++ b/Streams_003/readme.md @@ -1,6 +1,6 @@ # Kleinbuchstaben in einem String zählen ## Lernziel - [Musterlösung](solution/) + Streams verwenden. diff --git a/Streams_004/readme.md b/Streams_004/readme.md index 8035807..6d46587 100644 --- a/Streams_004/readme.md +++ b/Streams_004/readme.md @@ -1,6 +1,6 @@ # Liste filtern ## Lernziel - [Musterlösung](solution/) + Daten in Streams filtern. diff --git a/Streams_005/readme.md b/Streams_005/readme.md index f67896c..a993ed6 100644 --- a/Streams_005/readme.md +++ b/Streams_005/readme.md @@ -1,6 +1,6 @@ # Streams mit interner Iteration ## Lernziel - [Musterlösung](solution/) + Einen Stream mit einer internen Iteration verwenden. Die Iteration sowohl mit einem Lambda, als auch mit einer Methodenreferenz durchführen. diff --git a/Streams_006/readme.md b/Streams_006/readme.md index 1192002..96615d4 100644 --- a/Streams_006/readme.md +++ b/Streams_006/readme.md @@ -1,6 +1,6 @@ # Map und Filter auf Streams ## Lernziel - [Musterlösung](solution/) + Einen Stream durch Map- und Filter-Operationen analysieren und gewünschte Daten extrahieren. diff --git a/Streams_007/readme.md b/Streams_007/readme.md index 5264296..db68748 100644 --- a/Streams_007/readme.md +++ b/Streams_007/readme.md @@ -1,6 +1,6 @@ # Map und Reduce auf Streams ## Lernziel - [Musterlösung](solution/) + Die Daten in einem Stream durch Map- und Reduce verdichten. diff --git a/Streams_008/readme.md b/Streams_008/readme.md index c3ce9c4..58eda20 100644 --- a/Streams_008/readme.md +++ b/Streams_008/readme.md @@ -1,6 +1,6 @@ # Reduce ## Lernziel - [Musterlösung](solution/) + Daten in Streams mit `reduce` aggregieren. diff --git a/Streams_009/readme.md b/Streams_009/readme.md index c94f3c5..21c21d2 100644 --- a/Streams_009/readme.md +++ b/Streams_009/readme.md @@ -1,6 +1,6 @@ # Summe über reduce bestimmen ## Lernziel - [Musterlösung](solution/) + Daten in Streams mit `reduce` aggregieren. diff --git a/Streams_010/readme.md b/Streams_010/readme.md index 56c1684..4b1e108 100644 --- a/Streams_010/readme.md +++ b/Streams_010/readme.md @@ -1,6 +1,6 @@ # Wörter zählen ## Lernziel - [Musterlösung](solution/) + Daten in Streams mit `reduce` aggregieren. diff --git a/Strukturierung_001/readme.md b/Strukturierung_001/readme.md index 3e7fdd1..adde6bf 100644 --- a/Strukturierung_001/readme.md +++ b/Strukturierung_001/readme.md @@ -1,6 +1,6 @@ # Information-Hiding einer Klasse verbessern ## Lernziel - [Musterlösung](solution/) + Bei einer vorhandenen Klasse Information Hiding verbessern und Seiteneffekte reduzieren. diff --git a/Strukturierung_002/readme.md b/Strukturierung_002/readme.md index 7b84b29..506b798 100644 --- a/Strukturierung_002/readme.md +++ b/Strukturierung_002/readme.md @@ -1,6 +1,6 @@ # Vorhandene Bibliotheken als JAR einbinden ## Lernziel - [Musterlösung](solution/) + Eine vorhandene Bibliothek in einem Projekt verwenden und hierzu ein JAR einbinden. diff --git a/Threads_001/readme.md b/Threads_001/readme.md index 3e123dd..93db948 100644 --- a/Threads_001/readme.md +++ b/Threads_001/readme.md @@ -1,6 +1,6 @@ # Fakultät parallel berechnen ## Lernziel - [Musterlösung](solution/) + Berechnungen parallelisieren. diff --git a/Threads_002/readme.md b/Threads_002/readme.md index d058ac6..c14a6ed 100644 --- a/Threads_002/readme.md +++ b/Threads_002/readme.md @@ -1,6 +1,6 @@ # Thread per interrupt beenden ## Lernziel - [Musterlösung](solution/) + Threads kontrolliert beenden. diff --git a/Threads_003/readme.md b/Threads_003/readme.md index b295e6e..714bd4b 100644 --- a/Threads_003/readme.md +++ b/Threads_003/readme.md @@ -1,6 +1,6 @@ # wait und notify benutzen ## Lernziel - [Musterlösung](solution/) + Thread-Koordination über Condition-Variablen. diff --git a/Threads_004/readme.md b/Threads_004/readme.md index 85470c2..4f73019 100644 --- a/Threads_004/readme.md +++ b/Threads_004/readme.md @@ -1,6 +1,6 @@ # Parallele Ausgaben erzeugen ## Lernziel - [Musterlösung](solution/) + Erste Schritte mit Threads. diff --git a/Threads_005/readme.md b/Threads_005/readme.md index beee270..b0892d6 100644 --- a/Threads_005/readme.md +++ b/Threads_005/readme.md @@ -1,6 +1,6 @@ # Race-Condition finden und beheben ## Lernziel - [Musterlösung](solution/) + In einem gegebenen Programm Race-Conditions finden und durch den Einsatz von kritischen Abschnitten beheben. diff --git a/Threads_006/readme.md b/Threads_006/readme.md index bf0eea1..47d08ab 100644 --- a/Threads_006/readme.md +++ b/Threads_006/readme.md @@ -1,6 +1,6 @@ # Stack und Heap unterscheiden ## Lernziel - [Musterlösung](solution/) + Unterschied zwischen Stack und Heap bei parallelen Programmen verstehen. diff --git a/Threads_007/readme.md b/Threads_007/readme.md index 648ed02..a157f4b 100644 --- a/Threads_007/readme.md +++ b/Threads_007/readme.md @@ -1,6 +1,6 @@ # synchronized verwenden ## Lernziel - [Musterlösung](solution/) + Schlüsselwort `synchronized` verwenden. diff --git a/Threads_008/readme.md b/Threads_008/readme.md index cddb6cd..c600122 100644 --- a/Threads_008/readme.md +++ b/Threads_008/readme.md @@ -1,6 +1,6 @@ # Timer und TimerTask verwenden ## Lernziel - [Musterlösung](solution/) + Klassen aus `java.util.concurrent` verwenden. diff --git a/Vererbung_001/readme.md b/Vererbung_001/readme.md index 71c5480..77182a3 100644 --- a/Vererbung_001/readme.md +++ b/Vererbung_001/readme.md @@ -1,6 +1,6 @@ # Final anwenden ## Lernziel - [Musterlösung](solution/) + Das Schlüsselwort `final` in seinen verschiedenen Bedeutungen kennenlernen und syntaktisch an die richtigen Stellen schreiben. diff --git a/Vererbung_002/readme.md b/Vererbung_002/readme.md index 1c13a17..9360e77 100644 --- a/Vererbung_002/readme.md +++ b/Vererbung_002/readme.md @@ -1,6 +1,6 @@ # Figur und Rechteck ## Lernziel - [Musterlösung](solution/) + Vererbung sinnvoll einsetzen. diff --git a/Vererbung_003/readme.md b/Vererbung_003/readme.md index 84e08a2..40bd077 100644 --- a/Vererbung_003/readme.md +++ b/Vererbung_003/readme.md @@ -1,6 +1,6 @@ # Figur erweitern ## Lernziel - [Musterlösung](solution/) + Vererbung sinnvoll einsetzen. diff --git a/Vererbung_004/readme.md b/Vererbung_004/readme.md index c4c4aac..5b086a7 100644 --- a/Vererbung_004/readme.md +++ b/Vererbung_004/readme.md @@ -1,6 +1,6 @@ # Figur noch einmal erweitern ## Lernziel - [Musterlösung](solution/) + Vererbung sinnvoll einsetzen. diff --git a/Vererbung_005/readme.md b/Vererbung_005/readme.md index f3cb310..8eef5cd 100644 --- a/Vererbung_005/readme.md +++ b/Vererbung_005/readme.md @@ -1,6 +1,6 @@ # Konstruktoren schreiben ## Lernziel - [Musterlösung](solution/) + Für eine vorhandene Klasse Konstruktoren schreiben und Konstruktoren sich gegenseitig und auch Konstruktoren der Superklasse aufrufen lassen. diff --git a/Vererbung_006/readme.md b/Vererbung_006/readme.md index 8653a59..0683bb7 100644 --- a/Vererbung_006/readme.md +++ b/Vererbung_006/readme.md @@ -1,6 +1,6 @@ # Polymorphie einsetzen ## Lernziel - [Musterlösung](solution/) + Durch Polymorphie Subklassen wie Basisklassen behandeln können. diff --git a/Vererbung_007/readme.md b/Vererbung_007/readme.md index 254a802..3decb9f 100644 --- a/Vererbung_007/readme.md +++ b/Vererbung_007/readme.md @@ -1,6 +1,6 @@ # Singleton ## Lernziel - [Musterlösung](solution/) + Das Design-Pattern _Singleton_ einsetzen. diff --git a/Vererbung_008/readme.md b/Vererbung_008/readme.md index ba67d73..04501a5 100644 --- a/Vererbung_008/readme.md +++ b/Vererbung_008/readme.md @@ -1,6 +1,6 @@ # Statische Methoden und Attribute ## Lernziel - [Musterlösung](solution/) + Eine Klasse mit statischen Attributen und Methoden entwickeln und die Unterschiede zu normalen Methoden und Attributen verstehen. diff --git a/Vererbung_009/readme.md b/Vererbung_009/readme.md index 4996548..72cf564 100644 --- a/Vererbung_009/readme.md +++ b/Vererbung_009/readme.md @@ -1,6 +1,6 @@ # Methode überladen ## Lernziel - [Musterlösung](solution/) + Methoden überladen. diff --git a/Vererbung_010/readme.md b/Vererbung_010/readme.md index 9b09bc6..516e8af 100644 --- a/Vererbung_010/readme.md +++ b/Vererbung_010/readme.md @@ -1,6 +1,6 @@ # Methoden überschreiben ## Lernziel - [Musterlösung](solution/) + Bei Vererbung das Überschreiben von Methoden einsetzen. diff --git a/Vererbung_011/readme.md b/Vererbung_011/readme.md index 9ca3ce4..6397fc8 100644 --- a/Vererbung_011/readme.md +++ b/Vererbung_011/readme.md @@ -1,6 +1,6 @@ # Varag-Methode schreiben ## Lernziel - [Musterlösung](solution/) + Eine Varag-Methode schreiben. diff --git a/Vererbung_012/readme.md b/Vererbung_012/readme.md index da8532d..b8dc2dc 100644 --- a/Vererbung_012/readme.md +++ b/Vererbung_012/readme.md @@ -1,6 +1,6 @@ # Vererbung von Figuren ## Lernziel - [Musterlösung](solution/) + Einfache Klassen schreiben und eine Vererbungshierarchie bilden. diff --git a/readme.md b/readme.md index b42d37e..a85d457 100644 --- a/readme.md +++ b/readme.md @@ -10,114 +10,114 @@ Hier finden Sie die **freiwilligen Übungen** zur Vorlesung Programmieren 2 (PR2 Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md). -| # | Kapitel | Thema | Musterlösung | -|-----|-----------------------|---------------------------------------------------------------------------------------------------|----------------| -| 1. | Auffrischung | [String in Großbuchstaben umwandeln](Auffrischung_001/readme.md) | [✅](Auffrischung_001/solution/) | -| 2. | Auffrischung | [Labeled Break](Auffrischung_002/readme.md) | [✅](Auffrischung_002/solution/) | -| 3. | Auffrischung | [Passwortbewertung](Auffrischung_003/readme.md) | [✅](Auffrischung_003/solution/) | -| 4. | Auffrischung | [printf mit Formatstring](Auffrischung_004/readme.md) | [✅](Auffrischung_004/solution/) | -| 5. | Auffrischung | [Maximum in einem Array suchen](Auffrischung_005/readme.md) | [✅](Auffrischung_005/solution/) | -| 6. | Auffrischung | [Taschenrechner](Auffrischung_006/readme.md) | [✅](Auffrischung_006/solution/) | -| 7. | Einführung | [Java-Coding-Standard anwenden](Einfuehrung_001/readme.md) | [✅](Einfuehrung_001/solution/) | -| 8. | Einführung | [JavaDoc schreiben](Einfuehrung_002/readme.md) | [✅](Einfuehrung_002/solution/) | -| 9. | Einführung | [Klasse mit JUnit testen](Einfuehrung_003/readme.md) | [✅](Einfuehrung_003/solution/) | -| 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](Strukturierung_001/readme.md) | [✅](Strukturierung_001/solution/) | -| 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](Strukturierung_002/readme.md) | [✅](Strukturierung_002/solution/) | -| 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | [✅](Vererbung_001/solution/) | -| 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | [✅](Vererbung_002/solution/) | -| 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | [✅](Vererbung_003/solution/) | -| 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | [✅](Vererbung_004/solution/) | -| 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | [✅](Vererbung_005/solution/) | -| 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | [✅](Vererbung_006/solution/) | -| 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | [✅](Vererbung_007/solution/) | -| 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | [✅](Vererbung_008/solution/) | -| 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | [✅](Vererbung_009/solution/) | -| 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | [✅](Vererbung_010/solution/) | -| 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | [✅](Vererbung_011/solution/) | -| 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | [✅](Vererbung_012/solution/) | -| 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte_Klassen_001/readme.md) | [✅](Abstrakte_Klassen_001/solution/) | -| 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte_Klassen_002/readme.md) | [✅](Abstrakte_Klassen_002/solution/) | -| 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | [✅](Interfaces_001/solution/) | -| 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | [✅](Interfaces_002/solution/) | -| 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | [✅](Interfaces_003/solution/) | -| 29. | Interfaces | [Interfaces anwenden und entwerfen](Interfaces_004/readme.md) | [✅](Interfaces_004/solution/) | -| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](Object_und_Wrapper_001/readme.md) | [✅](Object_und_Wrapper_001/solution/) | -| 31. | Object und Wrapper | [Clone](Object_und_Wrapper_002/readme.md) | [✅](Object_und_Wrapper_002/solution/) | -| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](Object_und_Wrapper_003/readme.md) | [✅](Object_und_Wrapper_003/solution/) | -| 33. | Object und Wrapper | [equals und hashCode](Object_und_Wrapper_004/readme.md) | [✅](Object_und_Wrapper_004/solution/) | -| 34. | Object und Wrapper | [`toString()`-Methode implementieren](Object_und_Wrapper_005/readme.md) | [✅](Object_und_Wrapper_005/solution/) | -| 35. | Object und Wrapper | [Optimierung bei Integer](Object_und_Wrapper_006/readme.md) | [✅](Object_und_Wrapper_006/solution/) | -| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](Object_und_Wrapper_007/readme.md) | [✅](Object_und_Wrapper_007/solution/) | -| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | [✅](Enumerationen_001/solution/) | -| 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | [✅](Enumerationen_002/solution/) | -| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | [✅](Enumerationen_003/solution/) | -| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | [✅](Enumerationen_004/solution/) | -| 41. | Ausnahmen | [Ausnahmen testen](Ausnahmen_001/readme.md) | [✅](Ausnahmen_001/solution/) | -| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](Ausnahmen_002/readme.md) | [✅](Ausnahmen_002/solution/) | -| 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | [✅](Ausnahmen_003/solution/) | -| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](Ausnahmen_004/readme.md) | [✅](Ausnahmen_004/solution/) | -| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](Ausnahmen_005/readme.md) | [✅](Ausnahmen_005/solution/) | -| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](Input_und_Output_001/readme.md) | [✅](Input_und_Output_001/solution/) | -| 47. | Input und Output | [DataOutputStream](Input_und_Output_002/readme.md) | [✅](Input_und_Output_002/solution/) | -| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](Input_und_Output_003/readme.md) | [✅](Input_und_Output_003/solution/) | -| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](Input_und_Output_004/readme.md) | [✅](Input_und_Output_004/solution/) | -| 50. | Input und Output | [Daten mit einem `InputStream` lesen](Input_und_Output_005/readme.md) | [✅](Input_und_Output_005/solution/) | -| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](Input_und_Output_006/readme.md) | [✅](Input_und_Output_006/solution/) | -| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](Input_und_Output_007/readme.md) | [✅](Input_und_Output_007/solution/) | -| 53. | Input und Output | [Fileattribute lesen](Input_und_Output_008/readme.md) | [✅](Input_und_Output_008/solution/) | -| 54. | Input und Output | [`FilterReader`](Input_und_Output_009/readme.md) | [✅](Input_und_Output_009/solution/) | -| 55. | Input und Output | [Konsolen Input/Output](Input_und_Output_010/readme.md) | [✅](Input_und_Output_010/solution/) | -| 56. | Input und Output | [Zeilen einer Textdatei zählen](Input_und_Output_011/readme.md) | [✅](Input_und_Output_011/solution/) | -| 57. | Input und Output | [`RandomAccessFile`](Input_und_Output_012/readme.md) | [✅](Input_und_Output_012/solution/) | -| 58. | Input und Output | [`Reader` verwenden](Input_und_Output_013/readme.md) | [✅](Input_und_Output_013/solution/) | -| 59. | Input und Output | [Rot13-Verschlüsselung](Input_und_Output_014/readme.md) | [✅](Input_und_Output_014/solution/) | -| 60. | Input und Output | [Datei zerhacken](Input_und_Output_015/readme.md) | [✅](Input_und_Output_015/solution/) | -| 61. | Input und Output | [Serialisierung](Input_und_Output_016/readme.md) | [✅](Input_und_Output_016/solution/) | -| 62. | Generische Typen | [Einen generischen Typ schreiben](Generische_Typen_001/readme.md) | [✅](Generische_Typen_001/solution/) | -| 63. | Generische Typen | [Generische Klasse Pair schreiben](Generische_Typen_002/readme.md) | [✅](Generische_Typen_002/solution/) | -| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](Generische_Typen_003/readme.md) | [✅](Generische_Typen_003/solution/) | -| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](Generische_Typen_004/readme.md) | [✅](Generische_Typen_004/solution/) | -| 66. | Generische Typen | [PairList](Generische_Typen_005/readme.md) | [✅](Generische_Typen_005/solution/) | -| 67. | Generische Typen | [Wildcard benutzen](Generische_Typen_006/readme.md) | [✅](Generische_Typen_006/solution/) | -| 68. | Generische Typen | [Generische Queue](Generische_Typen_007/readme.md) | [✅](Generische_Typen_007/solution/) | -| 69. | Generische Typen | [`super` und `extends` einsetzen](Generische_Typen_008/readme.md) | [✅](Generische_Typen_008/solution/) | -| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](Generische_Typen_009/readme.md) | [✅](Generische_Typen_009/solution/) | -| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](Geschachtelte_Klassen_001/readme.md) | [✅](Geschachtelte_Klassen_001/solution/) | -| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](Geschachtelte_Klassen_002/readme.md) | [✅](Geschachtelte_Klassen_002/solution/) | -| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](Geschachtelte_Klassen_003/readme.md) | [✅](Geschachtelte_Klassen_003/solution/) | -| 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | [✅](Lambdas_001/solution/) | -| 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | [✅](Lambdas_002/solution/) | -| 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte_Klassen_001/readme.md) | [✅](Geschachtelte_Klassen_001/solution/) | -| 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | [✅](Lambdas_001/solution/) | -| 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | [✅](Lambdas_002/solution/) | -| 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | [✅](Collections_001/solution/) | -| 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | [✅](Collections_002/solution/) | -| 81. | Collections | [`List` und dessen Implementierungen](Collections_003/readme.md) | [✅](Collections_003/solution/) | -| 82. | Collections | [`Map` verwenden](Collections_004/readme.md) | [✅](Collections_004/solution/) | -| 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | [✅](Collections_005/solution/) | -| 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | [✅](Collections_006/solution/) | -| 85. | Collections | [`Set` und dessen Implementierungen](Collections_007/readme.md) | [✅](Collections_007/solution/) | -| 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | [✅](Collections_008/solution/) | -| 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | [✅](Collections_009/solution/) | -| 88. | Collections | [`Comparator` verwenden und Objekte sortieren](Collections_010/readme.md) | [✅](Collections_010/solution/) | -| 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | [✅](Collections_011/solution/) | -| 90. | Streams | [Kleinbuchstaben in einem String zählen](Streams_001/readme.md) | [✅](Streams_001/solution/) | -| 91. | Streams | [Buchstaben in einer Liste von Strings zählen](Streams_002/readme.md) | [✅](Streams_002/solution/) | -| 92. | Streams | [Kleinbuchstaben in einem String zählen](Streams_003/readme.md) | [✅](Streams_003/solution/) | -| 93. | Streams | [Liste filtern](Streams_004/readme.md) | [✅](Streams_004/solution/) | -| 94. | Streams | [Streams mit interner Iteration](Streams_005/readme.md) | [✅](Streams_005/solution/) | -| 95. | Streams | [Map und Filter auf Streams](Streams_006/readme.md) | [✅](Streams_006/solution/) | -| 96. | Streams | [Map und Reduce auf Streams](Streams_007/readme.md) | [✅](Streams_007/solution/) | -| 97. | Streams | [Reduce](Streams_008/readme.md) | [✅](Streams_008/solution/) | -| 98. | Streams | [Summe über reduce bestimmen](Streams_009/readme.md) | [✅](Streams_009/solution/) | -| 99. | Streams | [Wörter zählen](Streams_010/readme.md) | [✅](Streams_010/solution/) | -| 100. | Threads | [Fakultät parallel berechnen](Threads_001/readme.md) | [✅](Threads_001/solution/) | -| 101. | Threads | [Thread per interrupt beenden](Threads_002/readme.md) | [✅](Threads_002/solution/) | -| 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | [✅](Threads_003/solution/) | -| 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | [✅](Threads_004/solution/) | -| 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | [✅](Threads_005/solution/) | -| 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | [✅](Threads_006/solution/) | -| 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | [✅](Threads_007/solution/) | -| 107. | Threads | [Timer und TimerTask verwenden](Threads_008/readme.md) | [✅](Threads_008/solution/) | -| 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | | -| 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) | | +| # | Kapitel | Thema | +|-----|-----------------------|---------------------------------------------------------------------------------------------------| +| 1. | Auffrischung | [String in Großbuchstaben umwandeln](Auffrischung_001/readme.md) | +| 2. | Auffrischung | [Labeled Break](Auffrischung_002/readme.md) | +| 3. | Auffrischung | [Passwortbewertung](Auffrischung_003/readme.md) | +| 4. | Auffrischung | [printf mit Formatstring](Auffrischung_004/readme.md) | +| 5. | Auffrischung | [Maximum in einem Array suchen](Auffrischung_005/readme.md) | +| 6. | Auffrischung | [Taschenrechner](Auffrischung_006/readme.md) | +| 7. | Einführung | [Java-Coding-Standard anwenden](Einfuehrung_001/readme.md) | +| 8. | Einführung | [JavaDoc schreiben](Einfuehrung_002/readme.md) | +| 9. | Einführung | [Klasse mit JUnit testen](Einfuehrung_003/readme.md) | +| 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](Strukturierung_001/readme.md) | +| 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](Strukturierung_002/readme.md) | +| 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | +| 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | +| 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | +| 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | +| 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | +| 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | +| 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | +| 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | +| 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | +| 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | +| 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | +| 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | +| 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte_Klassen_001/readme.md) | +| 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte_Klassen_002/readme.md) | +| 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | +| 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | +| 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | +| 29. | Interfaces | [Interfaces anwenden und entwerfen](Interfaces_004/readme.md) | +| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](Object_und_Wrapper_001/readme.md) | +| 31. | Object und Wrapper | [Clone](Object_und_Wrapper_002/readme.md) | +| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](Object_und_Wrapper_003/readme.md) | +| 33. | Object und Wrapper | [equals und hashCode](Object_und_Wrapper_004/readme.md) | +| 34. | Object und Wrapper | [`toString()`-Methode implementieren](Object_und_Wrapper_005/readme.md) | +| 35. | Object und Wrapper | [Optimierung bei Integer](Object_und_Wrapper_006/readme.md) | +| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](Object_und_Wrapper_007/readme.md) | +| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | +| 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | +| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | +| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | +| 41. | Ausnahmen | [Ausnahmen testen](Ausnahmen_001/readme.md) | +| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](Ausnahmen_002/readme.md) | +| 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | +| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](Ausnahmen_004/readme.md) | +| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](Ausnahmen_005/readme.md) | +| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](Input_und_Output_001/readme.md) | +| 47. | Input und Output | [DataOutputStream](Input_und_Output_002/readme.md) | +| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](Input_und_Output_003/readme.md) | +| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](Input_und_Output_004/readme.md) | +| 50. | Input und Output | [Daten mit einem `InputStream` lesen](Input_und_Output_005/readme.md) | +| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](Input_und_Output_006/readme.md) | +| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](Input_und_Output_007/readme.md) | +| 53. | Input und Output | [Fileattribute lesen](Input_und_Output_008/readme.md) | +| 54. | Input und Output | [`FilterReader`](Input_und_Output_009/readme.md) | +| 55. | Input und Output | [Konsolen Input/Output](Input_und_Output_010/readme.md) | +| 56. | Input und Output | [Zeilen einer Textdatei zählen](Input_und_Output_011/readme.md) | +| 57. | Input und Output | [`RandomAccessFile`](Input_und_Output_012/readme.md) | +| 58. | Input und Output | [`Reader` verwenden](Input_und_Output_013/readme.md) | +| 59. | Input und Output | [Rot13-Verschlüsselung](Input_und_Output_014/readme.md) | +| 60. | Input und Output | [Datei zerhacken](Input_und_Output_015/readme.md) | +| 61. | Input und Output | [Serialisierung](Input_und_Output_016/readme.md) | +| 62. | Generische Typen | [Einen generischen Typ schreiben](Generische_Typen_001/readme.md) | +| 63. | Generische Typen | [Generische Klasse Pair schreiben](Generische_Typen_002/readme.md) | +| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](Generische_Typen_003/readme.md) | +| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](Generische_Typen_004/readme.md) | +| 66. | Generische Typen | [PairList](Generische_Typen_005/readme.md) | +| 67. | Generische Typen | [Wildcard benutzen](Generische_Typen_006/readme.md) | +| 68. | Generische Typen | [Generische Queue](Generische_Typen_007/readme.md) | +| 69. | Generische Typen | [`super` und `extends` einsetzen](Generische_Typen_008/readme.md) | +| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](Generische_Typen_009/readme.md) | +| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](Geschachtelte_Klassen_001/readme.md) | +| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](Geschachtelte_Klassen_002/readme.md) | +| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](Geschachtelte_Klassen_003/readme.md) | +| 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | +| 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | +| 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte_Klassen_001/readme.md) | +| 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | +| 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | +| 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | +| 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | +| 81. | Collections | [`List` und dessen Implementierungen](Collections_003/readme.md) | +| 82. | Collections | [`Map` verwenden](Collections_004/readme.md) | +| 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | +| 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | +| 85. | Collections | [`Set` und dessen Implementierungen](Collections_007/readme.md) | +| 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | +| 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | +| 88. | Collections | [`Comparator` verwenden und Objekte sortieren](Collections_010/readme.md) | +| 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | +| 90. | Streams | [Kleinbuchstaben in einem String zählen](Streams_001/readme.md) | +| 91. | Streams | [Buchstaben in einer Liste von Strings zählen](Streams_002/readme.md) | +| 92. | Streams | [Kleinbuchstaben in einem String zählen](Streams_003/readme.md) | +| 93. | Streams | [Liste filtern](Streams_004/readme.md) | +| 94. | Streams | [Streams mit interner Iteration](Streams_005/readme.md) | +| 95. | Streams | [Map und Filter auf Streams](Streams_006/readme.md) | +| 96. | Streams | [Map und Reduce auf Streams](Streams_007/readme.md) | +| 97. | Streams | [Reduce](Streams_008/readme.md) | +| 98. | Streams | [Summe über reduce bestimmen](Streams_009/readme.md) | +| 99. | Streams | [Wörter zählen](Streams_010/readme.md) | +| 100. | Threads | [Fakultät parallel berechnen](Threads_001/readme.md) | +| 101. | Threads | [Thread per interrupt beenden](Threads_002/readme.md) | +| 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | +| 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | +| 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | +| 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | +| 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | +| 107. | Threads | [Timer und TimerTask verwenden](Threads_008/readme.md) | +| 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | +| 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) | diff --git a/solutions/pmd.xml b/solutions/pmd.xml index 97e1b5f..8bc3b38 100644 --- a/solutions/pmd.xml +++ b/solutions/pmd.xml @@ -1,2253 +1,60 @@ - + -Rules which enforce generally accepted best practices. + My custom rules - - - - -Instantiation by way of private constructors from outside the constructor's class often causes the -generation of an accessor. A factory method, or non-privatization of the constructor can eliminate this -situation. The generated class file is actually an interface. It gives the accessing class the ability -to invoke a new hidden package scope constructor that takes the interface as a supplementary parameter. -This turns a private constructor effectively into one with package scope, and is challenging to discern. - -_Note:_ This rule is only executed for Java 10 or lower. -Since Java 11, [JEP 181: Nest-Based Access Control](https://openjdk.org/jeps/181) has been implemented. This -means that in Java 11 and above accessor classes are not generated anymore. - - 3 - - - - - - - - - - Declaring a MessageDigest instance as a field make this instance directly available to multiple threads. - Such sharing of MessageDigest instances should be avoided if possible since it leads to wrong results - if the access is not synchronized correctly. - Just create a new instance and use it locally, where you need it. - Creating a new instance is easier than synchronizing access to a shared instance. - - 3 - - - - - - - - - - - - - - - -Reassigning exception variables caught in a catch statement should be avoided because of: - -1) If it is needed, multi catch can be easily added and code will still compile. - -2) Following the principle of least surprise we want to make sure that a variable caught in a catch statement -is always the one thrown in a try block. - - 3 - - - - - -Reassigning loop variables can lead to hard-to-find bugs. Prevent or limit how these variables can be changed. - -In foreach-loops, configured by the `foreachReassign` property: -- `deny`: Report any reassignment of the loop variable in the loop body. _This is the default._ -- `allow`: Don't check the loop variable. -- `firstOnly`: Report any reassignments of the loop variable, except as the first statement in the loop body. - _This is useful if some kind of normalization or clean-up of the value before using is permitted, but any other change of the variable is not._ - -In for-loops, configured by the `forReassign` property: -- `deny`: Report any reassignment of the control variable in the loop body. _This is the default._ -- `allow`: Don't check the control variable. -- `skip`: Report any reassignments of the control variable, except conditional increments/decrements (`++`, `--`, `+=`, `-=`). - _This prevents accidental reassignments or unconditional increments of the control variable._ - - 3 - - - - - - - - - - - -Reassigning values to incoming parameters of a method or constructor is not recommended, as this can -make the code more difficult to understand. The code is often read with the assumption that parameter values -don't change and an assignment violates therefore the principle of least astonishment. This is especially a -problem if the parameter is documented e.g. in the method's javadoc and the new content differs from the original -documented content. - -Use temporary local variables instead. This allows you to assign a new name, which makes the code better -understandable. - -Note that this rule considers both methods and constructors. If there are multiple assignments for a formal -parameter, then only the first assignment is reported. - - 2 - - - - - - - -StringBuffers/StringBuilders can grow considerably, and so may become a source of memory leaks -if held within objects with long lifetimes. - - 3 - - - - - - - - - - - - - - - -Application with hard-coded IP addresses can become impossible to deploy in some cases. -Externalizing IP adresses is preferable. - - 3 - - - - - - - -Always check the return values of navigation methods (next, previous, first, last) of a ResultSet. -If the value return is 'false', it should be handled properly. - - 3 - - - - - - - -Avoid constants in interfaces. Interfaces should define types, constants are implementation details -better placed in classes or enums. See Effective Java, item 19. - - 3 - - - - - - - - - - - - - - - - -By convention, the default label should be the last label in a switch statement. - - 3 - - - - - - - - - - - - - - - - Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly - generates a new .class file, and the object holds a strong reference to the enclosing object. For those - reasons, it is preferable to initialize the object normally, even though it's verbose. - - This rule counts any anonymous class which only has a single initializer as an instance of double-brace - initialization. There is currently no way to find out whether a method called in the initializer is not - accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. - - 3 - - - - - - - - - (){{ - add("a"); - add("b"); - add("c"); -}}; - -// the better way is to not create an anonymous class: -List a = new ArrayList<>(); -a.add("a"); -a.add("b"); -a.add("c"); -return a; -]]> - - - - - -Reports loops that can be safely replaced with the foreach syntax. The rule considers loops over -lists, arrays and iterators. A loop is safe to replace if it only uses the index variable to -access an element of the list or array, only has one update statement, and loops through *every* -element of the list or array left to right. - - 3 - - l) { - for (int i = 0; i < l.size(); i++) { // pre Java 1.5 - System.out.println(l.get(i)); - } - - for (String s : l) { // post Java 1.5 - System.out.println(s); - } - } -} -]]> - - - - - -Whenever using a log level, one should check if the loglevel is actually enabled, or -otherwise skip the associate String creation and manipulation. - -An alternative to checking the log level are substituting parameters, formatters or lazy logging -with lambdas. The available alternatives depend on the actual logging framework. - - 2 - - calculateExpensiveLoggingText()); -]]> - - - - - -In JUnit 3, test suites are indicated by the suite() method. In JUnit 4, suites are indicated -through the @RunWith(Suite.class) annotation. - - 3 - - - - - - - - - - - - - - - -In JUnit 3, the tearDown method was used to clean up all data entities required in running tests. -JUnit 4 skips the tearDown method and executes all methods annotated with @After after running each test. -JUnit 5 introduced @AfterEach and @AfterAll annotations to execute methods after each test or after all tests in the class, respectively. - - 3 - - - - - - - - - - - - - - - -In JUnit 3, the setUp method was used to set up all data entities required in running tests. -JUnit 4 skips the setUp method and executes all methods annotated with @Before before all tests. -JUnit 5 introduced @BeforeEach and @BeforeAll annotations to execute methods before each test or before all tests in the class, respectively. - - 3 - - - - - - - - - - - - - - - -In JUnit 3, the framework executed all methods which started with the word test as a unit test. -In JUnit 4, only methods annotated with the @Test annotation are executed. -In JUnit 5, one of the following annotations should be used for tests: @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest. - - 3 - - - - - - - - - - - - - - - - - - - - -In JUnit4, use the @Test(expected) annotation to denote tests that should throw exceptions. - - 3 - - - - - - - - Position literals first in all String comparisons, if the second argument is null then NullPointerExceptions - can be avoided, they will just return false. Note that switching literal positions for compareTo and - compareToIgnoreCase may change the result, see examples. - - 3 - - 0); // should be: "bar".compareTo(x) < 0 - } - boolean bar(String x) { - return (x.compareToIgnoreCase("bar") > 0); // should be: "bar".compareToIgnoreCase(x) < 0 - } - boolean bar(String x) { - return x.contentEquals("bar"); // should be "bar".contentEquals(x) - } -} -]]> - - - - - -The use of implementation types (i.e., HashSet) as object references limits your ability to use alternate -implementations in the future as requirements change. Whenever available, referencing objects -by their interface types (i.e, Set) provides much more flexibility. - - 3 - - list = new ArrayList<>(); - - public HashSet getFoo() { - return new HashSet(); - } - - // preferred approach - private List list = new ArrayList<>(); - - public Set getFoo() { - return new HashSet(); - } -} -]]> - - - - - -Exposing internal arrays to the caller violates object encapsulation since elements can be -removed or replaced outside of the object that owns it. It is safer to return a copy of the array. - - 3 - - - - - - - - - Annotating overridden methods with @Override ensures at compile time that - the method really overrides one, which helps refactoring and clarifies intent. - - 3 - - - - - - - -Java allows the use of several variables declaration of the same type on one line. However, it -can lead to quite messy code. This rule looks for several declarations on the same line. - - 4 - - - - - 1] - [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] -| -//FieldDeclaration - [count(VariableDeclarator) > 1] - [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] -]]> - - - - - - - - - - - - -Position literals first in comparisons, if the second argument is null then NullPointerExceptions -can be avoided, they will just return false. - -This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. - - 3 - - - - - - - -Position literals first in comparisons, if the second argument is null then NullPointerExceptions -can be avoided, they will just return false. - -This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. - - 3 - - - - - - - - Reports usages of primitive wrapper constructors. They are deprecated - since Java 9 and should not be used. Even before Java 9, they can - be replaced with usage of the corresponding static `valueOf` factory method - (which may be automatically inserted by the compiler since Java 1.5). - This has the advantage that it may reuse common instances instead of creating - a new instance each time. - - Note that for `Boolean`, the named constants `Boolean.TRUE` and `Boolean.FALSE` - are preferred instead of `Boolean.valueOf`. - - 3 - - - - - - - - -Consider replacing Enumeration usages with the newer java.util.Iterator - - 3 - - - - - - - - - - - - - - - -Consider replacing Hashtable usage with the newer java.util.Map if thread safety is not required. - - 3 - - - - //Type/ReferenceType/ClassOrInterfaceType[@Image='Hashtable'] - - - - - - - - - -Consider replacing Vector usages with the newer java.util.ArrayList if expensive thread-safe operations are not required. - - 3 - - - - //Type/ReferenceType/ClassOrInterfaceType[@Image='Vector'] - - - - - - - - - - - Switch statements should be exhaustive, to make their control flow - easier to follow. This can be achieved by adding a `default` case, or, - if the switch is on an enum type, by ensuring there is one switch branch - for each enum constant. - - 3 - - - - - - - - - - - - - - - Reports assignments to variables that are never used before the variable is overwritten, - or goes out of scope. Unused assignments are those for which - 1. The variable is never read after the assignment, or - 2. The assigned value is always overwritten by other assignments before the next read of - the variable. - - The rule doesn't consider assignments to fields except for those of `this` in a constructor, - or static fields of the current class in static initializers. - - The rule may be suppressed with the standard `@SuppressWarnings("unused")` tag. - - The rule subsumes {% rule "UnusedLocalVariable" %}, and {% rule "UnusedFormalParameter" %}. - Those violations are filtered - out by default, in case you already have enabled those rules, but may be enabled with the property - `reportUnusedVariables`. Variables whose name starts with `ignored` or `unused` are filtered out, as - is standard practice for exceptions. - - Limitations: - * The rule currently cannot know which method calls throw exceptions, or which exceptions they throw. - In the body of a try block, every method or constructor call is assumed to throw. This may cause false-negatives. - The only other language construct that is assumed to throw is the `throw` statement, in particular, - things like `assert` statements, or NullPointerExceptions on dereference are ignored. - * The rule cannot resolve assignments across constructors, when they're called with the special - `this(...)` syntax. This may cause false-negatives. - - Both of those limitations may be partly relaxed in PMD 7. - - 3 - - - - - - - - - - - - - - - - -Reports parameters of methods and constructors that are not referenced them in the method body. -Parameters whose name starts with `ignored` or `unused` are filtered out. - -Removing unused formal parameters from public methods could cause a ripple effect through the code base. -Hence, by default, this rule only considers private methods. To include non-private methods, set the -`checkAll` property to `true`. - - - 3 - - - - - - - -Reports import statements that are not used within the file. This also reports -duplicate imports, and imports from the same package. The simplest fix is just -to delete those imports. - -This rule is deprecated since PMD 6.34.0. Use the rule {% rule "java/codestyle/UnnecessaryImport" %} -from category codestyle instead. - - 4 - - - - - - - -Detects when a local variable is declared and/or assigned, but not used. -Variables whose name starts with `ignored` or `unused` are filtered out. - - 3 - - - - - - - -Detects when a private field is declared and/or assigned a value, but not used. - -Since PMD 6.50.0 private fields are ignored, if the fields are annotated with any annotation or the -enclosing class has any annotation. Annotations often enable a framework (such as dependency injection, mocking -or e.g. Lombok) which use the fields by reflection or other means. This usage can't be detected by static code analysis. -Previously these frameworks where explicitly allowed by listing their annotations in the property -"ignoredAnnotations", but that turned out to be prone of false positive for any not explicitly considered framework. - - 3 - - - - - - - -Unused Private Method detects when a private method is declared but is unused. - - 3 - - - - - - - -This rule detects JUnit assertions in object references equality. These assertions should be made by -more specific methods, like assertNull, assertNotNull. - -Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. - - 3 - - - - - - - - - - - - - - - -When asserting a value is the same as a literal or Boxed boolean, use assertTrue/assertFalse, instead of assertEquals. - -Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. - - 3 - - - - - - - - - - - - - - - -The isEmpty() method on java.util.Collection is provided to determine if a collection has any elements. -Comparing the value of size() to 0 does not convey intent as well as the isEmpty() method. - - 3 - - - - - - - -Starting with Java 7, StandardCharsets provides constants for common Charset objects, such as UTF-8. -Using the constants is less error prone, and can provide a small performance advantage compared to `Charset.forName(...)` -since no scan across the internal `Charset` caches is needed. - - 3 - - - - - - - - - - - - - - - - - -`do {} while (true);` requires reading the end of the statement before it is -apparent that it loops forever, whereas `while (true) {}` is easier to understand. - -`do {} while (false);` is redundant, and if an inner variable scope is required, -a block `{}` is sufficient. - -`while (false) {}` will never execute the block and can be removed in its entirety. - - 3 - - - -= 1]] -| -(: while loops with conditional and'ed boolean literals, maybe parenthesized :) -//WhileStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) - (: at least one false literal :) - [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1]] -| -(: do-while loops with conditional or'ed boolean literals, maybe parenthesized :) -//DoStatement[Expression/(InclusiveOrExpression|ConditionalOrExpression|(PrimaryExpression/PrimaryPrefix/Expression/(InclusiveOrExpression|ConditionalOrExpression))) - [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral) = 2]] -| -(: do-while loops with conditional and'ed boolean literals, maybe parenthesized :) -//DoStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) - (: at least one false literal :) - [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1 - (: or two true literals (e.g. true & true) :) - or count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = true()]) = 2]] -]]> - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/solutions/pom.xml b/solutions/pom.xml index 7d56871..11cbea7 100644 --- a/solutions/pom.xml +++ b/solutions/pom.xml @@ -11,21 +11,25 @@ UTF-8 - 17 - 17 - 5.9.1 - 1.9.1 + 23 + 23 + 5.12.2 + 1.12.2 + 7.13.0 + jitpack.io https://jitpack.io + install ${basedir}/target ${project.artifactId}-${project.version} + maven-compiler-plugin @@ -33,12 +37,16 @@ maven-surefire-plugin - 3.0.0-M7 + 3.5.2 + + + maven-failsafe-plugin + 3.5.2 org.apache.maven.plugins maven-checkstyle-plugin - 3.2.0 + 3.6.0 com.puppycrawl.tools @@ -65,7 +73,29 @@ org.apache.maven.plugins maven-pmd-plugin - 3.19.0 + 3.26.0 + + + net.sourceforge.pmd + pmd-core + ${pmdVersion} + + + net.sourceforge.pmd + pmd-java + ${pmdVersion} + + + net.sourceforge.pmd + pmd-javascript + ${pmdVersion} + + + net.sourceforge.pmd + pmd-jsp + ${pmdVersion} + + ./pmd.xml @@ -84,6 +114,7 @@ + com.github.thomsmits - game-framework + game-framework v1.0 @@ -117,11 +148,6 @@ junit-platform-suite ${junit.platform.version} - - org.junit.vintage - junit-vintage-engine - 4.12.0-M4 - org.jfree jfreechart diff --git a/solutions/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java b/solutions/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java deleted file mode 100644 index 2ed9101..0000000 --- a/solutions/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.auffrischung.grossmacher; - -public class Grossmacher { - - public static void main(String[] args) { - if (args.length < 1) { - System.err.println("Kein Argument angeben!"); - return; - } - - String ergebnis = args[0].toUpperCase(); - - System.out.printf("Ergebnis: %s%n", ergebnis); - System.out.printf("Zeichen : %d%n", ergebnis.length()); - } -} diff --git a/solutions/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java b/solutions/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java deleted file mode 100644 index 82e1359..0000000 --- a/solutions/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java +++ /dev/null @@ -1,27 +0,0 @@ -package pr2.auffrischung.labeled_break; - -public class ArraySucher { - - /** - * Sucht das erste Element, dass nicht 0 ist. - * - * @param array das Array in dem gesucht werden soll - * @return {@code true}, wenn ein Element gefunden wird, - * andernfalls {@code false}. - */ - public boolean suche(int[][] array) { - boolean found = false; - - outer: - for (int[] is : array) { - for (int i : is) { - if (i != 0) { - found = true; - break outer; - } - } - } - - return found; - } -} diff --git a/solutions/src/main/java/pr2/auffrischung/password/PasswortChecker.java b/solutions/src/main/java/pr2/auffrischung/password/PasswortChecker.java deleted file mode 100644 index 147b8be..0000000 --- a/solutions/src/main/java/pr2/auffrischung/password/PasswortChecker.java +++ /dev/null @@ -1,53 +0,0 @@ -package pr2.auffrischung.password; - -public class PasswortChecker { - - private static final char[] NUMBERS = "1234567890".toCharArray(); - private static final char[] LOWERCASE - = "abcdefghijklmnopqrstuvwxyz".toCharArray(); - private static final char[] UPPERCASE - = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); - private static final char[] SPECIAL_CHARS = "!%()\"".toCharArray(); - - private static boolean contains(String string, char[] chars) { - for (char c : chars) { - if (string.indexOf(c) >= 0) { - return true; - } - } - return false; - } - - public static int checkPassword(String password) { - int points = 0; - - if (password.length() >= 8) { - points++; - } - - if (contains(password, NUMBERS) - && (contains(password, LOWERCASE) - || contains(password, UPPERCASE))) { - points++; - } - - if (contains(password, SPECIAL_CHARS)) { - points++; - } - - if (contains(password, LOWERCASE) && contains(password, UPPERCASE)) { - points++; - } - - return points; - } - - public static void main(String[] args) { - System.out.println(checkPassword("mutti")); - System.out.println(checkPassword("Mutti")); - System.out.println(checkPassword("mutti123")); - System.out.println(checkPassword("Mutti123")); - System.out.println(checkPassword("Mutti123!%")); - System.out.println(checkPassword("1234")); - } -} diff --git a/solutions/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java b/solutions/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java deleted file mode 100644 index 788b1a6..0000000 --- a/solutions/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.auffrischung.printf; - -public class DoubleFormatter { - - public static void printDouble(double d) { - System.out.printf("%.3f%n", d); - } - - public static void main(String[] args) { - printDouble(1.0); - printDouble(10.1); - printDouble(2.01); - printDouble(2.001); - printDouble(2.0001); - printDouble(2.0004); - printDouble(2.0005); - } -} diff --git a/solutions/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java b/solutions/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java deleted file mode 100644 index 707336a..0000000 --- a/solutions/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java +++ /dev/null @@ -1,21 +0,0 @@ -package pr2.auffrischung.suchemax; - -public class GroessteZahl { - - public int sucheMax(int[] zahlen) { - int max = Integer.MIN_VALUE; - - for (int zahl : zahlen) { - max = Math.max(max, zahl); - } - - return max; - } - - public static void main(String[] args) { - GroessteZahl g = new GroessteZahl(); - System.out.println(g.sucheMax(new int[] {1, 5, 8, 2, 0})); - System.out.println(g.sucheMax(new int[] {-1, -5, -8, -2, -20})); - System.out.println(g.sucheMax(new int[] {10000, -10000, 1, 2, 33})); - } -} diff --git a/solutions/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java b/solutions/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java deleted file mode 100644 index ecba9e2..0000000 --- a/solutions/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java +++ /dev/null @@ -1,25 +0,0 @@ -package pr2.auffrischung.taschenrechner; - -public class Taschenrechner { - - public double rechne(double o1, char op, double o2) { - return switch (op) { - case '+' -> o1 + o2; - case '-' -> o1 - o2; - case '*' -> o1 * o2; - case '/' -> o1 / o2; - case '^' -> Math.pow(o1, o2); - default -> Double.NaN; - }; -// return 0.0; - } - - public static void main(String[] args) { - Taschenrechner t = new Taschenrechner(); - System.out.println(t.rechne(1, '+', 2)); - System.out.println(t.rechne(1, '-', 2)); - System.out.println(t.rechne(2, '*', 2)); - System.out.println(t.rechne(4, '/', 2)); - System.out.println(t.rechne(2, '^', 32)); - } -} diff --git a/solutions/src/main/java/pr2/collections/iterator/SimpleStack.java b/solutions/src/main/java/pr2/collections/iterator/SimpleStack.java deleted file mode 100644 index dd70937..0000000 --- a/solutions/src/main/java/pr2/collections/iterator/SimpleStack.java +++ /dev/null @@ -1,79 +0,0 @@ -package pr2.collections.iterator; - -import java.util.Iterator; - -/** - * Eine einfache, naive Stack Implementierung. - * - * @param Typ, der gespeichert werden soll. - */ -public class SimpleStack implements Iterable { - - // Variablen sind nicht private wegen Zugriff durch den Iterator - T[] stack; - - int pos; - - /** - * Legt einen neuen Stack mit der gegebenen Größe an. - * - * @param size Größe des Stacks. - */ - @SuppressWarnings("unchecked") - public SimpleStack(int size) { - stack = (T[]) new Object[size]; - pos = 0; - } - - /** - * Fügt dem Stack ein neues Element hinzu. - * - * @param o Element, das hinzugefügt werden soll. - */ - public void push(T o) { - stack[pos++] = o; - } - - /** - * Holt das oberste Element und entfernt es. - * - * @return das oberste Element - */ - public T pop() { - return stack[--pos]; - } - - /** - * Gibt das oberste Element zurück, ohne es zu entfernen. - * - * @return das oberste Element - */ - public T peek() { - return stack[pos - 1]; - } - - - /** - * Erzeugt einen Iterator. - * - * @return Iterator - * @see java.lang.Iterable#iterator() - */ - @Override - public Iterator iterator() { - return new Iterator() { - - int iteratorPos = pos - 1; - - @Override - public boolean hasNext() { - return iteratorPos >= 0; - } - - @Override - public T next() { - return stack[iteratorPos--]; - } - }; - } -} diff --git a/solutions/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java b/solutions/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java deleted file mode 100644 index 79ce559..0000000 --- a/solutions/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package pr2.collections.iterator.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.iterator.SimpleStack; - -import java.util.Iterator; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Test für den Stack. - */ -public class SimpleStackTest { - - /** - * Testet den Stack an sich. - */ - @Test - void testStack() { - SimpleStack s = new SimpleStack<>(10); - s.push("A"); - s.push("B"); - s.push("C"); - s.push("D"); - assertEquals("D", s.peek()); - assertEquals("D", s.pop()); - assertEquals("C", s.pop()); - assertEquals("B", s.pop()); - s.push("A2"); - s.push("A3"); - assertEquals("A3", s.peek()); - assertEquals("A3", s.pop()); - assertEquals("A2", s.pop()); - assertEquals("A", s.pop()); - } - - - /** - * Testet den Iterator. - */ - @Test - void testIterator() { - SimpleStack s = new SimpleStack<>(10); - s.push("A"); - s.push("B"); - s.push("C"); - s.push("D"); - - String[] result = new String[5]; - int count = 0; - - for (String string : s) { - result[count++] = string; - } - - assertEquals("D", s.peek()); - - assertEquals("D", result[0]); - assertEquals("C", result[1]); - assertEquals("B", result[2]); - assertEquals("A", result[3]); - - s.push("E"); - - Iterator it = s.iterator(); - - count = 0; - while (it.hasNext()) { - result[count++] = it.next(); - } - - assertEquals("E", result[0]); - assertEquals("D", result[1]); - assertEquals("C", result[2]); - assertEquals("B", result[3]); - assertEquals("A", result[4]); - - assertFalse(it.hasNext()); - - it = s.iterator(); - - assertTrue(it.hasNext()); - } -} diff --git a/solutions/src/main/java/pr2/collections/list/WordCollector.java b/solutions/src/main/java/pr2/collections/list/WordCollector.java deleted file mode 100644 index e73c513..0000000 --- a/solutions/src/main/java/pr2/collections/list/WordCollector.java +++ /dev/null @@ -1,123 +0,0 @@ -package pr2.collections.list; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -/** - * Klassen, um die in einem Text vorkommenden Wörter zu sammeln. - */ -public class WordCollector { - - - /** - * Listet alle Worte in der Datei alphabetisch auf. Duplikate werden - * entfernt. Die Wörter werden in Kleinbuchstaben umgewandelt. - * - * @param filename Dateiname - * @return die Liste der vorhandenen Worte - * @throws IOException Fehler beim Dateizugriff. - */ - public static List listWords(String filename) throws IOException { - List allWords = readFileAndSplitIntoWords(filename); - List result = removeDuplicates(allWords); - - return result; - } - - /** - * Listet alle Worte in der Datei auf. - * - * @param filename Dateiname - * @return die Liste der vorhandenen Worte - * @throws IOException Fehler beim Dateizugriff. - */ - private static List readFileAndSplitIntoWords(String filename) - throws IOException { - - // Datei zum Lesen öffnen - BufferedReader reader = new BufferedReader(new FileReader(filename)); - - String line; // aktuelle Zeile - - List wordList = new LinkedList<>(); - - // Über die Zeilen der Datei iterieren - while ((line = reader.readLine()) != null) { - - // Sonderzeichen entfernen und die Zeilen in Worte splitten - line = line.toLowerCase(); - line = line.replaceAll("[\",.:'\\-!?]", ""); - - String[] words = line.toLowerCase().split("[,. ]"); - - // Worte in den Puffer übertragen - wordList.addAll(Arrays.asList(words)); - } - - reader.close(); - - return wordList; - } - - /** - * Sortiert das übergebene Array alphabetisch und entfernt Duplikate. - * - * @param input Eingabe Array - * @return sortiertes und bereinigtes Array - */ - @SuppressWarnings("PMD.AvoidReassigningLoopVariables") - private static List removeDuplicates(List input) { - - // Eingabe-Liste kopieren - List strings = new ArrayList<>(input); - - // Liste sortieren - Collections.sort(strings); - - // Über die Einträge laufen - for (int i = 0; i < strings.size(); i++) { - - String word = strings.get(i); - - // Über die Einträge laufen - for (int k = i + 1; k < strings.size(); k++) { - - String otherWord = strings.get(k); - - if (otherWord.compareTo(word) > 0) { - // Sind schon hinter der möglichen Position - break; - } - else if (otherWord.equals(word)) { - // Duplikat, entfernen - strings.remove(k); - k--; - } - } - } - - return strings; - } - - /** - * Hauptmethode. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - - try { - List words = listWords( - "kafka.txt"); - System.out.println(words); - } catch (IOException e) { - System.err.println("Probleme beim Dateizugriff: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/collections/list_iterator/Liste.java b/solutions/src/main/java/pr2/collections/list_iterator/Liste.java deleted file mode 100644 index 6833b72..0000000 --- a/solutions/src/main/java/pr2/collections/list_iterator/Liste.java +++ /dev/null @@ -1,57 +0,0 @@ -package pr2.collections.list_iterator; - -import java.util.Iterator; -public class Liste implements Iterable { - - static class Item { - T element; - Item next; - - public Item(T element) { - this.element = element; - } - } - - Item first; - Item last; - - class ListenIterator implements Iterator { - Item position = first; - - @Override - public boolean hasNext() { - return (position != null); - } - - @Override - public T next() { - T element = position.element; - position = position.next; - return element; - } - - @Override - public void remove() { - throw new UnsupportedOperationException(); - } - } - - public void add(T element) { - Item item = new Item(element); - - first = (first != null) ? first : item; - - if (last == null) { - last = item; - } else { - last.next = item; - last = item; - } - - } - - @Override - public Iterator iterator() { - return new ListenIterator(); - } -} diff --git a/solutions/src/main/java/pr2/collections/map/WordCount.java b/solutions/src/main/java/pr2/collections/map/WordCount.java deleted file mode 100644 index 5c18fcf..0000000 --- a/solutions/src/main/java/pr2/collections/map/WordCount.java +++ /dev/null @@ -1,83 +0,0 @@ -package pr2.collections.map; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Zählen von Worthäufigkeiten. - */ -public class WordCount { - - /** - * Listet alle Worte in der Datei und deren Häufigkeit auf. - * Die zurückgegebene Liste ist bereits nach der Häufigkeit - * sortiert. - * - * @param filename Dateiname - * @return die Liste der vorhandenen Wörter - * @throws IOException Fehler beim Dateizugriff. - */ - private static List countWords(String filename) - throws IOException { - - // Map mit dem Wort als Schlüssel und der Häufigkeit als Key - Map frequencyMap = new HashMap<>(); - - // Datei zum Lesen öffnen - BufferedReader reader = new BufferedReader(new FileReader(filename)); - - String line; // aktuelle Zeile - - // Über die Zeilen der Datei iterieren - while ((line = reader.readLine()) != null) { - - // Sonderzeichen entfernen und die Zeilen in Worte splitten - line = line.toLowerCase(); - line = line.replaceAll("[\",.:;)'\\-!?]", ""); - - String[] words = line.toLowerCase().split("[,. ]"); - - for (String word : words) { - WordFrequency entry = frequencyMap.get(word); - if (entry == null) { - entry = new WordFrequency(word, 0); - frequencyMap.put(word, entry); - } - - entry.incrementFrequency(); - } - } - - reader.close(); - - List liste = new ArrayList<>(frequencyMap.values()); - Collections.sort(liste); - - return liste; - } - - /** - * Hauptmethode. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - - try { - List words = countWords( - "kafka.txt"); - - for (WordFrequency word : words) { - System.out.println(word); - } - } catch (IOException e) { - System.err.println("Probleme beim Dateizugriff: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/collections/map/WordFrequency.java b/solutions/src/main/java/pr2/collections/map/WordFrequency.java deleted file mode 100644 index 1b1cea1..0000000 --- a/solutions/src/main/java/pr2/collections/map/WordFrequency.java +++ /dev/null @@ -1,56 +0,0 @@ -package pr2.collections.map; - -/** - * Klasse für die Verwaltung der Worthäufigkeiten. - */ -public class WordFrequency implements Comparable { - - /** - * Das Wort. - */ - String word; - - /** - * Seine Häufigkeit. - */ - int frequency; - - /** - * Legt ein neues Objekt an. - * - * @param word das gespeicherte Wort - * @param frequency die Häfigkeit - */ - WordFrequency(String word, int frequency) { - this.word = word; - this.frequency = frequency; - } - - - /** - * Vergleich mit anderem Objekt. - * - * @param o das andere Objekt - * @return Ergebnis des Vergleiches - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - @Override - public int compareTo(WordFrequency o) { - return o.frequency - frequency; - } - - /** - * Erhöht die Häufigkeit des Wortes. - */ - public void incrementFrequency() { - frequency++; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("%s: %d", word, frequency); - } -} diff --git a/solutions/src/main/java/pr2/collections/reverser/Reverser.java b/solutions/src/main/java/pr2/collections/reverser/Reverser.java deleted file mode 100644 index 0025563..0000000 --- a/solutions/src/main/java/pr2/collections/reverser/Reverser.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.collections.reverser; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class Reverser { - public void reverse(List liste) { - - Collections.sort(liste, new Comparator() { - - @Override - public int compare(String o1, String o2) { - return o1.compareTo(o2) * -1; - } - }); - } -} diff --git a/solutions/src/main/java/pr2/collections/reverser/test/ReverserTest.java b/solutions/src/main/java/pr2/collections/reverser/test/ReverserTest.java deleted file mode 100644 index 09f0091..0000000 --- a/solutions/src/main/java/pr2/collections/reverser/test/ReverserTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package pr2.collections.reverser.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.reverser.Reverser; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class ReverserTest { - - @Test - void testReverser() { - List testListe = Arrays.asList("Meier", "Zabelmann", "Schulze", - "Xavier", "Albert"); - new Reverser().reverse(testListe); - assertEquals(Arrays.asList( - "Zabelmann", "Xavier", "Schulze", "Meier", "Albert"), - testListe); - } - -} diff --git a/solutions/src/main/java/pr2/collections/reverser_generic/Reverser.java b/solutions/src/main/java/pr2/collections/reverser_generic/Reverser.java deleted file mode 100644 index 5d03b9d..0000000 --- a/solutions/src/main/java/pr2/collections/reverser_generic/Reverser.java +++ /dev/null @@ -1,19 +0,0 @@ -package pr2.collections.reverser_generic; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class Reverser> { - - public void reverse(List liste) { - - Collections.sort(liste, new Comparator() { - - @Override - public int compare(T o1, T o2) { - return o1.compareTo(o2) * -1; - } - }); - } -} diff --git a/solutions/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java b/solutions/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java deleted file mode 100644 index a623dc2..0000000 --- a/solutions/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package pr2.collections.reverser_generic.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.reverser_generic.Reverser; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class ReverserTest { - - @Test - void testReverser() { - List testListe = Arrays.asList("Meier", "Zabelmann", "Schulze", - "Xavier", "Albert"); - new Reverser().reverse(testListe); - assertEquals(Arrays.asList( - "Zabelmann", "Xavier", "Schulze", "Meier", "Albert"), - testListe); - } - -} diff --git a/solutions/src/main/java/pr2/collections/set/WordCollector.java b/solutions/src/main/java/pr2/collections/set/WordCollector.java deleted file mode 100644 index 8c8fcc5..0000000 --- a/solutions/src/main/java/pr2/collections/set/WordCollector.java +++ /dev/null @@ -1,81 +0,0 @@ -package pr2.collections.set; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Klassen, um die in einem Text vorkommenen Wörter zu sammeln. - */ -public class WordCollector { - - - /** - * Listet alle Worte in der Datei alphabetisch auf. Duplikate werden - * entfernt. Die Wörter werden in Kleinbuchstaben umgewandelt. - * - * @param filename Dateiname - * @return die Liste der vorhandenen Worte - * @throws IOException Fehler beim Dateizugriff. - */ - public static List listWords(String filename) throws IOException { - Set allWords = readFileAndSplitIntoWords(filename); - List wordsSorted = new ArrayList<>(allWords); - Collections.sort(wordsSorted); - return wordsSorted; - } - - /** - * Listet alle Worte in der Datei auf. - * - * @param filename Dateiname - * @return die Liste der vorhandenen Worte - * @throws IOException Fehler beim Dateizugriff. - */ - private static Set readFileAndSplitIntoWords(String filename) - throws IOException { - - // Datei zum Lesen öffnen - BufferedReader reader = new BufferedReader(new FileReader(filename)); - - String line; // aktuelle Zeile - Set wordBuffer = new HashSet<>(); // Puffer für die Worte - - // Über die Zeilen der Datei iterieren - while ((line = reader.readLine()) != null) { - - // Sonderzeichen entfernen und die Zeilen in Worte splitten - line = line.replaceAll("[\",.:'\\-!?]", ""); - - String[] words = line.toLowerCase().split("[,. ]"); - - // Worte in den Puffer übertragen - wordBuffer.addAll(Arrays.asList(words)); - } - - reader.close(); - - return wordBuffer; - } - - /** - * Hauptmethode. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - - try { - List words = listWords("kafka.txt"); - System.out.println(words); - } catch (IOException e) { - System.err.println("Probleme beim Dateizugriff: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java b/solutions/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java deleted file mode 100644 index 471bf93..0000000 --- a/solutions/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.collections.sorter_1; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class CommandLineSorter { - - public static void main(String[] args) { - List argList = Arrays.asList(args); - Collections.sort(argList); - - for (String element : argList) { - System.out.println(element); - } - } -} diff --git a/solutions/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java b/solutions/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java deleted file mode 100644 index 6ab92bb..0000000 --- a/solutions/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.collections.sorter_2; - -import java.util.Arrays; -import java.util.Set; -import java.util.TreeSet; - -public class CommandLineSorter { - - public static void main(String[] args) { - Set argList = new TreeSet(Arrays.asList(args)); - - for (String element : argList) { - System.out.println(element); - } - } -} diff --git a/solutions/src/main/java/pr2/collections/sortieren/Sorter.java b/solutions/src/main/java/pr2/collections/sortieren/Sorter.java deleted file mode 100644 index 2efeeb9..0000000 --- a/solutions/src/main/java/pr2/collections/sortieren/Sorter.java +++ /dev/null @@ -1,83 +0,0 @@ -package pr2.collections.sortieren; - -import java.util.Arrays; -import java.util.Comparator; - -/** - * Klasse zum Sortieren von Strings. - */ -public class Sorter { - - /** - * Liefert einen Comparator für Strings. - * - * @param order Sortierreihenfolge. - * @return Comparator, entsprechend der gewünschten Sortierreihenfolge. - */ - private static Comparator stringComparator(final SortOrder order) { - /* Comparator. */ - class MyComparator implements Comparator { - - /** - * Vergleicht die Strings. - * - * @param o1 Erster String - * @param o2 Zweiter String - * @return Ergebnis des Vergleichs. - */ - @Override - public int compare(String o1, String o2) { - switch (order) { - case ASCENDING: - return o1.compareTo(o2); - case DESCENDING: - return -o1.compareTo(o2); - case ASCENDING_CASE_INSENSITIVE: - return o1.toUpperCase().compareTo(o2.toUpperCase()); - case DESCENDING_CASE_INSENSITIVE: - return -o1.toUpperCase().compareTo(o2.toUpperCase()); - default: - throw new IllegalArgumentException(); - } - } - } - - return new MyComparator(); - } - - /** - * Sortiert das übergebene Array entsprechend der gewünschten Reihenfolge. - * - * @param array das zu sortierende Array. - * @param order die Sortierreihenfolge. - */ - public static void sort(String[] array, SortOrder order) { - Arrays.sort(array, stringComparator(order)); - } - - /** - * Sortierreihenfolge für die Strings. - */ - public enum SortOrder { - - /** - * Aufsteigend. - */ - ASCENDING, - - /** - * Absteigend. - */ - DESCENDING, - - /** - * Aufsteigend, ohne Beachtung der Groß-/Kleinschreibung. - */ - ASCENDING_CASE_INSENSITIVE, - - /** - * Absteigend, ohne Beachtung der Groß-/Kleinschreibung. - */ - DESCENDING_CASE_INSENSITIVE - } -} diff --git a/solutions/src/main/java/pr2/collections/sortieren/test/SorterTest.java b/solutions/src/main/java/pr2/collections/sortieren/test/SorterTest.java deleted file mode 100644 index a2c30f2..0000000 --- a/solutions/src/main/java/pr2/collections/sortieren/test/SorterTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package pr2.collections.sortieren.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.sortieren.Sorter; -import pr2.collections.sortieren.Sorter.SortOrder; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - - -/** - * Test für die Sortierung. - */ -public class SorterTest { - - private static final String[] DATA = - {"aaron", "ALFONS", "bond", "BerND", "henry", "Hugo"}; - - /** - * Testet die Sortierung: aufsteigend. - */ - @Test - void testAscendingSorting() { - - String[] asc = DATA.clone(); - - Sorter.sort(asc, SortOrder.ASCENDING); - - assertArrayEquals( - new String[] {"ALFONS", "BerND", "Hugo", "aaron", "bond", - "henry"}, asc); - } - - /** - * Testet die Sortierung: Absteigend. - */ - @Test - void testDescendingSorting() { - - String[] desc = DATA.clone(); - Sorter.sort(desc, SortOrder.DESCENDING); - - assertArrayEquals( - new String[] {"henry", "bond", "aaron", "Hugo", "BerND", - "ALFONS"}, desc); - } - - /** - * Testet die Sortierung: Aufsteigend, CI. - */ - @Test - void testAscendingCISorting() { - - String[] ascCI = DATA.clone(); - Sorter.sort(ascCI, SortOrder.ASCENDING_CASE_INSENSITIVE); - - assertArrayEquals( - new String[] {"aaron", "ALFONS", "BerND", "bond", "henry", - "Hugo"}, ascCI); - } - - /** - * Testet die Sortierung: Absteigend, CI. - */ - @Test - void testDescendingCISorting() { - - String[] descCI = DATA.clone(); - - Sorter.sort(descCI, SortOrder.DESCENDING_CASE_INSENSITIVE); - - assertArrayEquals( - new String[] {"Hugo", "henry", "bond", "BerND", "ALFONS", - "aaron"}, descCI); - } -} diff --git a/solutions/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java b/solutions/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java deleted file mode 100644 index 9a4d618..0000000 --- a/solutions/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java +++ /dev/null @@ -1,37 +0,0 @@ -package pr2.collections.woerterbuch; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -public class Woerterbuch { - - private static final Map WOERTER; - - static { - Map map = new HashMap(); - map.put("gehen", "go"); - map.put("schlafen", "sleep"); - map.put("tanzen", "dance"); - map.put("springen", "jump"); - - WOERTER = Collections.unmodifiableMap(map); - } - - public static void main(String[] args) { - if (args.length == 0) { - System.err.println("Bitte mindestens ein Wort angeben!"); - System.exit(1); - } - - for (String wort : args) { - String uebersetzung = WOERTER.get(wort); - - if (uebersetzung == null) { - uebersetzung = ""; - } - - System.out.printf("%s => %s%n", wort, uebersetzung); - } - } -} diff --git a/solutions/src/main/java/pr2/enums/eigene/Wuerfel.java b/solutions/src/main/java/pr2/enums/eigene/Wuerfel.java deleted file mode 100644 index beeb3a2..0000000 --- a/solutions/src/main/java/pr2/enums/eigene/Wuerfel.java +++ /dev/null @@ -1,38 +0,0 @@ -package pr2.enums.eigene; - -import java.util.Random; - -/** - * Ein einfacher Würfel. - */ -public class Wuerfel { - - - /** - * Zufallszahlengenerator. - */ - private final Random rnd = new Random(); - - /** - * Anzahl der Seiten des Würfels. - */ - private final int numSides; - - /** - * Einen neuen Würfel anlegen. - * - * @param typ Anzahl der Seiten des Würfels. - */ - public Wuerfel(WuerfelTyp typ) { - this.numSides = typ.getSeiten(); - } - - /** - * Den Würfel werfen. - * - * @return Ergebnis des Wurfes. - */ - public int roll() { - return rnd.nextInt(numSides) + 1; - } -} diff --git a/solutions/src/main/java/pr2/enums/eigene/WuerfelTyp.java b/solutions/src/main/java/pr2/enums/eigene/WuerfelTyp.java deleted file mode 100644 index 19047f9..0000000 --- a/solutions/src/main/java/pr2/enums/eigene/WuerfelTyp.java +++ /dev/null @@ -1,70 +0,0 @@ -package pr2.enums.eigene; - -/** - * Enumeration für die verschiedenen Würfel-Typen. - */ -public enum WuerfelTyp { - - /** - * 4-seitiger Würfel. - */ - D4(4), - - /** - * 6-seitiger Würfel. - */ - D6(6), - - /** - * 8-seitiger Würfel. - */ - D8(8), - - /** - * 10-seitiger Würfel. - */ - D10(10), - - /** - * 12-seitiger Würfel. - */ - D12(12), - - /** - * 20-seitiger Würfel. - */ - D20(20); - - /** - * Anzahl der Seiten. - */ - private final int seiten; - - /** - * Neue Instanz anlegen. - * - * @param seiten Anzahl der Seiten. - */ - WuerfelTyp(int seiten) { - this.seiten = seiten; - } - - /** - * Anzahl der Seiten. - * - * @return Anzahl der Seiten. - */ - public int getSeiten() { - return seiten; - } - - /** - * Durchschnittliche Augenzahl bei einer großen Anzahl von - * Würfen. - * - * @return Durchschnittliche Augenzahl. - */ - public double average() { - return 0.5 * (seiten + 1); - } -} diff --git a/solutions/src/main/java/pr2/enums/eigene/test/WuerfelTest.java b/solutions/src/main/java/pr2/enums/eigene/test/WuerfelTest.java deleted file mode 100644 index 09f197d..0000000 --- a/solutions/src/main/java/pr2/enums/eigene/test/WuerfelTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package pr2.enums.eigene.test; - -import org.junit.jupiter.api.Test; -import pr2.enums.eigene.Wuerfel; -import pr2.enums.eigene.WuerfelTyp; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test für die Würfel. - */ -public class WuerfelTest { - - /** - * Anzahl der Durchläufe (Gesetz der großen Zahl!). - */ - private static final int RUNS = 10000000; - - @Test - void testFairness() { - for (WuerfelTyp typ : WuerfelTyp.values()) { - internalTestFairness(new Wuerfel(typ), typ.average()); - } - } - - /** - * Interne Hilfsmethode, um die Fairness zu testen. - * - * @param w der zu testende Wuerfel. - * @param expected Erwartungswert. - */ - private void internalTestFairness(Wuerfel w, double expected) { - long sum = 0; - - for (int i = 0; i < RUNS; i++) { - sum += w.roll(); - } - double average = (double) sum / (double) RUNS; - assertEquals(expected, average, 0.1); - } -} diff --git a/solutions/src/main/java/pr2/enums/filme/LieblingsFilme.java b/solutions/src/main/java/pr2/enums/filme/LieblingsFilme.java deleted file mode 100644 index 7ae95b1..0000000 --- a/solutions/src/main/java/pr2/enums/filme/LieblingsFilme.java +++ /dev/null @@ -1,50 +0,0 @@ -package pr2.enums.filme; - -public enum LieblingsFilme { - - /** - * Pulp Fiction. - */ - PULP_FICTION("Pulp Fiction", "Quentin Tarantino", 9), - /** - * Fight Club. - */ - FIGHT_CLUB("Fight Club", "David Fincher", 9), - /** - * Twelve Monkeys. - */ - TWELVE_MONKEYS("Twelve Monkeys", "Terry Giliam", 8), - /** - * Killer Tomatos. - */ - KILLER_TOMATOES("Attack of the Killer Tomatoes", "John de Bello", 4); - - private final String name; - private final int bewertung; - private final String regisseur; - - private LieblingsFilme(String name, String regisseur, - int bewertung) { - this.name = name; - this.regisseur = regisseur; - this.bewertung = bewertung; - } - - public String getName() { - return name; - } - - public int getBewertung() { - return bewertung; - } - - public String getRegisseur() { - return regisseur; - } - - @Override - public String toString() { - return String.format("'%s' von %s; Bewertung %d", name, - regisseur, bewertung); - } -} diff --git a/solutions/src/main/java/pr2/enums/filme/Main.java b/solutions/src/main/java/pr2/enums/filme/Main.java deleted file mode 100644 index 8a53673..0000000 --- a/solutions/src/main/java/pr2/enums/filme/Main.java +++ /dev/null @@ -1,9 +0,0 @@ -package pr2.enums.filme; - -public class Main { - public static void main(String[] args) { - for (LieblingsFilme f : LieblingsFilme.values()) { - System.out.println(f); - } - } -} diff --git a/solutions/src/main/java/pr2/enums/schnick/Move.java b/solutions/src/main/java/pr2/enums/schnick/Move.java deleted file mode 100644 index eccdd75..0000000 --- a/solutions/src/main/java/pr2/enums/schnick/Move.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.enums.schnick; - -public enum Move { - /** - * Konstante für Schere. - */ - SCISSORS("Scissors", "s"), - - /** - * Konstante für Papier. - */ - PAPER("Paper", "p"), - - /** - * Konstante für Stein. - */ - ROCK("Rock", "r"); - - private final String name; - private final String key; - - private Move(String name, String key) { - this.name = name; - this.key = key; - } - - @Override - public String toString() { - return name; - } - - /** - * Returns the move corresponding to the key entered. - * - * @param key the key pressed. - * @return the corresponding move. - */ - public static Move find(String key) { - for (Move m : values()) { - if (m.key.equals(key.toLowerCase())) { - return m; - } - } - return null; - } -} diff --git a/solutions/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java b/solutions/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java deleted file mode 100644 index 68ada87..0000000 --- a/solutions/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java +++ /dev/null @@ -1,89 +0,0 @@ -package pr2.enums.schnick; - -import java.util.Random; -import java.util.Scanner; - -/** - * Schick - Schnack - Schnuck (Rock - Paper - Scissors). - */ -public class SchnickSchnackSchnuck { - - /** - * Vergleicht den Zug zweier Spieler. - * - * @param a Zug von Spieler a. - * @param b Zug von Spieler b. - * @return 1 spieler a hat gewonnen, 0, unentschieden, -1 spieler b - * hat gewonnen. - */ - private static int compare(Move a, Move b) { - - if (a == b) { - return 0; - } - else if (a == Move.SCISSORS && b == Move.PAPER) { - return 1; - } - else if (a == Move.ROCK && b == Move.SCISSORS) { - return 1; - } - else if (a == Move.PAPER && b == Move.ROCK) { - return 1; - } - else { - return compare(b, a) * -1; - } - } - - public static void main(String[] args) { - - Scanner scanner = new Scanner(System.in); - Random rnd = new Random(); - - int pointsPlayer = 0; - int pointsComputer = 0; - - // Play three rounds - for (int i = 0; i < 3; i++) { - - // Read the player's choice - Move movePlayer = null; - - while (movePlayer == null) { - System.out.printf( - "\nRunde %s: Dein Zug ([r]rock, [p]aper, [s]cissors)? ", - i); - String move = scanner.nextLine().trim(); - movePlayer = Move.find(move); - } - - // Random move of the computer - Move moveComputer = - Move.values()[rnd.nextInt(2)]; - - // Compare moves - int winner = compare(movePlayer, moveComputer); - - String winnerText; - - if (winner == 1) { - pointsPlayer++; - winnerText = "Du hast gewonnen"; - } else if (winner == -1) { - pointsComputer++; - winnerText = "Der Computer hat gewonnen"; - } else { - winnerText = "Unentschieden"; - } - System.out.printf("%s: %s, Computer: %s - [%d:%d]\n", - winnerText, - movePlayer, moveComputer, - pointsPlayer, pointsComputer); - } - - System.out.printf( - "\nErgebnis - Du %d Punkt(e), " - + "Computer %d Punkt(e)", - pointsPlayer, pointsComputer); - } -} diff --git a/solutions/src/main/java/pr2/enums/singleton/MyEnum.java b/solutions/src/main/java/pr2/enums/singleton/MyEnum.java deleted file mode 100644 index be83cc0..0000000 --- a/solutions/src/main/java/pr2/enums/singleton/MyEnum.java +++ /dev/null @@ -1,7 +0,0 @@ -package pr2.enums.singleton; - -enum MyEnum { - A, - B, - C; -} diff --git a/solutions/src/main/java/pr2/enums/singleton/SingletonBeweis.java b/solutions/src/main/java/pr2/enums/singleton/SingletonBeweis.java deleted file mode 100644 index 327cf52..0000000 --- a/solutions/src/main/java/pr2/enums/singleton/SingletonBeweis.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.enums.singleton; - -public class SingletonBeweis { - - public static void main(String[] args) { - MyEnum e1 = MyEnum.A; - MyEnum e2 = MyEnum.valueOf("A"); - MyEnum e3 = MyEnum.values()[0]; - - System.out.println(e1 == e2); - System.out.println(e2 == e3); - System.out.println(e1 == e3); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java b/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java deleted file mode 100644 index 5b9f0ab..0000000 --- a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java +++ /dev/null @@ -1,164 +0,0 @@ -package pr2.exceptions.ausnahmen_testen; - -/** - * Implementierung einer Caesar-Verschlüsselung. - *

- * Der Eingabetext ({@literal message}) darf nur aus den Groß-Buchstaben A-Z - * bestehen. Alle anderen Zeichen (einschließlich der Leerzeichen) führen zu - * einer entsprechenden Ausnahme. - *

- * Dasselbe gilt für die Entschlüsselung. Auch hier dürfen nur gültige - * Zeichen auftauchen. Andernfalls kommt es zu einer Ausnahme. - *

- * Der Schlüssel darf nur aus einem einzelnen Zeichen bestehen und muss - * ebenfalls aus dem Bereich A-Z stammen. Kleinbuchstaben oder andere - * Zeichen führen zu einer Ausnahme. - *

- * Zwischen den beiden Methoden muss bei gleichem Schlüssel {@code key} - * folgendes gelten: - *

- * {@code text.equals(decrypt(key, encrypt(key, text)) == true}. - */ -public class CrypterCaesar { - - /** - * Gültige Zeichen für Schlüssel und Text. - */ - protected static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - /** - * Verschlüsselt den gegebenen Text mit dem angegebenen Schlüssel. - * - * @param key Schlüssel, der verwendet werden soll. - * @param message Nachricht, die Verschlüsselt werden soll. - * @return verschlüsselter Text. - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - public String encrypt(String key, String message) - throws IllegalMessageException, IllegalKeyException { - - checkKeyAndMessage(key, message); - - int shift = key.charAt(0) - 'A' + 1; - return shift(message, shift); - } - - /** - * Entschlüsselt den gegebenen Text mit dem angegebenen Schlüssel. - * - * @param key Schlüssel, der verwendet werden soll. - * @param cypherText Nachricht, die entschlüsselt werden soll. - * @return entschlüsselter Text. - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - public String decrypt(String key, String cypherText) - throws IllegalKeyException, IllegalMessageException { - - checkKeyAndMessage(key, cypherText); - - int shift = key.charAt(0) - 'A' + 1; - return shift(cypherText, -shift); - } - - /** - * Verschiebt die Zeichen im Text um den gegebenen Faktor. - * - * @param text Nachricht - * @param shift Verschiebefaktor - * @return das Ergebnis als String - */ - private String shift(String text, int shift) { - - StringBuilder result = new StringBuilder(); - - for (char c : text.toCharArray()) { - char newChar = (char) (c + shift); - - if (newChar > 'Z') { - // Überlauf nach hinten - newChar = (char) (newChar - ('Z' - 'A' + 1)); - } - else if (newChar < 'A') { - // Überlauf nach vorne - newChar = (char) (newChar + ('Z' - 'A' + 1)); - } - - result.append(newChar); - } - - return result.toString(); - } - - /** - * Prüft Schlüssel und Nachricht. - * - * @param key der Schlüssel - * @param message die Nachricht - * @throws IllegalKeyException Schlüssel nicht OK - * @throws IllegalMessageException Nachricht nicht OK - */ - private void checkKeyAndMessage(String key, String message) - throws IllegalKeyException, IllegalMessageException { - - if (!checkKey(key)) { - throw new IllegalKeyException(key); - } - - if (!checkCharacters(message, ALPHABET)) { - throw new IllegalMessageException(key); - } - } - - /** - * Testet den Schlüssel auf Korrektheit: Er muss mindestens die Länge 1 - * haben und darf nur Zeichen von A-Z enthalten. - * - * @param key zu testender Schlüssel - * @return {@code true} if characters are ok, otherwise {@code false} - */ - protected boolean checkKey(String key) { - - if (key.length() != 1) { - return false; - } - - return checkCharacters(key, ALPHABET); - } - - /** - * Checks the given input to ensure that it only contains the given - * character set and no other characters. - * - * @param inputChars the string to be checked - * @param charSet a string containing all allowed characters - * @return {@code true} if characters are ok, otherwise {@code false} - */ - protected boolean checkCharacters(char[] inputChars, String charSet) { - - for (char c : inputChars) { - if (charSet.indexOf(c) == -1) { - return false; - } - } - - return true; - } - - /** - * Checks the given input to ensure that it only contains the given - * character set and no other characters. - * - * @param input the string to be checked - * @param charSet a string containing all allowed characters - * @return {@code true} if characters are ok, otherwise {@code false} - */ - protected boolean checkCharacters(String input, String charSet) { - return checkCharacters(input.toCharArray(), charSet); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java b/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java deleted file mode 100644 index 469e5bf..0000000 --- a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java +++ /dev/null @@ -1,31 +0,0 @@ -package pr2.exceptions.ausnahmen_testen; - -/** - * Ungültiger Schlüssel. - */ -public class IllegalKeyException extends Exception { - - /** - * Legt eine neue Ausnahme an. - */ - public IllegalKeyException() { - super(); - } - - /** - * Legt eine neue Ausnahme an. - * - * @param message die Nachricht. - */ - public IllegalKeyException(String message) { - super(message); - } - - /** - * @see java.lang.Throwable#toString() - */ - @Override - public String toString() { - return getMessage(); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java b/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java deleted file mode 100644 index 141a2b7..0000000 --- a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java +++ /dev/null @@ -1,31 +0,0 @@ -package pr2.exceptions.ausnahmen_testen; - -/** - * Ungültige Nachricht. - */ -public class IllegalMessageException extends Exception { - - /** - * Legt eine neue Ausnahme an. - */ - public IllegalMessageException() { - super(); - } - - /** - * Legt eine neue Ausnahme an. - * - * @param message die Nachricht. - */ - public IllegalMessageException(String message) { - super(message); - } - - /** - * @see java.lang.Throwable#toString() - */ - @Override - public String toString() { - return getMessage(); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java b/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java deleted file mode 100644 index edc2ebc..0000000 --- a/solutions/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package pr2.exceptions.ausnahmen_testen.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.exceptions.ausnahmen_testen.CrypterCaesar; -import pr2.exceptions.ausnahmen_testen.IllegalKeyException; -import pr2.exceptions.ausnahmen_testen.IllegalMessageException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Testklasse für die Verschlüsselung. - */ -public class CaesarTest { - - - /** - * Testet auf falschen Schlüssel. - * - * @throws pr2.exceptions.ausnahmen_testen.IllegalMessageException - * Wird geworfen, wenn die Nachricht ungültig ist. - * @throws pr2.exceptions.ausnahmen_testen.IllegalKeyException - * Wird geworfen, wenn der Schlüssel ungültig ist. - */ - @Test - void testWrongKey1() - throws IllegalKeyException, IllegalMessageException { - - String key = "AB"; - CrypterCaesar c = new CrypterCaesar(); - - Assertions.assertThrows(IllegalKeyException.class, () -> { - c.encrypt(key, "HALLO"); - }); - } - - /** - * Testet auf falschen Schlüssel. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testWrongKey2() - throws IllegalKeyException, IllegalMessageException { - String key = "0"; - CrypterCaesar c = new CrypterCaesar(); - Assertions.assertThrows(IllegalKeyException.class, () -> { - c.encrypt(key, "HALLO"); - }); - } - - /** - * Testet auf falsche Nachricht. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testWrongMessage1() - throws IllegalKeyException, IllegalMessageException { - String key = "K"; - CrypterCaesar c = new CrypterCaesar(); - - Assertions.assertThrows(IllegalKeyException.class, () -> { - c.encrypt(key, "üäaD&"); - }); - } - - /** - * Testet auf falsche Nachricht. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testWrongMessage2() - throws IllegalKeyException, IllegalMessageException { - String key = "K"; - CrypterCaesar c = new CrypterCaesar(); - - Assertions.assertThrows(IllegalKeyException.class, () -> { - c.encrypt(key, "üäaD&"); - }); - } - - /** - * Testet auf falsche Nachricht. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testWrongCypher1() - throws IllegalKeyException, IllegalMessageException { - String key = "K"; - CrypterCaesar c = new CrypterCaesar(); - - Assertions.assertThrows(IllegalKeyException.class, () -> { - c.decrypt(key, "üäaD&"); - }); - } - - /** - * Testet auf falsche Nachricht. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testWrongCypher2() - throws IllegalKeyException, IllegalMessageException { - String key = "K"; - CrypterCaesar c = new CrypterCaesar(); - Assertions.assertThrows(IllegalKeyException.class, () -> { - c.decrypt(key, "DIESiSTEINTEST&"); - }); - } - - - /** - * Testet die Verschlüsselung an sich. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testCaesar() - throws IllegalKeyException, IllegalMessageException { - String klarText = "KATHARGOMUSSFALLEN"; - CrypterCaesar c = new CrypterCaesar(); - assertEquals(klarText, c.decrypt("C", c.encrypt("C", klarText))); - assertEquals("FDHVDU", c.encrypt("C", "CAESAR")); - assertEquals(klarText, c.encrypt("Z", klarText)); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java b/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java deleted file mode 100644 index f71ecb5..0000000 --- a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java +++ /dev/null @@ -1,58 +0,0 @@ -package pr2.exceptions.eigene_ausnahme; - -/** - * Eine Sicherung im Stromkreis. - */ -public class Fuse { - - /** - * 16 Ampere-Sicherung. - */ - public static final int A16 = 16; - - /** - * 25 Ampere-Sicherung. - */ - public static final int A25 = 25; - - /** - * 32 Ampere-Sicherung. - */ - public static final int A32 = 32; - - /** - * Strom, bei dem die Sicherung auslöst. - */ - private final int tripCurrent; - - /** - * Legt eine neue Sicherung an. - * - * @param tripCurrent Strom, bei dem die Sicherung auslösen soll. - * @throws IllegalCurrentException Ausnahme bei einem - * ungültigen Spannungswert. - */ - public Fuse(int tripCurrent) throws IllegalCurrentException { - switch (tripCurrent) { - case A16: - case A25: - case A32: - this.tripCurrent = tripCurrent; - break; - default: - throw new IllegalCurrentException(tripCurrent); - } - } - - /** - * Die Sicherung benutzen. - * - * @param current Strom, der durch die Sicherung fließt. - * @throws FuseTrippedException wird geworfen, wenn der Srom zu groß wird. - */ - public void use(int current) throws FuseTrippedException { - if (current > tripCurrent) { - throw new FuseTrippedException(current, tripCurrent); - } - } -} diff --git a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java b/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java deleted file mode 100644 index 06406a0..0000000 --- a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java +++ /dev/null @@ -1,37 +0,0 @@ -package pr2.exceptions.eigene_ausnahme; - -/** - * Ausnahme, wenn die Sicherung auslöst. - */ -public class FuseTrippedException extends Exception { - /** - * Strom, bei dem die Sicherung ausgelöst hat. - */ - private final int current; - - /** - * Auslösestrom der Sicherung. - */ - private final int tripCurrent; - - /** - * Erzeugt eine neue Ausnahme. - * - * @param current Strom, bei dem die Sicherung ausgelöst hat. - * @param tripCurrent Auslösestrom der Sicherung. - */ - public FuseTrippedException(int current, int tripCurrent) { - super(); - this.current = current; - this.tripCurrent = tripCurrent; - } - - /** - * @see java.lang.Throwable#toString() - */ - @Override - public String toString() { - return String.format("Maximaler Strom: %d, Auslösestrom: %d", - tripCurrent, current); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java b/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java deleted file mode 100644 index 2a163c9..0000000 --- a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java +++ /dev/null @@ -1,30 +0,0 @@ -package pr2.exceptions.eigene_ausnahme; - -/** - * Ausnahme, wenn eine Sicherung angelegt werden soll, die es nicht gibt. - */ -public class IllegalCurrentException extends Exception { - - /** - * Übergebener Strom. - */ - private final int givenValue; - - /** - * Erzeugt eine neue Ausnahme. - * - * @param givenValue gegebener Strom. - */ - public IllegalCurrentException(int givenValue) { - super(); - this.givenValue = givenValue; - } - - /** - * @see java.lang.Throwable#toString() - */ - @Override - public String toString() { - return String.format("Falscher Wert %d", givenValue); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java b/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java deleted file mode 100644 index 5796211..0000000 --- a/solutions/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java +++ /dev/null @@ -1,158 +0,0 @@ -package pr2.exceptions.eigene_ausnahme.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.exceptions.eigene_ausnahme.Fuse; -import pr2.exceptions.eigene_ausnahme.FuseTrippedException; -import pr2.exceptions.eigene_ausnahme.IllegalCurrentException; - -/** - * Testet die Sicherung. - */ -public class FuseTest { - - - /** - * Testet die Erzeugung von Sicherungen mit gültigen Werten. - * - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testCreationValid() throws IllegalCurrentException { - new Fuse(Fuse.A16); - new Fuse(Fuse.A25); - new Fuse(Fuse.A32); - } - - /** - * Testet die Erzeugung von Sicherungen mit ungültigen Werten. - * - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testCreationValid1() throws IllegalCurrentException { - Assertions.assertThrows(IllegalCurrentException.class, () -> { - new Fuse(15); - }); - } - - /** - * Testet die Erzeugung von Sicherungen mit ungültigen Werten. - * - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testCreationValid2() throws IllegalCurrentException { - Assertions.assertThrows(IllegalCurrentException.class, () -> { - new Fuse(-1); - }); - } - - /** - * Testet die Erzeugung von Sicherungen mit ungültigen Werten. - * - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testCreationValid3() throws IllegalCurrentException { - Assertions.assertThrows(IllegalCurrentException.class, () -> { - new Fuse(0); - }); - } - - /** - * Testet die Erzeugung von Sicherungen mit ungültigen Werten. - * - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testCreationValid4() throws IllegalCurrentException { - Assertions.assertThrows(IllegalCurrentException.class, () -> { - new Fuse(Integer.MAX_VALUE); - }); - } - - /** - * Testet die Erzeugung von Sicherungen mit ungültigen Werten. - * - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testCreationValid5() throws IllegalCurrentException { - Assertions.assertThrows(IllegalCurrentException.class, () -> { - new Fuse(Integer.MIN_VALUE); - }); - } - - /** - * Testet das Auslösen der Sicherung. - * - * @throws FuseTrippedException Sicherung hat ausgelöst. - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testTripping1() - throws FuseTrippedException, IllegalCurrentException { - - Fuse f = new Fuse(Fuse.A16); - f.use(5); - f.use(16); - f.use(0); - - f = new Fuse(Fuse.A25); - f.use(5); - f.use(16); - f.use(25); - - - Assertions.assertThrows(FuseTrippedException.class, () -> { - Fuse f2 = new Fuse(Fuse.A16); - f2.use(0); - f2.use(16); - f2.use(25); - }); - } - - /** - * Testet das Auslösen der Sicherung. - * - * @throws FuseTrippedException Sicherung hat ausgelöst. - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testTripping2() - throws FuseTrippedException, IllegalCurrentException { - Assertions.assertThrows(FuseTrippedException.class, () -> { - new Fuse(Fuse.A16).use(17); - }); - } - - /** - * Testet das Auslösen der Sicherung. - * - * @throws FuseTrippedException Sicherung hat ausgelöst. - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testTripping3() - throws FuseTrippedException, IllegalCurrentException { - - Assertions.assertThrows(FuseTrippedException.class, () -> { - new Fuse(Fuse.A16).use(Integer.MAX_VALUE); - }); - } - - /** - * Testet das Auslösen der Sicherung. - * - * @throws FuseTrippedException Sicherung hat ausgelöst. - * @throws IllegalCurrentException ungültiger Wert für die Sicherung. - */ - @Test - void testTripping4() - throws FuseTrippedException, IllegalCurrentException { - Assertions.assertThrows(FuseTrippedException.class, () -> { - new Fuse(Fuse.A32).use(40); - }); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java b/solutions/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java deleted file mode 100644 index 1f03a7c..0000000 --- a/solutions/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.exceptions.fakultaet; - -public class Fakultaet { - - public int fact(int n) throws FakultaetException { - if (n < 0) { - throw new FakultaetException("Keine negativen Zahlen!", n); - } - else if (n > 20) { - throw new FakultaetException("Keine Zahlen > 20", n); - } - return factIntern(n); - } - - private int factIntern(int n) { - return (n == 0) ? 1 : factIntern(n - 1) * n; - } -} diff --git a/solutions/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java b/solutions/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java deleted file mode 100644 index 6ef0290..0000000 --- a/solutions/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java +++ /dev/null @@ -1,15 +0,0 @@ -package pr2.exceptions.fakultaet; - -public class FakultaetException extends Exception { - - private final int zahl; - - public FakultaetException(String message, int zahl) { - super(message); - this.zahl = zahl; - } - - public int getZahl() { - return zahl; - } -} diff --git a/solutions/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java b/solutions/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java deleted file mode 100644 index 9c0eda8..0000000 --- a/solutions/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package pr2.exceptions.fakultaet.test; - -import org.junit.jupiter.api.Test; -import pr2.exceptions.fakultaet.Fakultaet; -import pr2.exceptions.fakultaet.FakultaetException; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -public class FakultaetTest { - - @Test - void testFact() throws FakultaetException { - Fakultaet f = new Fakultaet(); - assertEquals(1, f.fact(0)); - assertEquals(1, f.fact(1)); - assertEquals(2, f.fact(2)); - assertEquals(6, f.fact(3)); - assertEquals(24, f.fact(4)); - assertEquals(3628800, f.fact(10)); - } - - @Test - void testFactEx1() { - assertThrows(FakultaetException.class, () -> { - Fakultaet f = new Fakultaet(); - f.fact(-1); - }); - } - - @Test - void testFactEx2() { - assertThrows(FakultaetException.class, () -> { - Fakultaet f = new Fakultaet(); - f.fact(21); - }); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java b/solutions/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java deleted file mode 100644 index 5007c34..0000000 --- a/solutions/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java +++ /dev/null @@ -1,120 +0,0 @@ -package pr2.exceptions.handle_or_declare; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.Scanner; - -/** - * Anwendung, die die Buchstabenhäufigkeit in einem Text analysiert. - */ -public class Buchstabenzaehler { - - /** - * Einstiegspunkt in das Programm. - * - * @param args Kommandozeilenargumente - */ - public static void main(String[] args) { - Buchstabenzaehler bs = new Buchstabenzaehler(); - try { - bs.run(); - } - catch (StatistikException e) { - System.out.println("Statistik-Fehler: " + e); - } - } - - /** - * Startet den Buchstabenzaehler. - * - * @throws StatistikException Fehler bei der Berechnung der - * Buchstabenhäufigkeit. - */ - private void run() throws StatistikException { - System.out.print("Bitte geben Sie den Dateinamen an: "); - Scanner scanner = new Scanner(System.in); - String dateiname = scanner.nextLine(); - - int[] statistik; - - try { - statistik = parseFile("assets/" + dateiname); - printStatistik(statistik); - } - catch (FileNotFoundException e) { - System.out.println("Datei gibt es nicht"); - } - catch (IOException e) { - System.out.println("Fehler beim Zugriff auf die Datei: " + e); - } - finally { - scanner.close(); - } - } - - /** - * Druckt die Statistik aus. - * - * @param statistik Statistik - * @throws StatistikException Fehler bei den Eingabedaten - */ - private void printStatistik(int[] statistik) throws StatistikException { - - int summe = 0; - - for (int haeufigkeit : statistik) { - summe += haeufigkeit; - } - - double prozentSumme = 0.0; - - for (char c = 'a'; c <= 'z'; c++) { - int anzahl = statistik[c - 'a']; - double prozent = (double) anzahl / (double) summe * 100; - System.out.printf("%s: %.2f%% %n", "" + c, prozent); - - prozentSumme += prozent; - } - - if ((prozentSumme < 99.0) || (prozentSumme > 101.0)) { - throw new StatistikException(Double.toString(prozentSumme)); - } - - System.out.printf("Summe: %.2f%% %n", prozentSumme); - } - - /** - * Analysiert die übergebene Datei und berechnet die Buchstabenhäufigkeit. - * - * @param filename Dateiname - * @return die Buchstabenhäufigkeit. Das 'a' ist das erste Element, - * das 'b' das zweite etc. - * @throws IOException generelles IO-Problem - * @throws FileNotFoundException Datei gibt es nicht - */ - private int[] parseFile(String filename) - throws IOException, FileNotFoundException { - - int[] statistik = new int['z' - 'a' + 1]; - - BufferedReader br = new BufferedReader(new FileReader(filename)); - - String line; - - while ((line = br.readLine()) != null) { - char[] chars = line.toLowerCase().toCharArray(); - - for (char c : chars) { - if (('a' <= c) && (c <= 'z')) { - statistik[c - 'a']++; - } - } - } - - br.close(); - - return statistik; - } -} diff --git a/solutions/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java b/solutions/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java deleted file mode 100644 index 0d83170..0000000 --- a/solutions/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java +++ /dev/null @@ -1,31 +0,0 @@ -package pr2.exceptions.handle_or_declare; - -/** - * Ausnahme, wenn die Statisitk nicht konsistent ist. - */ -public class StatistikException extends Exception { - - /** - * Legt eine neue Ausnahme an. - */ - public StatistikException() { - super(); - } - - /** - * Legt eine neue Ausnahme an. - * - * @param message die Nachricht. - */ - public StatistikException(String message) { - super(message); - } - - /** - * @see java.lang.Throwable#toString() - */ - @Override - public String toString() { - return getMessage(); - } -} diff --git a/solutions/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java b/solutions/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java deleted file mode 100644 index 5750c5a..0000000 --- a/solutions/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java +++ /dev/null @@ -1,68 +0,0 @@ -package pr2.exceptions.try_catch; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.Random; - -/** - * Ein simples Zahlenraten-Spiel. - */ -public final class Zahlenraten { - - /** - * Liest einen String von der Tastatur. - * - * @return der gelesene String - * @throws IOException Probleme mit der Console - */ - private static String readNumber() throws IOException { - BufferedReader br = - new BufferedReader(new InputStreamReader(System.in)); - return br.readLine(); - } - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente - */ - public static void main(String[] args) { - - // zu ratende Zahl bestimmen - int zahl = new Random().nextInt(100) + 1; - - int versuche = 0; - - while (true) { - System.out.print("Bitte geben Sie eine Zahl ein: "); - - int geraten; - - try { - geraten = Integer.parseInt(readNumber()); - } - catch (IOException e) { - System.out.println("Problem mit der Konsole."); - break; - } - catch (NumberFormatException e) { - System.out.println("Bitte nur Zahlen eingeben!"); - continue; - } - - versuche++; - - if (geraten < zahl) { - System.out.println("Zu niedrig"); - } - else if (geraten > zahl) { - System.out.println("Zu hoch."); - } - else { - System.out.printf("Richtig in %d Versuchen", versuche); - break; - } - } - } -} diff --git a/solutions/src/main/java/pr2/generics/einfach/Liste.java b/solutions/src/main/java/pr2/generics/einfach/Liste.java deleted file mode 100644 index 320a8d5..0000000 --- a/solutions/src/main/java/pr2/generics/einfach/Liste.java +++ /dev/null @@ -1,88 +0,0 @@ -package pr2.generics.einfach; - -/** - * Eine einfache, verkettete Liste. - * - * @param Typ der gespeicherten Objekte - */ -public class Liste { - - /** - * Referenz auf den ersten Knoten. - */ - private ListeNode first; - - /** - * Referenz auf den aktuellen Knoten. - */ - private ListeNode current; - - /** - * Fügt ein neues Element an das Ende der Liste an. - * - * @param data das Element - */ - public void add(T data) { - - ListeNode nextNode = new ListeNode<>(data); - - if (current == null) { - // Liste komplett leer - first = nextNode; - current = nextNode; - } - else { - current.next = nextNode; - current = nextNode; - } - } - - /** - * Liest das Element an der gegebenen Position. - * - * @param index Index, beginnend bei 0. - * @return Das Element oder {@code null}, wenn es nicht gefunden wurde. - */ - public T get(int index) { - int count = 0; - ListeNode node = first; - - while ((node != null) && (count < index)) { - node = node.next; - count++; - } - - if ((count == index) && (node != null)) { - return node.data; - } - else { - // index does not exist - return null; - } - } - - /** - * Löscht die Liste und entfernt alle Elemente. - */ - public void clear() { - first = null; - current = null; - } - - /** - * Liefert die Anzahl der Elemente der Liste zurück. - * - * @return die Anzahl der Elemente. - */ - public int size() { - int count = 0; - ListeNode node = first; - - while (node != null) { - node = node.next; - count++; - } - - return count; - } -} diff --git a/solutions/src/main/java/pr2/generics/einfach/ListeNode.java b/solutions/src/main/java/pr2/generics/einfach/ListeNode.java deleted file mode 100644 index 819357c..0000000 --- a/solutions/src/main/java/pr2/generics/einfach/ListeNode.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.generics.einfach; - -/** - * Interne Repräsentation der Knoten in der Liste. - * - * @param Typ der gespeicherten Daten. - */ -class ListeNode { - - /** - * Daten. - */ - T data; - - /** - * Referenz auf den nächsten Knoten. - */ - ListeNode next; - - /** - * Legt einen neuen Knoten an. - * - * @param data daten, die gespeichert werden - */ - ListeNode(T data) { - this.data = data; - } -} diff --git a/solutions/src/main/java/pr2/generics/einfach/test/ListeTest.java b/solutions/src/main/java/pr2/generics/einfach/test/ListeTest.java deleted file mode 100644 index 2497f84..0000000 --- a/solutions/src/main/java/pr2/generics/einfach/test/ListeTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package pr2.generics.einfach.test; - -import org.junit.jupiter.api.Test; -import pr2.generics.einfach.Liste; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -/** - * Test für die Liste. - */ -public class ListeTest { - - /** - * Testet das Hinzufügen und Löschen der Liste. - */ - @Test - void testAddAndClear() { - Liste l = new Liste<>(); - - assertEquals(0, l.size()); - - l.add("Hallo"); - assertEquals(1, l.size()); - l.add("Hugo"); - assertEquals(2, l.size()); - l.add("Peter"); - l.add("Alfons"); - assertEquals(4, l.size()); - - l.clear(); - assertEquals(0, l.size()); - } - - /** - * Testet das Lesen von Elementen. - */ - @Test - void testGet() { - Liste l = new Liste<>(); - l.add("Hallo"); - l.add("Hugo"); - l.add("Peter"); - l.add("Alfons"); - - assertNull(l.get(-1)); - assertNull(l.get(4)); - assertEquals("Hallo", l.get(0)); - assertEquals("Hugo", l.get(1)); - assertEquals("Peter", l.get(2)); - assertEquals("Alfons", l.get(3)); - - assertEquals(4, l.size()); - l.clear(); - assertEquals(0, l.size()); - assertNull(l.get(0)); - assertNull(l.get(1)); - assertNull(l.get(2)); - assertNull(l.get(3)); - } -} diff --git a/solutions/src/main/java/pr2/generics/number_pair/Main.java b/solutions/src/main/java/pr2/generics/number_pair/Main.java deleted file mode 100644 index fcbc53b..0000000 --- a/solutions/src/main/java/pr2/generics/number_pair/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -package pr2.generics.number_pair; - -public class Main { - public static void main(String[] args) { - var note = new Pair("Peter", 1); - var name = new Pair("Peter", "Meier"); - var tel = new NumberPair(621, 292122); - - System.out.printf("%s:%d\n", note.getFirst(), note.getSecond()); - - System.out.printf("%s %s\n", name.getFirst(), name.getSecond()); - - System.out.printf("%d %d\n", tel.getFirst(), tel.getSecond()); - } -} diff --git a/solutions/src/main/java/pr2/generics/number_pair/NumberPair.java b/solutions/src/main/java/pr2/generics/number_pair/NumberPair.java deleted file mode 100644 index 4819db7..0000000 --- a/solutions/src/main/java/pr2/generics/number_pair/NumberPair.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.generics.number_pair; - -public class NumberPair extends Pair { - - public NumberPair(T first, T second) { - super(first, second); - } -} diff --git a/solutions/src/main/java/pr2/generics/number_pair/Pair.java b/solutions/src/main/java/pr2/generics/number_pair/Pair.java deleted file mode 100644 index 63d841e..0000000 --- a/solutions/src/main/java/pr2/generics/number_pair/Pair.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.generics.number_pair; - -public class Pair { - - private final T first; - private final V second; - - public Pair(T first, V second) { - this.first = first; - this.second = second; - } - - public T getFirst() { - return first; - } - - public V getSecond() { - return second; - } -} diff --git a/solutions/src/main/java/pr2/generics/pair/Main.java b/solutions/src/main/java/pr2/generics/pair/Main.java deleted file mode 100644 index 2df11ce..0000000 --- a/solutions/src/main/java/pr2/generics/pair/Main.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.generics.pair; - -public class Main { - public static void main(String[] args) { - var note1 = new Pair("Peter", 1); - var note2 = new Pair("Frank", 3); - var note3 = new Pair("Sabine", 1); - - var name = new Pair("Peter", "Meier"); - - System.out.printf("%s:%d\n", note1.getFirst(), note1.getSecond()); - System.out.printf("%s:%d\n", note2.getFirst(), note1.getSecond()); - System.out.printf("%s:%d\n", note3.getFirst(), note1.getSecond()); - - System.out.printf("%s %s\n", name.getFirst(), name.getSecond()); - } -} diff --git a/solutions/src/main/java/pr2/generics/pair/Pair.java b/solutions/src/main/java/pr2/generics/pair/Pair.java deleted file mode 100644 index 8afe59a..0000000 --- a/solutions/src/main/java/pr2/generics/pair/Pair.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.generics.pair; - -public class Pair { - - private final T first; - private final V second; - - public Pair(T first, V second) { - this.first = first; - this.second = second; - } - - public T getFirst() { - return first; - } - - public V getSecond() { - return second; - } -} diff --git a/solutions/src/main/java/pr2/generics/pairlist/Main.java b/solutions/src/main/java/pr2/generics/pairlist/Main.java deleted file mode 100644 index d414e41..0000000 --- a/solutions/src/main/java/pr2/generics/pairlist/Main.java +++ /dev/null @@ -1,19 +0,0 @@ -package pr2.generics.pairlist; - -public class Main { - public static void main(String[] args) { - var note1 = new Pair("Peter", 1); - var note2 = new Pair("Frank", 3); - var note3 = new Pair("Sabine", 1); - - var pl = new PairList(3); - pl.add(note1); - pl.add(note2); - pl.add(note3); - - for (int i = 0; i < 3; i++) { - System.out.printf("%s:%d\n", pl.get(i).getFirst(), - pl.get(i).getSecond()); - } - } -} diff --git a/solutions/src/main/java/pr2/generics/pairlist/Pair.java b/solutions/src/main/java/pr2/generics/pairlist/Pair.java deleted file mode 100644 index 3fbbfdf..0000000 --- a/solutions/src/main/java/pr2/generics/pairlist/Pair.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.generics.pairlist; - -public class Pair { - - private final T first; - private final V second; - - public Pair(T first, V second) { - this.first = first; - this.second = second; - } - - public T getFirst() { - return first; - } - - public V getSecond() { - return second; - } -} diff --git a/solutions/src/main/java/pr2/generics/pairlist/PairList.java b/solutions/src/main/java/pr2/generics/pairlist/PairList.java deleted file mode 100644 index b4299b6..0000000 --- a/solutions/src/main/java/pr2/generics/pairlist/PairList.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.generics.pairlist; - -public class PairList { - - protected final Pair[] elements; - protected int pos; - - @SuppressWarnings("unchecked") - public PairList(int size) { - elements = (Pair[]) new Pair[size]; - } - - public void add(Pair element) { - elements[pos++] = element; - } - - public Pair get(int index) { - return elements[index]; - } -} diff --git a/solutions/src/main/java/pr2/generics/printer/CollectionPrinter.java b/solutions/src/main/java/pr2/generics/printer/CollectionPrinter.java deleted file mode 100644 index 4c895ab..0000000 --- a/solutions/src/main/java/pr2/generics/printer/CollectionPrinter.java +++ /dev/null @@ -1,11 +0,0 @@ -package pr2.generics.printer; - -import java.util.Collection; - -public class CollectionPrinter { - public static void print(Collection collection) { - for (Object object : collection) { - System.out.println(object); - } - } -} diff --git a/solutions/src/main/java/pr2/generics/printer/Main.java b/solutions/src/main/java/pr2/generics/printer/Main.java deleted file mode 100644 index 4f162d5..0000000 --- a/solutions/src/main/java/pr2/generics/printer/Main.java +++ /dev/null @@ -1,23 +0,0 @@ -package pr2.generics.printer; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class Main { - public static void main(String[] args) { - List ls = new ArrayList<>(); - List li = new ArrayList<>(); - ls.add("PR2"); - ls.add("ist"); - ls.add("cool"); - Set s = new HashSet<>(ls); - li.add(23); - li.add(42); - - CollectionPrinter.print(ls); - CollectionPrinter.print(li); - CollectionPrinter.print(s); - } -} diff --git a/solutions/src/main/java/pr2/generics/queue/Queue.java b/solutions/src/main/java/pr2/generics/queue/Queue.java deleted file mode 100644 index 4a88180..0000000 --- a/solutions/src/main/java/pr2/generics/queue/Queue.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.generics.queue; - -public class Queue { - - private final T[] elements; - private int pos = 0; - private int pos2 = 0; - - @SuppressWarnings("unchecked") - public Queue(int size) { - elements = (T[]) new Object[size]; - } - - public void offer(T element) { - elements[pos] = element; - pos++; - pos = pos % elements.length; - } - - public T poll() { - T element = elements[pos2]; - elements[pos2] = null; - pos2++; - pos2 = pos2 % elements.length; - return element; - } - - public void addAll(Queue other) { - for (T t : other.elements) { - offer(t); - } - } - - public void copyInto(Queue other) { - for (T t : elements) { - other.offer(t); - } - } -} diff --git a/solutions/src/main/java/pr2/generics/same_pair/Main.java b/solutions/src/main/java/pr2/generics/same_pair/Main.java deleted file mode 100644 index 0b85368..0000000 --- a/solutions/src/main/java/pr2/generics/same_pair/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -package pr2.generics.same_pair; - -public class Main { - public static void main(String[] args) { - var note = new Pair("Peter", 1); - var name = new SamePair("Peter", "Meier"); - var tel = new SamePair(621, 2009992); - - System.out.printf("%s:%d\n", note.getFirst(), note.getSecond()); - - System.out.printf("%s %s\n", name.getFirst(), name.getSecond()); - - System.out.printf("%d %d\n", tel.getFirst(), tel.getSecond()); - } -} diff --git a/solutions/src/main/java/pr2/generics/same_pair/Pair.java b/solutions/src/main/java/pr2/generics/same_pair/Pair.java deleted file mode 100644 index 587225a..0000000 --- a/solutions/src/main/java/pr2/generics/same_pair/Pair.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.generics.same_pair; - -public class Pair { - - private final T first; - private final V second; - - public Pair(T first, V second) { - this.first = first; - this.second = second; - } - - public T getFirst() { - return first; - } - - public V getSecond() { - return second; - } -} diff --git a/solutions/src/main/java/pr2/generics/same_pair/SamePair.java b/solutions/src/main/java/pr2/generics/same_pair/SamePair.java deleted file mode 100644 index 5ce5c81..0000000 --- a/solutions/src/main/java/pr2/generics/same_pair/SamePair.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.generics.same_pair; - -public class SamePair extends Pair { - - public SamePair(T first, T second) { - super(first, second); - } -} diff --git a/solutions/src/main/java/pr2/generics/super_extends/Liste.java b/solutions/src/main/java/pr2/generics/super_extends/Liste.java deleted file mode 100644 index 26cce2b..0000000 --- a/solutions/src/main/java/pr2/generics/super_extends/Liste.java +++ /dev/null @@ -1,108 +0,0 @@ -package pr2.generics.super_extends; - -/** - * Eine einfache, verkettete Liste. - * - * @param Typ der gespeicherten Objekte - */ -public class Liste { - - /** - * Referenz auf den ersten Knoten. - */ - private ListeNode first; - - /** - * Referenz auf den aktuellen Knoten. - */ - private ListeNode current; - - /** - * Fügt ein neues Element an das Ende der Liste an. - * - * @param data das Element - */ - public void add(T data) { - - ListeNode nextNode = new ListeNode<>(data); - - if (current == null) { - // Liste komplett leer - first = nextNode; - current = nextNode; - } - else { - current.next = nextNode; - current = nextNode; - } - } - - /** - * Liest das Element an der gegebenen Position. - * - * @param index Index, beginnend bei 0. - * @return Das Element oder {@code null}, wenn es nicht gefunden wurde. - */ - public T get(int index) { - int count = 0; - ListeNode node = first; - - while ((node != null) && (count < index)) { - node = node.next; - count++; - } - - if ((count == index) && (node != null)) { - return node.data; - } - else { - // index does not exist - return null; - } - } - - /** - * Löscht die Liste und entfernt alle Elemente. - */ - public void clear() { - first = null; - current = null; - } - - /** - * Liefert die Anzahl der Elemente der Liste zurück. - * - * @return die Anzahl der Elemente. - */ - public int size() { - int count = 0; - ListeNode node = first; - - while (node != null) { - node = node.next; - count++; - } - - return count; - } - - /** - * Kopiert alle Elemente dieser Liste in die andere Liste. - * - * @param other die andere Liste. - */ - public void copyInto(Liste other) { - for (int i = 0; i < size(); i++) { - other.add(get(i)); - } - } - - /** - * Füllt diese Liste mit dem Inhalt der übergebenen Liste. - * - * @param other die andere Liste. - */ - public void fillFrom(Liste other) { - other.copyInto(this); - } -} diff --git a/solutions/src/main/java/pr2/generics/super_extends/ListeNode.java b/solutions/src/main/java/pr2/generics/super_extends/ListeNode.java deleted file mode 100644 index 487f1b1..0000000 --- a/solutions/src/main/java/pr2/generics/super_extends/ListeNode.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.generics.super_extends; - -/** - * Interne Repräsentation der Knoten in der Liste. - * - * @param Typ der gespeicherten Daten. - */ -class ListeNode { - - /** - * Daten. - */ - T data; - - /** - * Referenz auf den nächsten Knoten. - */ - ListeNode next; - - /** - * Legt einen neuen Knoten an. - * - * @param data daten, die gespeichert werden - */ - ListeNode(T data) { - this.data = data; - } -} \ No newline at end of file diff --git a/solutions/src/main/java/pr2/generics/super_extends/test/ListeTest.java b/solutions/src/main/java/pr2/generics/super_extends/test/ListeTest.java deleted file mode 100644 index 84997ad..0000000 --- a/solutions/src/main/java/pr2/generics/super_extends/test/ListeTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package pr2.generics.super_extends.test; - -import org.junit.jupiter.api.Test; -import pr2.generics.super_extends.Liste; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Test für die Liste. - */ -public class ListeTest { - - /** - * Testet das Umkopieren. - */ - @Test - void testAddAndClear() { - Liste ls = new Liste<>(); - Liste lo = new Liste<>(); - - ls.add("Hallo"); - ls.add("Hugo"); - ls.add("Peter"); - ls.add("Alfons"); - - ls.copyInto(lo); - - assertEquals("Hallo", lo.get(0)); - assertEquals("Hugo", lo.get(1)); - assertEquals("Peter", lo.get(2)); - assertEquals("Alfons", lo.get(3)); - - lo = new Liste<>(); - lo.fillFrom(ls); - - assertEquals("Hallo", lo.get(0)); - assertEquals("Hugo", lo.get(1)); - assertEquals("Peter", lo.get(2)); - assertEquals("Alfons", lo.get(3)); - } -} diff --git a/solutions/src/main/java/pr2/generics/wildcards/ListHelper.java b/solutions/src/main/java/pr2/generics/wildcards/ListHelper.java deleted file mode 100644 index a6aba36..0000000 --- a/solutions/src/main/java/pr2/generics/wildcards/ListHelper.java +++ /dev/null @@ -1,35 +0,0 @@ -package pr2.generics.wildcards; - -/** - * Klasse zum Ausdrucken von Listen. - */ -public class ListHelper { - - /** - * Druckt alle Elemente der Liste auf der Konsole aus. - * - * @param liste Die zu druckende Liste. - */ - public static void printList(SimpleList liste) { - for (Object o : liste) { - System.out.println(o); - } - } - - /** - * Summiert die Elemente der Liste. Deswegen können nur Listen übergeben - * werden, deren Elemente mindestens vom Typ {@code Number} sind. - * - * @param liste Die Liste, deren Elemente summiert werden sollen. - * @return das Ergebnis - */ - public static double sumList(SimpleList liste) { - double sum = 0; - - for (Number number : liste) { - sum += number.doubleValue(); - } - - return sum; - } -} diff --git a/solutions/src/main/java/pr2/generics/wildcards/Main.java b/solutions/src/main/java/pr2/generics/wildcards/Main.java deleted file mode 100644 index 3a51e88..0000000 --- a/solutions/src/main/java/pr2/generics/wildcards/Main.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.generics.wildcards; - -/** - * Ausgabe der Liste. - */ -public final class Main { - - /** - * Constructor. - */ - private Main() { - // keine Instanzen - } - - /** - * Haupt-Methode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - SimpleList l1 = new SimpleList<>(); - l1.add("Dies"); - l1.add("ist"); - l1.add("ein"); - l1.add("Test"); - l1.add("."); - - SimpleList l2 = new SimpleList<>(); - l2.add(1); - l2.add(2); - l2.add(3); - l2.add(4); - l2.add(5); - - ListHelper.printList(l1); - ListHelper.printList(l2); - System.out.println(ListHelper.sumList(l2)); - } -} diff --git a/solutions/src/main/java/pr2/generics/wildcards/SimpleList.java b/solutions/src/main/java/pr2/generics/wildcards/SimpleList.java deleted file mode 100644 index b4241c1..0000000 --- a/solutions/src/main/java/pr2/generics/wildcards/SimpleList.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.generics.wildcards; - -import java.util.ArrayList; - -/** - * Listenklasse. - * - * @param Typ, der in der Liste gespeichert wird. - */ -public class SimpleList extends ArrayList { - // nothing here -} diff --git a/solutions/src/main/java/pr2/interfaces/abstrakt_form/Form.java b/solutions/src/main/java/pr2/interfaces/abstrakt_form/Form.java deleted file mode 100644 index c955bac..0000000 --- a/solutions/src/main/java/pr2/interfaces/abstrakt_form/Form.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.interfaces.abstrakt_form; - -public abstract class Form { - - protected double x; - protected double y; - - public Form(double x, double y) { - this.x = x; - this.y = y; - } - - public abstract double flaeche(); - - public abstract double umfang(); -} diff --git a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Dreieck.java b/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Dreieck.java deleted file mode 100644 index a11edee..0000000 --- a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Dreieck.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.interfaces.abstrakte_klassen_s; - -/** - * Ein Dreieck. - */ -public class Dreieck extends Figur { - - /** - * Grundseite des Dreiecks. - */ - private final double grundseite; - - /** - * Höhe. - */ - private final double hoehe; - - /** - * Erzeugt ein neues Dreieck. - * - * @param grundseite Grundseite. - * @param hoehe Höhe. - */ - public Dreieck(double grundseite, double hoehe) { - super(); - this.grundseite = grundseite; - this.hoehe = hoehe; - } - - /** - * Berechnet die Fläche. - * - * @return die Fläche. - */ - @Override - public double flaeche() { - return grundseite * hoehe / 2; - } -} diff --git a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Figur.java b/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Figur.java deleted file mode 100644 index a0351f2..0000000 --- a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Figur.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.interfaces.abstrakte_klassen_s; - -/** - * Basisklasse für geometrische Figuren. - */ -public abstract class Figur { - - /** - * Berechnet die Fläche einer geometrischen Figur. - * - * @return die Fläche. - */ - public abstract double flaeche(); -} diff --git a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Geometer.java b/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Geometer.java deleted file mode 100644 index 3257c45..0000000 --- a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Geometer.java +++ /dev/null @@ -1,43 +0,0 @@ -package pr2.interfaces.abstrakte_klassen_s; - -/** - * Flächenberechnung. - */ -public final class Geometer { - - /** - * Keine Instanzen. - */ - private Geometer() { - // keine Objekte - } - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente - */ - public static void main(String[] args) { - Figur[] figuren = new Figur[10]; - - figuren[0] = new Kreis(10.0); - figuren[1] = new Kreis(5.5); - figuren[2] = new Kreis(3.3); - figuren[3] = new Kreis(7.2); - figuren[4] = new Kreis(8.0); - - figuren[5] = new Dreieck(4.0, 3.0); - figuren[6] = new Dreieck(2.0, 1.0); - figuren[7] = new Dreieck(5.0, 8.0); - figuren[8] = new Dreieck(2.0, 7.2); - figuren[9] = new Dreieck(14.0, 3.8); - - double gesamtflaeche = 0.0; - - for (Figur figur : figuren) { - gesamtflaeche += figur.flaeche(); - } - - System.out.printf("Die Fläche beträgt: %.2f", gesamtflaeche); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Kreis.java b/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Kreis.java deleted file mode 100644 index 86bf749..0000000 --- a/solutions/src/main/java/pr2/interfaces/abstrakte_klassen_s/Kreis.java +++ /dev/null @@ -1,32 +0,0 @@ -package pr2.interfaces.abstrakte_klassen_s; - -/** - * Ein Kreis. - */ -public class Kreis extends Figur { - - /** - * Radius des Kreises. - */ - private final double radius; - - /** - * Legt einen neuen Kreis an. - * - * @param radius Radius des Kreises. - */ - public Kreis(double radius) { - super(); - this.radius = radius; - } - - /** - * Berechnet die Fläche. - * - * @return die Fläche. - */ - @Override - public double flaeche() { - return Math.PI * radius * radius; - } -} diff --git a/solutions/src/main/java/pr2/interfaces/comparable_student/Student.java b/solutions/src/main/java/pr2/interfaces/comparable_student/Student.java deleted file mode 100644 index cf96d2f..0000000 --- a/solutions/src/main/java/pr2/interfaces/comparable_student/Student.java +++ /dev/null @@ -1,42 +0,0 @@ -package pr2.interfaces.comparable_student; - -public class Student implements Comparable { - - private final String vorname; - private final String nachname; - private final int matrikelNr; - - public Student(String vorname, String nachname, - int matrikelNr) { - this.vorname = vorname; - this.nachname = nachname; - this.matrikelNr = matrikelNr; - } - - @Override - public String toString() { - return String.format("%s, %s (%d)", nachname, vorname, - matrikelNr); - } - - @Override - public int compareTo(Object o) { - - Student other = (Student) o; - - if (nachname.compareTo(other.nachname) == 0) { - if (vorname.compareTo(other.vorname) == 0) { - if (matrikelNr == other.matrikelNr) { - return 0; - } - else { - return (matrikelNr > other.matrikelNr) ? 1 : -1; - } - } - - return vorname.compareTo(other.vorname); - } - - return nachname.compareTo(other.nachname); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/api/AnalogController.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/api/AnalogController.java deleted file mode 100644 index 5cea5ce..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/api/AnalogController.java +++ /dev/null @@ -1,44 +0,0 @@ -package pr2.interfaces.interfaces_s.api; - -import java.awt.Point; - -/** - * Analoger Joystick. - */ -public interface AnalogController { - - /** - * Nach oben bewegen. - * - * @param percentage Auslenkung in Prozent (zwischen 0 - 1) - */ - void up(double percentage); - - /** - * Nach unten bewegen. - * - * @param percentage Auslenkung in Prozent (zwischen 0 - 1) - */ - void down(double percentage); - - /** - * Nach links bewegen. - * - * @param percentage Auslenkung in Prozent (zwischen 0 - 1) - */ - void left(double percentage); - - /** - * Nach rechts bewegen. - * - * @param percentage Auslenkung in Prozent (zwischen 0 - 1) - */ - void right(double percentage); - - /** - * Liefert die aktuelle Position zurück. - * - * @return Die Position. - */ - Point getPosition(); -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/api/DigitalController.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/api/DigitalController.java deleted file mode 100644 index ec760b9..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/api/DigitalController.java +++ /dev/null @@ -1,36 +0,0 @@ -package pr2.interfaces.interfaces_s.api; - -import java.awt.Point; - -/** - * Ein digitaler Joystick. - */ -public interface DigitalController { - - /** - * Nach oben bewegen. - */ - void up(); - - /** - * Nach unten bewegen. - */ - void down(); - - /** - * Nach links bewegen. - */ - void left(); - - /** - * Nach rechts bewegen. - */ - void right(); - - /** - * Liefert die aktuelle Position zurück. - * - * @return Die Position. - */ - Point getPosition(); -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/AnalogControllerImpl.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/AnalogControllerImpl.java deleted file mode 100644 index e6241ee..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/AnalogControllerImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -package pr2.interfaces.interfaces_s.impl; - -import pr2.interfaces.interfaces_s.api.AnalogController; - -import java.awt.Point; - -/** - * Analoger Joystick. - */ -public class AnalogControllerImpl implements AnalogController { - - /** - * Auslenkung in X-Richtung. - */ - private double deltaX; - - /** - * Auslenkung in Y-Richtung. - */ - private double deltaY; - - /** - * @see AnalogController#up(double) - */ - @Override - public void up(double percentage) { - deltaY -= percentage; - } - - /** - * @see AnalogController#down(double) - */ - @Override - public void down(double percentage) { - deltaY += percentage; - } - - /** - * @see AnalogController#left(double) - */ - @Override - public void left(double percentage) { - deltaX -= percentage; - } - - /** - * @see AnalogController#right(double) - */ - @Override - public void right(double percentage) { - deltaX += percentage; - } - - /** - * @see AnalogController#getPosition() - */ - @Override - public Point getPosition() { - return new Point((int) deltaX, (int) deltaY); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DigitalControllerImpl.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DigitalControllerImpl.java deleted file mode 100644 index 2007280..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DigitalControllerImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -package pr2.interfaces.interfaces_s.impl; - -import pr2.interfaces.interfaces_s.api.DigitalController; - -import java.awt.Point; - -/** - * Implementierung eines digitalen Joysticks. - */ -public class DigitalControllerImpl implements DigitalController { - - private final Point position = new Point(0, 0); - - /** - * @see DigitalController#up() - */ - @Override - public void up() { - position.translate(0, -1); - } - - /** - * @see DigitalController#down() - */ - @Override - public void down() { - position.translate(0, 1); - } - - /** - * @see DigitalController#left() - */ - @Override - public void left() { - position.translate(-1, 0); - } - - /** - * @see DigitalController#right() - */ - @Override - public void right() { - position.translate(1, 0); - } - - /** - * @see DigitalController#getPosition() - */ - @Override - public Point getPosition() { - return (Point) position.clone(); - } - - -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DualShock4.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DualShock4.java deleted file mode 100644 index 35c2b8f..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/impl/DualShock4.java +++ /dev/null @@ -1,95 +0,0 @@ -package pr2.interfaces.interfaces_s.impl; - -import pr2.interfaces.interfaces_s.api.AnalogController; -import pr2.interfaces.interfaces_s.api.DigitalController; - -import java.awt.Point; - -/** - * Linke Seite eines DualShock 4 Controllers. - */ -public class DualShock4 implements AnalogController, DigitalController { - - private final AnalogController analogStick = new AnalogControllerImpl(); - - private final DigitalController digitalStick = new DigitalControllerImpl(); - - /** - * @see DigitalController#up() - */ - @Override - public void up() { - digitalStick.up(); - } - - /** - * @see DigitalController#down() - */ - @Override - public void down() { - digitalStick.down(); - } - - /** - * @see DigitalController#left() - */ - @Override - public void left() { - digitalStick.left(); - } - - /** - * @see DigitalController#right() - */ - @Override - public void right() { - digitalStick.right(); - } - - /** - * @see AnalogController#up(double) - */ - @Override - public void up(double percentage) { - analogStick.up(percentage); - } - - /** - * @see AnalogController#down(double) - */ - @Override - public void down(double percentage) { - analogStick.down(percentage); - } - - /** - * @see AnalogController#left(double) - */ - @Override - public void left(double percentage) { - analogStick.left(percentage); - } - - /** - * @see AnalogController#right(double) - */ - @Override - public void right(double percentage) { - analogStick.right(percentage); - } - - /** - * @see AnalogController#getPosition() - */ - @Override - public Point getPosition() { - Point resultAnalog = analogStick.getPosition(); - Point resultDigital = digitalStick.getPosition(); - Point result = new Point(); - - result.x = resultAnalog.x + resultDigital.x; - result.y = resultAnalog.y + resultDigital.y; - - return result; - } -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/test/AnalogControllerTest.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/test/AnalogControllerTest.java deleted file mode 100644 index 65dd577..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/test/AnalogControllerTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package pr2.interfaces.interfaces_s.test; - -import org.junit.jupiter.api.Test; -import pr2.interfaces.interfaces_s.api.AnalogController; -import pr2.interfaces.interfaces_s.impl.AnalogControllerImpl; - -/** - * Tests für einen analogen Joystick. - */ -public class AnalogControllerTest extends DigitalControllerTest { - - /** - * Testet einen anlogen Controller. - */ - @Test - void testAnalogController() { - AnalogController c = new AnalogControllerImpl(); - testAnalogController(c); - } - - /** - * Interne Hilfsmethode zum Test von analogen Controllern. - * - * @param c Controller, der getestet wird - */ - protected void testAnalogController(AnalogController c) { - c.up(0.5); - assertPointEquals(0, 0, c.getPosition()); - c.up(0.5); - assertPointEquals(0, -1, c.getPosition()); - - c.left(0.3); - c.left(0.3); - c.left(0.3); - assertPointEquals(0, -1, c.getPosition()); - c.left(0.2); - assertPointEquals(-1, -1, c.getPosition()); - - c.down(1.0); - assertPointEquals(-1, 0, c.getPosition()); - - c.down(1.0); - assertPointEquals(-1, 1, c.getPosition()); - c.down(1.0); - assertPointEquals(-1, 2, c.getPosition()); - - c.right(0.5); - c.right(0.5); - c.right(0.5); - assertPointEquals(0, 2, c.getPosition()); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/test/DigitalControllerTest.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/test/DigitalControllerTest.java deleted file mode 100644 index a533be7..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/test/DigitalControllerTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package pr2.interfaces.interfaces_s.test; - -import org.junit.jupiter.api.Test; -import pr2.interfaces.interfaces_s.impl.DigitalControllerImpl; -import pr2.interfaces.interfaces_s.api.DigitalController; - -import java.awt.Point; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Tests für einen digitalen Joystick. - */ -public class DigitalControllerTest { - - /** - * Testet einen digitalen Controller. - */ - @Test - void testDigitalController() { - DigitalController c = new DigitalControllerImpl(); - testDigitalController(c); - } - - /** - * Interne Hilfsmethode zum Test von digitalen Controllern. - * - * @param c Controller, der getestet wird - */ - protected void testDigitalController(DigitalController c) { - assertPointEquals(0, 0, c.getPosition()); - c.up(); - c.up(); - assertPointEquals(0, -2, c.getPosition()); - c.down(); - c.down(); - assertPointEquals(0, 0, c.getPosition()); - c.left(); - c.right(); - assertPointEquals(0, 0, c.getPosition()); - c.left(); - assertPointEquals(-1, 0, c.getPosition()); - c.left(); - assertPointEquals(-2, 0, c.getPosition()); - c.right(); - c.right(); - c.right(); - assertPointEquals(1, 0, c.getPosition()); - } - - /** - * Interne Hilfsmethode, um einen Punkt mit seinem x und - * y-Wert zu vergleichen. - * - * @param x x-Wert - * @param y y-Wert - * @param point Punkt, der verglichen werden soll - */ - protected void assertPointEquals(int x, int y, Point point) { - assertEquals(new Point(x, y), point); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/interfaces_s/test/DualShock4Test.java b/solutions/src/main/java/pr2/interfaces/interfaces_s/test/DualShock4Test.java deleted file mode 100644 index 9f4bb3d..0000000 --- a/solutions/src/main/java/pr2/interfaces/interfaces_s/test/DualShock4Test.java +++ /dev/null @@ -1,45 +0,0 @@ -package pr2.interfaces.interfaces_s.test; - -import org.junit.jupiter.api.Test; -import pr2.interfaces.interfaces_s.api.AnalogController; -import pr2.interfaces.interfaces_s.api.DigitalController; -import pr2.interfaces.interfaces_s.impl.DualShock4; - - -/** - * Tests für einen analogen Joystick. - */ -public class DualShock4Test extends AnalogControllerTest { - - /** - * Testet einen DualShock4 Kombi-Controller. - */ - @Test - void testDualShock4() { - DigitalController cd = new DualShock4(); - testDigitalController(cd); - - AnalogController ca = new DualShock4(); - testAnalogController(ca); - - DualShock4 ds = new DualShock4(); - - ds.up(); - ds.up(1.0); - assertPointEquals(0, -2, ds.getPosition()); - - ds.left(); - ds.right(); - ds.right(0.5); - ds.right(0.5); - assertPointEquals(1, -2, ds.getPosition()); - - ds.down(); - ds.down(); - ds.down(0.3); - ds.down(0.3); - ds.down(0.3); - ds.down(0.1); - assertPointEquals(1, 1, ds.getPosition()); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/stack/Stack.java b/solutions/src/main/java/pr2/interfaces/stack/Stack.java deleted file mode 100644 index f9e4e14..0000000 --- a/solutions/src/main/java/pr2/interfaces/stack/Stack.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.interfaces.stack; - -public interface Stack { - - void push(Object o); - - Object pop(); - - Object peek(); - - int size(); -} diff --git a/solutions/src/main/java/pr2/interfaces/stack/StackImpl.java b/solutions/src/main/java/pr2/interfaces/stack/StackImpl.java deleted file mode 100644 index a418c3d..0000000 --- a/solutions/src/main/java/pr2/interfaces/stack/StackImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package pr2.interfaces.stack; - -public class StackImpl implements Stack { - - private final Object[] puffer; - private int pos = -1; - - public StackImpl(int size) { - puffer = new Object[size]; - } - - @Override - public void push(Object o) { - if (pos < puffer.length - 1) { - puffer[++pos] = o; - } - } - - @Override - public Object pop() { - if (pos >= 0) { - return puffer[pos--]; - } - else { - return null; - } - } - - @Override - public Object peek() { - if (pos >= 0) { - return puffer[pos]; - } - else { - return null; - } - } - - @Override - public int size() { - return pos + 1; - } -} diff --git a/solutions/src/main/java/pr2/interfaces/stack/test/StackTest.java b/solutions/src/main/java/pr2/interfaces/stack/test/StackTest.java deleted file mode 100644 index 4c1534f..0000000 --- a/solutions/src/main/java/pr2/interfaces/stack/test/StackTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package pr2.interfaces.stack.test; - -import org.junit.jupiter.api.Test; -import pr2.interfaces.stack.Stack; -import pr2.interfaces.stack.StackImpl; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -public class StackTest { - - @Test - void testStack() { - Stack s = new StackImpl(100); - - assertEquals(0, s.size()); - - s.push("Hallo"); - s.push("wie"); - s.push("gehts"); - - assertEquals(3, s.size()); - - assertEquals("gehts", s.peek()); - assertEquals("gehts", s.pop()); - - assertEquals("wie", s.peek()); - assertEquals("wie", s.pop()); - - assertEquals("Hallo", s.peek()); - assertEquals("Hallo", s.pop()); - - assertNull(s.pop()); - } -} diff --git a/solutions/src/main/java/pr2/interfaces/uebersetzer/Translator.java b/solutions/src/main/java/pr2/interfaces/uebersetzer/Translator.java deleted file mode 100644 index a9a46c6..0000000 --- a/solutions/src/main/java/pr2/interfaces/uebersetzer/Translator.java +++ /dev/null @@ -1,37 +0,0 @@ -package pr2.interfaces.uebersetzer; - -public class Translator { - - public static void main(String[] args) { - if (args.length != 2) { - System.err.println("Bitte geben Sie genau zwei " - + "Optionen an: Zielsprache und zu " - + "übersetzendes Wort"); - System.exit(1); - } - - String sprache = args[0].toLowerCase(); - String wort = args[1]; - - Uebersetzer uebersetzer = null; - - if ("englisch".equals(sprache)) { - uebersetzer = new UebersetzerDeutschEnglisch(); - } else if ("spanisch".equals(sprache)) { - uebersetzer = new UebersetzerDeutschSpanisch(); - } else { - System.out.println("Unbekannte Sprache"); - System.exit(1); - } - - String uebersetzung = uebersetzer.uebersetze(wort); - - if (uebersetzung != null) { - System.out.printf("Übersetzung: deutsch -> " - + "%s%n%s -> %s%n", - sprache, wort, uebersetzung); - } else { - System.out.printf("Unbekanntes Wort: %s%n", wort); - } - } -} diff --git a/solutions/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java b/solutions/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java deleted file mode 100644 index 50cf30d..0000000 --- a/solutions/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java +++ /dev/null @@ -1,13 +0,0 @@ -package pr2.interfaces.uebersetzer; - -public interface Uebersetzer { - - /** - * Übersetzt den gegebeben String. - * - * @param string String, der übersetzt werden soll - * @return die Übersetzung oder {@literal null}, wenn das Wort nicht - * bekannt ist - */ - public String uebersetze(String string); -} diff --git a/solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschEnglisch.java b/solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschEnglisch.java deleted file mode 100644 index fc1d14b..0000000 --- a/solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschEnglisch.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.interfaces.uebersetzer; - -public class UebersetzerDeutschEnglisch implements Uebersetzer { - - @Override - public String uebersetze(String string) { - - return switch (string) { - case "gehen" -> "go"; - case "schalfen" -> "sleep"; - case "tanzen" -> "dance"; - default -> null; - }; - - } -} diff --git a/solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschSpanisch.java b/solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschSpanisch.java deleted file mode 100644 index 9c9c7cc..0000000 --- a/solutions/src/main/java/pr2/interfaces/uebersetzer/UebersetzerDeutschSpanisch.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.interfaces.uebersetzer; - -public class UebersetzerDeutschSpanisch implements Uebersetzer { - - @Override - public String uebersetze(String string) { - - return switch (string) { - case "gehen" -> "ir"; - case "schalfen" -> "dormir"; - case "tanzen" -> "bailar"; - default -> null; - }; - - } -} diff --git a/solutions/src/main/java/pr2/intro/coding_standard/CodingStandard.java b/solutions/src/main/java/pr2/intro/coding_standard/CodingStandard.java deleted file mode 100644 index ec56c7f..0000000 --- a/solutions/src/main/java/pr2/intro/coding_standard/CodingStandard.java +++ /dev/null @@ -1,52 +0,0 @@ -package pr2.intro.coding_standard; - -/** - * Klasse dient als Beispiel für den Coding-Standard und die Namenskonventionen - * bei Java-Programmen. - */ -@SuppressWarnings("PMD.UnusedPrivateField") -public class CodingStandard { - - /** - * Konstante, die dem Rest der Welt etwas mitteilen soll. - */ - public static final int KONSTANTE_MIT_TOLLEM_WERT = 3; - - private int erstesFeld; - - private double zweitesFeld; - - /** - * Legt eine neue Instanz an. - * - * @param erstesFeld das erste Feld. - * @param zweitesFeld das zweite Feld. - */ - public CodingStandard(int erstesFeld, double zweitesFeld) { - this.erstesFeld = erstesFeld; - this.zweitesFeld = zweitesFeld; - } - - /** - * Methode, die etwas tut. - * - * @param parameter Eingabewert für die Methode. - * @return gibt einen Wert abhängig von {@code parameter} zurück. - */ - public int methodeDieWasTut(int parameter) { - - int result; - - if (parameter > KONSTANTE_MIT_TOLLEM_WERT) { - result = 12; - } - else { - result = 13; - } - - erstesFeld = result; - zweitesFeld = 2 * result; - - return result; - } -} diff --git a/solutions/src/main/java/pr2/intro/javadoc/Waehrung.java b/solutions/src/main/java/pr2/intro/javadoc/Waehrung.java deleted file mode 100644 index f9ad19b..0000000 --- a/solutions/src/main/java/pr2/intro/javadoc/Waehrung.java +++ /dev/null @@ -1,140 +0,0 @@ -package pr2.intro.javadoc; - -/** - * Objekte dieser Klasse repräsentieren eine Währung. Eine Währung zeichnet - * sich durch einen Namen (z.B. EURO), ein Kürzel (z.B. € oder EUR) und einen - * Umrechnungskurs zum US-Dollar aus. - *

- * Objekte dieser Klasse sind imutable, d.h. sie können nach der Erzeugung - * nicht mehr verändert werden. - */ -public class Waehrung { - - /** - * Teiler für die Nachkommastellen. - */ - private static final long TEILER = 10000; - - /** - * Umrechnungskurs zum Dollar. - */ - private final int kurs; - - /** - * Langer Name der Währung. - */ - private final String name; - - /** - * Abkürzung zur Währung. - */ - private final String kuerzel; - - /** - * Erzeugt ein neues Objekt. - * - * @param name Name der Währung (z.B. EURO). - * @param kuerzel Kürzel der Währung (z.B. €). - * @param kurs Wechselkurs zum Dollar. - */ - public Waehrung(String name, String kuerzel, double kurs) { - this.kurs = (int) (kurs * TEILER); - this.name = name; - this.kuerzel = kuerzel; - } - - /** - * Rechnet einen Berag in der aktuellen Währung in eine andere Währung - * um. - * - * @param betrag Betrag der umgerechnet werden soll. - * @param toWaehrung die Zielwährung. - * @return Ergebnis der Umrechnung. - */ - public long umrechnen(long betrag, Waehrung toWaehrung) { - return betrag * kurs / toWaehrung.kurs; - } - - /** - * Gibt den Kurs der aktuellen Währung zurück. - * - * @return Wechselkurs bezogen auf den US-Dollar. - */ - public int getKurs() { - return kurs; - } - - /** - * Gibt den Namen der Währung zurück. - * - * @return Name der Währung (z.B. Euro oder Dollar). - */ - public String getName() { - return name; - } - - /** - * Gibt das Kürzel für die Währung zurück. - * - * @return Das Kürzel der Währung (z.B. EUR oder $) - */ - public String getKuerzel() { - return kuerzel; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("%s [%s] 1 %s = %.4f %s", name, kuerzel, "$", - kurs / (double) TEILER, kuerzel); - } - - /** - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + kurs; - result = prime * result + ((kuerzel == null) ? 0 : kuerzel.hashCode()); - return result; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Waehrung other = (Waehrung) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } - else if (!name.equals(other.name)) { - return false; - } - if (kurs != other.kurs) { - return false; - } - if (kuerzel == null) { - return other.kuerzel == null; - } - else { - return kuerzel.equals(other.kuerzel); - } - } -} diff --git a/solutions/src/main/java/pr2/intro/junit_faculty/Fakultaet.java b/solutions/src/main/java/pr2/intro/junit_faculty/Fakultaet.java deleted file mode 100644 index 2f31efa..0000000 --- a/solutions/src/main/java/pr2/intro/junit_faculty/Fakultaet.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.intro.junit_faculty; - -public class Fakultaet { - - /** - * Berechnet die Fakultät fuer die gegebene Zahl. - * - * @param n Zahl für die die Fakultät berechnet werden soll. - * @return die Fakultät - */ - public int fact(int n) { - return (n == 0) ? 1 : n * fact(n - 1); - } -} diff --git a/solutions/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java b/solutions/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java deleted file mode 100644 index 33f1df1..0000000 --- a/solutions/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.intro.junit_faculty.test; - -import org.junit.jupiter.api.Test; -import pr2.intro.junit_faculty.Fakultaet; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class FakultaetTest { - - @Test - void testFact() { - Fakultaet f = new Fakultaet(); - assertEquals(1, f.fact(0)); - assertEquals(1, f.fact(1)); - assertEquals(2, f.fact(2)); - assertEquals(6, f.fact(3)); - assertEquals(24, f.fact(4)); - assertEquals(3628800, f.fact(10)); - } -} diff --git a/solutions/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java b/solutions/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java deleted file mode 100644 index 3b255c2..0000000 --- a/solutions/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java +++ /dev/null @@ -1,36 +0,0 @@ -package pr2.io.buffered_reader; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -/** - * Liest eine Textdatei und gibt den Inhalt auf der Konsole aus. - */ -public class LineNumberPrinter { - - /** - * Hauptmethode. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - - String filename = args.length == 1 - ? args[0] - : "pr2/io/reader_writer/kafka.txt"; - - try (BufferedReader r = new BufferedReader(new FileReader(filename))) { - - String line; - int count = 1; - - while ((line = r.readLine()) != null) { - System.out.printf("%3d: %s%n", count, line); - count++; - } - } catch (IOException e) { - System.err.println("IO-Problem: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/io/data_output/Board.java b/solutions/src/main/java/pr2/io/data_output/Board.java deleted file mode 100644 index 8433336..0000000 --- a/solutions/src/main/java/pr2/io/data_output/Board.java +++ /dev/null @@ -1,172 +0,0 @@ -package pr2.io.data_output; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -/** - * Ein Dame-Brett. - */ -public class Board { - - /** - * Belegung des Brettes. - */ - private final Color[][] brett = new Color[8][8]; - - /** - * Liest den Inhalt aus einer Datei. - * - * @param file Dateipfad. - * @return das gelesene Spielfeld - * @throws IOException IO-Probleme - */ - public static Board loadFromFile(String file) throws IOException { - - Board result = new Board(); - - DataInputStream dis = new DataInputStream(new FileInputStream(file)); - - String header = dis.readUTF(); - - if (!"Schachbrett".equals(header)) { - dis.close(); - throw new IOException("Falsches Dateiformat"); - } - - while (true) { - int x = dis.readByte(); - int y = dis.readByte(); - int ordinal = dis.readInt(); - - if (x == 0xff || y == 0xff || ordinal == -1) { - break; - } - - result.brett[x][y] = Color.values()[ordinal]; - } - - dis.close(); - - - return result; - } - - - /** - * Schreibt den Inhalt des Spielfeldes in eine Datei. - * - * @param file Dateiname. - * @throws IOException IO-Probleme - */ - public void writeToFile(String file) throws IOException { - - DataOutputStream dos = new DataOutputStream( - new FileOutputStream(file)); - - dos.writeUTF("Schachbrett"); - - for (int x = 0; x < brett.length; x++) { - for (int y = 0; y < brett[x].length; y++) { - - Color f = brett[x][y]; - - if (f != null) { - dos.writeByte(x); - dos.writeByte(y); - dos.writeInt(f.ordinal()); - } - } - } - - dos.writeByte(0xff); - dos.writeByte(0xff); - dos.writeInt(-1); - - dos.close(); - } - - /** - * Setzt einen Stein an die gegebene Koordinate. - * - * @param koordinate Koordinate in "a1"-Notation. - * @param farbe Fabe des Spielsteins. - */ - public void set(String koordinate, Color farbe) { - Tupel t = parseCoordinates(koordinate); - brett[t.x][t.y] = farbe; - } - - /** - * Wandelt textuelle Koordinaten in x- und y-Wert um. - * - * @param koordinate Koordinate als String. - * @return Koordinate als Integer-Tupel. - */ - private Tupel parseCoordinates(String koordinate) { - char buchstabe = koordinate.toLowerCase().charAt(0); - char zahl = koordinate.charAt(1); - - Tupel t = new Tupel(); - - t.y = buchstabe - 'a'; - t.x = zahl - '1'; - - if (t.x < 0 || t.x > 7) { - throw new IllegalArgumentException(); - } - - if (t.y < 0 || t.y > 7) { - throw new IllegalArgumentException(); - } - - return t; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - - StringBuilder result = new StringBuilder(); - - char y = '1'; - - result.append(" "); - for (char c : "abcdefgh".toCharArray()) { - result.append(' ').append(c); - } - - result.append("\n"); - - for (Color[] figurs : brett) { - - result.append(y++); - - for (Color figur : figurs) { - if (figur != null) { - result.append(' ').append(figur); - } - else { - result.append(" "); - } - } - - result.append("\n"); - } - - return result.toString(); - } - - /** - * Tupel von zwei int-Werten. - */ - private static class Tupel { - int x; - - int y; - } -} diff --git a/solutions/src/main/java/pr2/io/data_output/Color.java b/solutions/src/main/java/pr2/io/data_output/Color.java deleted file mode 100644 index 63eb878..0000000 --- a/solutions/src/main/java/pr2/io/data_output/Color.java +++ /dev/null @@ -1,30 +0,0 @@ -package pr2.io.data_output; - -/** - * Farben der Spielsteine. - */ -public enum Color { - - /** - * Schwarzer Stein. - */ - BLACK, - - /** - * Weißer Stein. - */ - WHITE; - - /** - * @see java.lang.Enum#toString() - */ - @Override - public String toString() { - if (this == Color.BLACK) { - return "B"; - } - else { - return "W"; - } - } -} diff --git a/solutions/src/main/java/pr2/io/data_output/test/BoardTest.java b/solutions/src/main/java/pr2/io/data_output/test/BoardTest.java deleted file mode 100644 index 8643548..0000000 --- a/solutions/src/main/java/pr2/io/data_output/test/BoardTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.io.data_output.test; - -import org.junit.jupiter.api.Test; -import pr2.io.data_output.Board; -import pr2.io.data_output.Color; - -import java.io.FileOutputStream; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Test. - */ -public class BoardTest { - - private static final byte[] RESULT = new byte[] { - 0x00, 0x0B, 0x53, 0x63, 0x68, 0x61, 0x63, 0x68, 0x62, 0x72, 0x65, - 0x74, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0x00, 0x00, 0x00, 0x01, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, - 0x00, (byte) 0xff, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, - (byte) 0xFF, (byte) 0xFF - }; - - /** - * Test für die Implementierung des Spielbrettes. - * - * @throws IOException Datei-Probleme. - */ - @Test - void testDame() throws IOException { - Board s = new Board(); - s.set("a1", Color.BLACK); - s.set("b1", Color.WHITE); - s.set("h1", Color.BLACK); - s.set("h2", Color.BLACK); - s.set("a8", Color.BLACK); - s.set("f8", Color.BLACK); - s.set("f5", Color.WHITE); - s.set("e3", Color.WHITE); - s.set("g2", Color.WHITE); - - String stringRepresentation = s.toString(); - - s.writeToFile("/tmp/daten.dat"); - - s = Board.loadFromFile("/tmp/daten.dat"); - - assertEquals(stringRepresentation, s.toString()); - - FileOutputStream fos = new FileOutputStream("/tmp/testdata.dat"); - fos.write(RESULT); - fos.close(); - - s = Board.loadFromFile("/tmp/testdata.dat"); - - assertEquals(stringRepresentation, s.toString()); - } -} diff --git a/solutions/src/main/java/pr2/io/datainputoutput_1/DateReader.java b/solutions/src/main/java/pr2/io/datainputoutput_1/DateReader.java deleted file mode 100644 index ca6b8b7..0000000 --- a/solutions/src/main/java/pr2/io/datainputoutput_1/DateReader.java +++ /dev/null @@ -1,43 +0,0 @@ -package pr2.io.datainputoutput_1; - -import java.io.DataInputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class DateReader { - public static void main(String[] args) { - - DataInputStream dis = null; - - try { - DateFormat df = new SimpleDateFormat(DateWriter.FORMAT); - dis = new DataInputStream( - new FileInputStream(DateWriter.DATEINAME)); - - long time = dis.readLong(); - System.out.printf("Das Datum war: %s%n%n", - df.format(new Date(time))); - - } catch (FileNotFoundException e) { - System.err.printf("Datei %s kann nicht gelesen werden: %s%n%n", - DateWriter.DATEINAME, e.getMessage()); - System.exit(1); - } catch (IOException e) { - System.err.printf("Fehler beim Lesen der Datei %s:%s%n%n", - DateWriter.DATEINAME, e.getMessage()); - System.exit(1); - } finally { - if (dis != null) { - try { - dis.close(); - } catch (IOException e) { - // ignore - } - } - } - } -} diff --git a/solutions/src/main/java/pr2/io/datainputoutput_1/DateWriter.java b/solutions/src/main/java/pr2/io/datainputoutput_1/DateWriter.java deleted file mode 100644 index bc13dcb..0000000 --- a/solutions/src/main/java/pr2/io/datainputoutput_1/DateWriter.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.io.datainputoutput_1; - -import java.io.DataOutputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class DateWriter { - - /** - * Dateiname mit den Testdaten. - */ - public static final String DATEINAME = "/tmp/test.data"; - - /** - * Datumsformat. - */ - public static final String FORMAT = "yyyy-MM-dd"; - - public static void main(String[] args) { - - if (args.length != 1) { - System.err.printf("Bitte eine Datum im Format %s angeben%n%n", - FORMAT); - System.exit(1); - } - - DataOutputStream dos = null; - - try { - DateFormat df = new SimpleDateFormat(FORMAT); - Date date = df.parse(args[0]); - dos = new DataOutputStream( - new FileOutputStream(DATEINAME)); - - dos.writeLong(date.getTime()); - } catch (ParseException e) { - System.err.printf("%s ist kein gültiges Datumsformat: %s%n%n", - args[0], FORMAT); - System.exit(1); - } catch (FileNotFoundException e) { - System.err.printf("Datei %s kann nicht geschrieben werden: %s%n%n", - DATEINAME, e.getMessage()); - System.exit(1); - } catch (IOException e) { - System.err.printf("Fehler beim Schreiben der Datei %s:%s%n%n", - DATEINAME, e.getMessage()); - System.exit(1); - } finally { - if (dos != null) { - try { - dos.close(); - } catch (IOException e) { - // ignore - } - } - } - } -} diff --git a/solutions/src/main/java/pr2/io/datainputoutput_2/DateReader.java b/solutions/src/main/java/pr2/io/datainputoutput_2/DateReader.java deleted file mode 100644 index a8ed6d6..0000000 --- a/solutions/src/main/java/pr2/io/datainputoutput_2/DateReader.java +++ /dev/null @@ -1,45 +0,0 @@ -package pr2.io.datainputoutput_2; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class DateReader { - - public static void main(String[] args) { - - ObjectInputStream ois = null; - - try { - DateFormat df = new SimpleDateFormat(DateWriter.FORMAT); - ois = new ObjectInputStream( - new FileInputStream(DateWriter.DATEINAME)); - - Date date = (Date) ois.readObject(); - System.out.printf("Das Datum war: %s%n%n", df.format(date)); - - } catch (FileNotFoundException e) { - System.err.printf("Datei %s kann nicht gelesen werden: %s%n%n", - DateWriter.DATEINAME, e.getMessage()); - System.exit(1); - } catch (IOException e) { - System.err.printf("Fehler beim Lesen der Datei %s:%s%n%n", - DateWriter.DATEINAME, e.getMessage()); - System.exit(1); - } catch (ClassNotFoundException e) { - // Date ist Teil der Library, ist immer vorhanden - } finally { - if (ois != null) { - try { - ois.close(); - } catch (IOException e) { - // ignore - } - } - } - } -} diff --git a/solutions/src/main/java/pr2/io/datainputoutput_2/DateWriter.java b/solutions/src/main/java/pr2/io/datainputoutput_2/DateWriter.java deleted file mode 100644 index a966e19..0000000 --- a/solutions/src/main/java/pr2/io/datainputoutput_2/DateWriter.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.io.datainputoutput_2; - -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class DateWriter { - - /** - * Dateiname mit den Testdaten. - */ - public static final String DATEINAME = "/tmp/test.ser"; - - /** - * Datumsformat. - */ - public static final String FORMAT = "yyyy-MM-dd"; - - public static void main(String[] args) { - - if (args.length != 1) { - System.err.printf("Bitte eine Datum im Format %s angeben%n%n", - FORMAT); - System.exit(1); - } - - ObjectOutputStream dos = null; - - try { - DateFormat df = new SimpleDateFormat(FORMAT); - Date date = df.parse(args[0]); - dos = new ObjectOutputStream( - new FileOutputStream(DATEINAME)); - - dos.writeObject(date); - } catch (ParseException e) { - System.err.printf("%s ist kein gültiges Datumsformat: %s%n%n", - args[0], FORMAT); - System.exit(1); - } catch (FileNotFoundException e) { - System.err.printf("Datei %s kann nicht geschrieben werden: %s%n%n", - DATEINAME, e.getMessage()); - System.exit(1); - } catch (IOException e) { - System.err.printf("Fehler beim Schreiben der Datei %s:%s%n%n", - DATEINAME, e.getMessage()); - System.exit(1); - } finally { - if (dos != null) { - try { - dos.close(); - } catch (IOException e) { - // ignore - } - } - } - } -} diff --git a/solutions/src/main/java/pr2/io/datei_lesen/ReadData.java b/solutions/src/main/java/pr2/io/datei_lesen/ReadData.java deleted file mode 100644 index b75a8dd..0000000 --- a/solutions/src/main/java/pr2/io/datei_lesen/ReadData.java +++ /dev/null @@ -1,33 +0,0 @@ -package pr2.io.datei_lesen; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -/** - * Daten aus einer Datei lesen. - */ -public class ReadData { - - /** - * Datei. - */ - private static final String FILE = "pr2/io/datei_lesen/daten.dat"; - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - - try (InputStream is = new FileInputStream(FILE)) { - int data; - while ((data = is.read()) != -1) { - System.out.print("0x" + Integer.toHexString(data) + " "); - } - } catch (IOException e) { - System.err.println("Problem mit Datei: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/io/datei_schreiben/WriteData.java b/solutions/src/main/java/pr2/io/datei_schreiben/WriteData.java deleted file mode 100644 index dbac0c5..0000000 --- a/solutions/src/main/java/pr2/io/datei_schreiben/WriteData.java +++ /dev/null @@ -1,33 +0,0 @@ -package pr2.io.datei_schreiben; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -/** - * Daten aus einer Datei lesen. - */ -public class WriteData { - - /** - * Datei. - */ - public static final String FILE = "pr2/io/datei_schreiben/daten.dat"; - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - - try (OutputStream os = new FileOutputStream(FILE)) { - - os.write(new byte[] {(byte) 0xca, (byte) 0xff, (byte) 0xfe, - (byte) 0xba, (byte) 0xbe, (byte) 0x00, (byte) 0xde, - (byte) 0xad, (byte) 0xbe, (byte) 0xef}); - } catch (IOException e) { - System.err.println("Problem mit Datei: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/io/datei_schreiben/test/DataTest.java b/solutions/src/main/java/pr2/io/datei_schreiben/test/DataTest.java deleted file mode 100644 index c4fc9fd..0000000 --- a/solutions/src/main/java/pr2/io/datei_schreiben/test/DataTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.io.datei_schreiben.test; - -import org.junit.jupiter.api.Test; -import pr2.io.datei_schreiben.WriteData; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static pr2.io.datei_schreiben.WriteData.FILE; - -/** - * Test für die geschriebenen Daten. - */ -public class DataTest { - - /** - * Geschriebene Daten testen. - * - * @throws IOException Datei-Probleme. - */ - @Test - void testData() throws IOException { - - WriteData.main(new String[0]); - - InputStream is = new FileInputStream(FILE); - - byte[] buffer = new byte[10]; - is.read(buffer); - assertArrayEquals( - new byte[] {(byte) 0xca, (byte) 0xff, (byte) 0xfe, (byte) 0xba, - (byte) 0xbe, (byte) 0x00, (byte) 0xde, (byte) 0xad, - (byte) 0xbe, (byte) 0xef}, buffer); - - is.close(); - } -} diff --git a/solutions/src/main/java/pr2/io/file/FilesystemWalker.java b/solutions/src/main/java/pr2/io/file/FilesystemWalker.java deleted file mode 100644 index d4ee6de..0000000 --- a/solutions/src/main/java/pr2/io/file/FilesystemWalker.java +++ /dev/null @@ -1,94 +0,0 @@ -package pr2.io.file; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.stream.Stream; - -/** - * Klasse, die das Dateisystem durchläuft und Informationen ausgibt. - */ -public class FilesystemWalker { - - /** - * Haupt-Methode. - * - * @param args Kommandozeilen-Argumente. - * @throws IOException IO-Probleme - */ - public static void main(String[] args) throws IOException { - - String path = args.length > 0 ? args[0] : "."; - - Path root = Path.of(path).normalize().toAbsolutePath(); - - System.out.println("Untersuche: " + root); - System.out.println(); - - long total = walk(root); - - System.out.println(); - System.out.println("Gesamtgröße: " + niceSize(total)); - } - - /** - * Rekursive Methode, um den Baum zu durchlaufen. - * - * @param startDir Verzeichnis, bei dem gestartet werden - * soll. - * @return die Größe des Verzeichnisses. - */ - private static long walk(Path startDir) { - - long size = 0; - - if (!Files.isDirectory(startDir)) { - throw new IllegalArgumentException( - startDir + " ist kein Verzeichnis."); - } - - try (Stream fileStream = Files.list(startDir)) { - List files = fileStream.toList(); - - for (Path file : files) { - - if (Files.isDirectory(file) - && Files.isReadable(file) - && Files.isExecutable(file) - && !Files.isSymbolicLink(file) - && Files.exists(file)) { - long dirSize = walk(file); - size += dirSize; - System.out.printf("%s - %s%n", niceSize(dirSize), file); - } - else if (Files.exists(file) && !Files.isSymbolicLink(file)) { - size += Files.size(file); - } - } - } catch (IOException e) { - throw new RuntimeException(e); - } - - return size; - } - - /** - * Wandelt die Größe in eine schönere Darstellung um. - * - * @param size Die Größe. - * @return Schönere Darstellung. - */ - private static String niceSize(long size) { - - if (size > 1000_000L) { - return String.format("%.1f MByte", size / 1024.0 / 1024.0); - } - else if (size > 1000L) { - return String.format("%.1f kByte", size / 1024.0); - } - else { - return String.format("%d Byte", size); - } - } -} diff --git a/solutions/src/main/java/pr2/io/filetest/FileInfo.java b/solutions/src/main/java/pr2/io/filetest/FileInfo.java deleted file mode 100644 index 6d3d875..0000000 --- a/solutions/src/main/java/pr2/io/filetest/FileInfo.java +++ /dev/null @@ -1,40 +0,0 @@ -package pr2.io.filetest; - -import java.nio.file.Files; -import java.io.IOException; -import java.nio.file.Path; - -public class FileInfo { - - public static void main(String[] args) throws IOException { - - if (args.length != 1) { - System.err.println( - "Bitte eine Datei oder ein Verzeichnis angeben"); - System.exit(1); - } - - Path path = Path.of(args[0]).normalize().toAbsolutePath(); - - if (Files.exists(path)) { - System.out.printf("%s existiert%n", path); - System.out.printf("%s ist %d Bytes groß%n", path, Files.size(path)); - } - - if (Files.isDirectory(path)) { - System.out.printf("%s ist ein Verzeichnis%n", path); - } - - if (Files.isRegularFile(path)) { - System.out.printf("%s ist ein normale Datei%n", path); - } - - if (Files.isReadable(path)) { - System.out.printf("%s darf gelesen werden%n", path); - } - - if (Files.isWritable(path)) { - System.out.printf("%s darf geschrieben werden%n", path); - } - } -} diff --git a/solutions/src/main/java/pr2/io/filter/UCaseReader.java b/solutions/src/main/java/pr2/io/filter/UCaseReader.java deleted file mode 100644 index 7cc694d..0000000 --- a/solutions/src/main/java/pr2/io/filter/UCaseReader.java +++ /dev/null @@ -1,36 +0,0 @@ -package pr2.io.filter; - -import java.io.FilterReader; -import java.io.IOException; -import java.io.Reader; - -/** - * Filter-Reader, der den Inhalt in Großbuchstaben umwandelt. - */ -public class UCaseReader extends FilterReader { - - - /** - * Legt einen neuen Reader an. - * - * @param in Reader, von dem die Daten gelesen werden. - */ - public UCaseReader(Reader in) { - super(in); - } - - /** - * @see FilterReader#read(char[], int, int). - */ - @Override - public int read(char[] cbuf, int off, int len) throws IOException { - - int charsGelesen = super.read(cbuf, off, len); - - for (int i = 0; i < cbuf.length; i++) { - cbuf[i] = Character.toUpperCase(cbuf[i]); - } - - return charsGelesen; - } -} diff --git a/solutions/src/main/java/pr2/io/filter/test/UCaseReaderTest.java b/solutions/src/main/java/pr2/io/filter/test/UCaseReaderTest.java deleted file mode 100644 index 9546c4a..0000000 --- a/solutions/src/main/java/pr2/io/filter/test/UCaseReaderTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package pr2.io.filter.test; - -import org.junit.jupiter.api.Test; -import pr2.io.filter.UCaseReader; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.StringReader; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test für die Rot13 "Verschlüsselung". - */ -public class UCaseReaderTest { - - /** - * Testmethode. - * - * @throws IOException IO-Probleme - */ - @Test - void testReader() throws IOException { - - BufferedReader br = new BufferedReader( - new UCaseReader(new StringReader( - "Dies ist" + " ein Test für den UCASE-Reader."))); - - String line = br.readLine(); - assertEquals("DIES IST EIN TEST FÜR DEN UCASE-READER.", line); - - br.close(); - } -} diff --git a/solutions/src/main/java/pr2/io/konsole/ConsoleToFile.java b/solutions/src/main/java/pr2/io/konsole/ConsoleToFile.java deleted file mode 100644 index 20e6935..0000000 --- a/solutions/src/main/java/pr2/io/konsole/ConsoleToFile.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.io.konsole; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintStream; - -/** - * Liest einen Text von der Console und - * schreibt ihn dann in eine Datei. Allerdings - * erfolgt das Schreiben über eine Ausgabeumleitung - * und nicht über Dateioperationen. - */ -public class ConsoleToFile { - - /** - * Logfile für Ausgaben. - */ - private static final String LOGFILE = "console.log"; - - /** - * Hauptmethode. - * - * @param args Kommandozeile-Argumente. - */ - public static void main(String[] args) { - - try (BufferedReader br = new BufferedReader( - new InputStreamReader(System.in)); - - PrintStream ps = new PrintStream(LOGFILE)) { - - System.setOut(ps); - - String line; - int count = 1; - - while ((line = br.readLine()) != null) { - System.out.println(line); - System.err.println(count++); - } - } catch (IOException ex) { - System.err.println("Dateiproblem: " + ex); - } - } -} diff --git a/solutions/src/main/java/pr2/io/linecounter/LineCounter.java b/solutions/src/main/java/pr2/io/linecounter/LineCounter.java deleted file mode 100644 index 3c51768..0000000 --- a/solutions/src/main/java/pr2/io/linecounter/LineCounter.java +++ /dev/null @@ -1,29 +0,0 @@ -package pr2.io.linecounter; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -public class LineCounter { - - public static void main(String[] args) throws IOException { - - int lines = 0; - - if (args.length != 1) { - System.err.println("Bitte eine Datei angeben"); - System.exit(1); - } - - BufferedReader br = new BufferedReader(new FileReader(args[0])); - - - while (br.readLine() != null) { - lines++; - } - - br.close(); - - System.out.printf("Datei: %s hat %d Zeilen%n", args[0], lines); - } -} diff --git a/solutions/src/main/java/pr2/io/random_access/FileSort.java b/solutions/src/main/java/pr2/io/random_access/FileSort.java deleted file mode 100644 index f35241c..0000000 --- a/solutions/src/main/java/pr2/io/random_access/FileSort.java +++ /dev/null @@ -1,58 +0,0 @@ -package pr2.io.random_access; - -import java.io.IOException; -import java.io.RandomAccessFile; - -/** - * Sortierung von Dateien (in place). - */ -public class FileSort { - - /** - * Sortiert die Datei von Byte-Werten per Bubble-Sort. - * - * @param filename Dateiname - * @throws IOException IO-Probleme - */ - public static void sortFile(String filename) throws IOException { - - RandomAccessFile rf = new RandomAccessFile(filename, "rw"); - - byte b1; // erstes Byte - byte b2; // zweites Byte - - long pos = 0; - boolean swap = false; - - while (true) { - // an die Position springen - rf.seek(pos); - - // zwei Bytes lesen - b1 = rf.readByte(); - b2 = rf.readByte(); - - if (b1 > b2) { - // erstes ist größer als zweites, austauschen - rf.seek(pos); - rf.write(b2); - rf.write(b1); - swap = true; - } - - pos++; - - if (pos >= rf.length() - 1) { - if (swap) { - pos = 0; - swap = false; - } - else { - break; - } - } - } - - rf.close(); - } -} diff --git a/solutions/src/main/java/pr2/io/random_access/test/FileSortTest.java b/solutions/src/main/java/pr2/io/random_access/test/FileSortTest.java deleted file mode 100644 index 2112c41..0000000 --- a/solutions/src/main/java/pr2/io/random_access/test/FileSortTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.io.random_access.test; - -import org.junit.jupiter.api.Test; -import pr2.io.random_access.FileSort; - -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Testet die Sortierung per Random-Access-File. - */ -public class FileSortTest { - - /** - * Kopiert die Datei f1 als Datei f2. - * - * @param f1 Quell-Datei - * @param f2 Ziel-Datei - * @throws IOException IO-Probleme - */ - private static void copyFile(String f1, String f2) throws IOException { - - FileInputStream fis = new FileInputStream(f1); - FileOutputStream fos = new FileOutputStream(f2); - - int b; - - while ((b = fis.read()) != -1) { - fos.write(b); - } - - fis.close(); - fos.close(); - } - - /** - * Testet die File-Sortierung. - * - * @throws IOException IO-Problem - */ - @Test - void testBubbleSort() throws IOException { - copyFile("data.dat", "output/data.dat"); - FileSort.sortFile("output/data.dat"); - - InputStream is = new FileInputStream("output/data.dat"); - - int data; - byte lastByte = 0; - - while ((data = is.read()) >= 0) { - byte b = (byte) data; - assertTrue(b >= lastByte); - lastByte = b; - } - - is.close(); - } -} diff --git a/solutions/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java b/solutions/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java deleted file mode 100644 index 88818a3..0000000 --- a/solutions/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java +++ /dev/null @@ -1,34 +0,0 @@ -package pr2.io.reader_writer; - -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; - -/** - * Liest eine Textdatei und gibt den Inhalt auf der Konsole aus. - */ -public class ReadAndPrintFile { - - /** - * Hauptmethode. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - - String filename = args.length == 1 - ? args[0] - : "pr2/io/reader_writer/kafka.txt"; - - try (Reader r = new FileReader(filename)) { - char[] buffer = new char[1024]; - int length; - - while ((length = r.read(buffer)) >= 0) { - System.out.print(new String(buffer, 0, length)); - } - } catch (IOException e) { - System.err.println("IO-Problem: " + e); - } - } -} diff --git a/solutions/src/main/java/pr2/io/rot13/Rot13.java b/solutions/src/main/java/pr2/io/rot13/Rot13.java deleted file mode 100644 index a0a3787..0000000 --- a/solutions/src/main/java/pr2/io/rot13/Rot13.java +++ /dev/null @@ -1,25 +0,0 @@ -package pr2.io.rot13; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -public class Rot13 { - - public static void main(String[] args) throws IOException { - if (args.length != 1) { - System.err.println("Bitte eine Datei angeben"); - System.exit(1); - } - - BufferedReader br = new BufferedReader( - new Rot13Reader(new FileReader(args[0]))); - - String line; - while ((line = br.readLine()) != null) { - System.out.println(line); - } - - br.close(); - } -} diff --git a/solutions/src/main/java/pr2/io/rot13/Rot13Reader.java b/solutions/src/main/java/pr2/io/rot13/Rot13Reader.java deleted file mode 100644 index 1d87edc..0000000 --- a/solutions/src/main/java/pr2/io/rot13/Rot13Reader.java +++ /dev/null @@ -1,24 +0,0 @@ -package pr2.io.rot13; - -import java.io.FilterReader; -import java.io.IOException; -import java.io.Reader; - -public class Rot13Reader extends FilterReader { - - public Rot13Reader(Reader in) { - super(in); - } - - @Override - public int read(char[] cbuf, int off, int len) throws IOException { - - int charsGelesen = super.read(cbuf, off, len); - - for (int i = off; i < charsGelesen; i++) { - cbuf[i] = cbuf[i] == '\n' ? '\n' : (char) (cbuf[i] + 13); - } - - return charsGelesen; - } -} diff --git a/solutions/src/main/java/pr2/io/scrambler/Scrambler.java b/solutions/src/main/java/pr2/io/scrambler/Scrambler.java deleted file mode 100644 index f045627..0000000 --- a/solutions/src/main/java/pr2/io/scrambler/Scrambler.java +++ /dev/null @@ -1,38 +0,0 @@ -package pr2.io.scrambler; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; - -public class Scrambler { - - public static void main(String[] args) throws IOException { - if (args.length != 1) { - System.err.println("Bitte eine Datei angeben"); - System.exit(1); - } - - FileInputStream fis; - - try { - fis = new FileInputStream(args[0]); - } catch (FileNotFoundException e) { - System.err.printf("Datei nicht gefunden: %s%n", args[0]); - System.exit(1); - return; // never reached - } - - int input; - int count = 0; - - while ((input = fis.read()) != -1) { - byte b = (byte) input; - - if (count++ % 2 == 0) { - System.out.write(b); - } - } - - fis.close(); - } -} diff --git a/solutions/src/main/java/pr2/io/serialisierung/Board.java b/solutions/src/main/java/pr2/io/serialisierung/Board.java deleted file mode 100644 index de5e085..0000000 --- a/solutions/src/main/java/pr2/io/serialisierung/Board.java +++ /dev/null @@ -1,139 +0,0 @@ -package pr2.io.serialisierung; - -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; - -/** - * Ein Dame-Brett. - */ -public class Board implements Serializable { - - /** - * Belegung des Brettes. - */ - private final Color[][] brett = new Color[8][8]; - - /** - * Liest den Inhalt aus einer Datei. - * - * @param file Dateipfad. - * @return das gelesene Spielfeld - * @throws IOException IO-Probleme - */ - public static Board loadFromFile(String file) throws IOException { - - ObjectInputStream ois = - new ObjectInputStream(new FileInputStream(file)); - - Board result; - - try { - result = (Board) ois.readObject(); - ois.close(); - } catch (ClassNotFoundException e) { - ois.close(); - throw new IOException("Serialization: Class not found", e); - } - - return result; - } - - /** - * Schreibt den Inhalt des Spielfeldes in eine Datei. - * - * @param file Dateiname. - * @throws IOException IO-Probleme - */ - public void writeToFile(String file) throws IOException { - ObjectOutputStream oos = - new ObjectOutputStream(new FileOutputStream(file)); - oos.writeObject(this); - oos.close(); - } - - /** - * Setzt einen Stein an die gegebene Koordinate. - * - * @param koordinate Koordinate in "a1"-Notation. - * @param farbe Fabe des Spielsteins. - */ - public void set(String koordinate, Color farbe) { - Tupel t = parseCoordinates(koordinate); - brett[t.x][t.y] = farbe; - } - - /** - * Wandelt textuelle Koordinaten in x- und y-Wert um. - * - * @param koordinate Koordinate als String. - * @return Koordinate als Integer-Tupel. - */ - private Tupel parseCoordinates(String koordinate) { - char buchstabe = koordinate.toLowerCase().charAt(0); - char zahl = koordinate.charAt(1); - - Tupel t = new Tupel(); - - t.y = buchstabe - 'a'; - t.x = zahl - '1'; - - if (t.x < 0 || t.x > 7) { - throw new IllegalArgumentException(); - } - - if (t.y < 0 || t.y > 7) { - throw new IllegalArgumentException(); - } - - return t; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - - StringBuilder result = new StringBuilder(); - - char y = '1'; - - result.append(" "); - for (char c : "abcdefgh".toCharArray()) { - result.append(' ').append(c); - } - - result.append("\n"); - - for (Color[] figurs : brett) { - - result.append(y++); - - for (Color figur : figurs) { - if (figur != null) { - result.append(' ').append(figur); - } - else { - result.append(" "); - } - } - - result.append("\n"); - } - - return result.toString(); - } - - /** - * Tupel von zwei int-Werten. - */ - private static class Tupel { - int x; - - int y; - } -} diff --git a/solutions/src/main/java/pr2/io/serialisierung/Color.java b/solutions/src/main/java/pr2/io/serialisierung/Color.java deleted file mode 100644 index 7f8f76b..0000000 --- a/solutions/src/main/java/pr2/io/serialisierung/Color.java +++ /dev/null @@ -1,30 +0,0 @@ -package pr2.io.serialisierung; - -/** - * Farben der Spielsteine. - */ -public enum Color { - - /** - * Schwarzer Stein. - */ - BLACK, - - /** - * Weißer Stein. - */ - WHITE; - - /** - * @see java.lang.Enum#toString() - */ - @Override - public String toString() { - if (this == Color.BLACK) { - return "B"; - } - else { - return "W"; - } - } -} diff --git a/solutions/src/main/java/pr2/io/serialisierung/test/BoardTest.java b/solutions/src/main/java/pr2/io/serialisierung/test/BoardTest.java deleted file mode 100644 index e96d2a0..0000000 --- a/solutions/src/main/java/pr2/io/serialisierung/test/BoardTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.io.serialisierung.test; - -import org.junit.jupiter.api.Test; -import pr2.io.serialisierung.Board; -import pr2.io.serialisierung.Color; - -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test. - */ -public class BoardTest { - - /** - * Test für die Implementierung des Spielbrettes. - * - * @throws IOException Datei-Probleme. - */ - @Test - void testDame() throws IOException { - Board s = new Board(); - s.set("a1", Color.BLACK); - s.set("b1", Color.WHITE); - s.set("h1", Color.BLACK); - s.set("h2", Color.BLACK); - s.set("a8", Color.BLACK); - s.set("f8", Color.BLACK); - s.set("f5", Color.WHITE); - s.set("e3", Color.WHITE); - s.set("g2", Color.WHITE); - - String stringRepresentation = s.toString(); - - s.writeToFile("/tmp/daten.dat"); - - s = Board.loadFromFile("/tmp/daten.dat"); - - assertEquals(stringRepresentation, s.toString()); - - s = Board.loadFromFile("testdata.dat"); - - assertEquals(stringRepresentation, s.toString()); - } -} diff --git a/solutions/src/main/java/pr2/lambda/array_sorter/ReverseSort.java b/solutions/src/main/java/pr2/lambda/array_sorter/ReverseSort.java deleted file mode 100644 index 50ac85d..0000000 --- a/solutions/src/main/java/pr2/lambda/array_sorter/ReverseSort.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.lambda.array_sorter; - -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; - -public class ReverseSort { - - public static void main(String[] args) { - Date[] dates = { - new Date(9200000000L), - new Date(9300000000L), - new Date(92100000000L), - new Date(9600000000L), - new Date(93300000000L) - }; - - Arrays.sort(dates, new Comparator() { - - @Override - public int compare(Date o1, Date o2) { - return o1.compareTo(o2) * -1; - } - }); - - System.out.println(Arrays.asList(dates)); - } -} diff --git a/solutions/src/main/java/pr2/lambda/callback/Main.java b/solutions/src/main/java/pr2/lambda/callback/Main.java deleted file mode 100644 index a3ad37a..0000000 --- a/solutions/src/main/java/pr2/lambda/callback/Main.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.lambda.callback; - -import java.util.Arrays; - -/** - * Hauptklasse. - */ -public class Main { - - private static final int[] ZAHLEN = - {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20}; - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - - NumberSelector s = new NumberSelector(); - - int[] gerade; - - gerade = s.filter(new Predicate() { - @Override - public boolean accept(Integer object) { - return object % 2 == 0; - } - }, ZAHLEN); - - System.out.println(Arrays.toString(gerade)); - - int[] ungerade; - - ungerade = s.filter(new Predicate() { - @Override - public boolean accept(Integer object) { - return object % 2 != 0; - } - }, ZAHLEN); - - System.out.println(Arrays.toString(ungerade)); - - } -} diff --git a/solutions/src/main/java/pr2/lambda/callback/NumberSelector.java b/solutions/src/main/java/pr2/lambda/callback/NumberSelector.java deleted file mode 100644 index bbce522..0000000 --- a/solutions/src/main/java/pr2/lambda/callback/NumberSelector.java +++ /dev/null @@ -1,30 +0,0 @@ -package pr2.lambda.callback; - -/** - * Auswählen von Zahlen mithilfe eines Callbacks. - */ -public class NumberSelector { - - /** - * Filtert die übergebenen Zahlen anhand des Prädikates. - * - * @param predicate Prädikat. - * @param numbers die zu filternden Zahlen. - * @return Das Ergebnis - */ - public int[] filter(Predicate predicate, int[] numbers) { - - int[] temp = new int[numbers.length]; - int count = 0; - - for (int i : numbers) { - if (predicate.accept(i)) { - temp[count++] = i; - } - } - - int[] result = new int[count]; - System.arraycopy(temp, 0, result, 0, count); - return result; - } -} diff --git a/solutions/src/main/java/pr2/lambda/callback/Predicate.java b/solutions/src/main/java/pr2/lambda/callback/Predicate.java deleted file mode 100644 index bf3f416..0000000 --- a/solutions/src/main/java/pr2/lambda/callback/Predicate.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.lambda.callback; - -/** - * Interface, um Entscheidung über ein Objekt zu - * treffen. - * - * @param Typ des Objekts - */ -@FunctionalInterface -public interface Predicate { - - /** - * Entscheidet, ob ein Objekt akzeptiert wird oder nicht. - * - * @param object das zu untersuchende Objekt - * @return {@code true} wenn das Objekt akzeptiert wird, - * andernfalls {@code false}. - */ - boolean accept(T object); -} diff --git a/solutions/src/main/java/pr2/lambda/comparator/SortLambda.java b/solutions/src/main/java/pr2/lambda/comparator/SortLambda.java deleted file mode 100644 index 9a605d8..0000000 --- a/solutions/src/main/java/pr2/lambda/comparator/SortLambda.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.lambda.comparator; - -import java.util.Arrays; - -public class SortLambda { - - public static void main(String[] args) { - Integer[] zahlen = {23, 42, 17, 9, 1, 5, 7, 88, 35}; - Arrays.sort(zahlen, (a, b) -> b - a); - System.out.println(Arrays.toString(zahlen)); - } -} diff --git a/solutions/src/main/java/pr2/lambda/lambdas/Main.java b/solutions/src/main/java/pr2/lambda/lambdas/Main.java deleted file mode 100644 index 85460bc..0000000 --- a/solutions/src/main/java/pr2/lambda/lambdas/Main.java +++ /dev/null @@ -1,31 +0,0 @@ -package pr2.lambda.lambdas; - -import java.util.Arrays; - -/** - * Hauptklasse. - */ -public class Main { - - private static final int[] ZAHLEN = - {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20}; - - /** - * Hauptmethode. - * - * @param args Kommandozeileargumente. - */ - public static void main(String[] args) { - - NumberSelector s = new NumberSelector(); - - int[] gerade = s.filter((i) -> i % 2 == 0, ZAHLEN); - - System.out.println(Arrays.toString(gerade)); - - int[] ungerade = s.filter((i) -> i % 2 != 0, ZAHLEN); - - System.out.println(Arrays.toString(ungerade)); - } -} diff --git a/solutions/src/main/java/pr2/lambda/lambdas/NumberSelector.java b/solutions/src/main/java/pr2/lambda/lambdas/NumberSelector.java deleted file mode 100644 index 16f974b..0000000 --- a/solutions/src/main/java/pr2/lambda/lambdas/NumberSelector.java +++ /dev/null @@ -1,30 +0,0 @@ -package pr2.lambda.lambdas; - -/** - * Auswählen von Zahlen mithilfe eines Callbacks. - */ -public class NumberSelector { - - /** - * Filtert die übergebenen Zahlen anhand des Prädikates. - * - * @param predicate Prädikat. - * @param numbers die zu filternden Zahlen. - * @return Das Ergebnis - */ - public int[] filter(Predicate predicate, int[] numbers) { - - int[] temp = new int[numbers.length]; - int count = 0; - - for (int i : numbers) { - if (predicate.accept(i)) { - temp[count++] = i; - } - } - - int[] result = new int[count]; - System.arraycopy(temp, 0, result, 0, count); - return result; - } -} diff --git a/solutions/src/main/java/pr2/lambda/lambdas/Predicate.java b/solutions/src/main/java/pr2/lambda/lambdas/Predicate.java deleted file mode 100644 index d8aa4ee..0000000 --- a/solutions/src/main/java/pr2/lambda/lambdas/Predicate.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.lambda.lambdas; - -/** - * Interface, um Entscheidung über ein Objekt zu - * treffen. - * - * @param Typ des Objekts - */ -@FunctionalInterface -public interface Predicate { - - /** - * Entscheidet, ob ein Objekt akzeptiert wird oder nicht. - * - * @param object das zu untersuchende Objekt - * @return {@code true} wenn das Objekt akzeptiert wird, - * andernfalls {@code false}. - */ - boolean accept(T object); -} diff --git a/solutions/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java b/solutions/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java deleted file mode 100644 index 21b2d88..0000000 --- a/solutions/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.lambda.matrixsuche; - -public class MatrixSuche { - - public static class Position { - private final int xPos; - private final int yPos; - - public Position(int xPos, int yPos) { - this.xPos = xPos; - this.yPos = yPos; - } - - public int getxPos() { - return xPos; - } - - public int getyPos() { - return yPos; - } - - @Override - public String toString() { - return String.format("(%d, %d)", xPos, yPos); - } - } - - public static Position findEntry(int[][] matrix, int wert) { - for (int i = 0; i < matrix.length; i++) { - for (int k = 0; k < matrix[i].length; k++) { - if (matrix[i][k] == wert) { - return new Position(i, k); - } - } - } - - return null; - } -} diff --git a/solutions/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java b/solutions/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java deleted file mode 100644 index f481817..0000000 --- a/solutions/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package pr2.lambda.matrixsuche.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.lambda.matrixsuche.MatrixSuche; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -public class MatrixSucheTest { - - @Test - void testSuche() { - - int[][] matrix = { - {3, 5, 6, 7, 8}, - {10, 12, 14, 16, 18}, - {23, 25, 26, 27, 28} - }; - - Assertions.assertEquals("(0, 1)", - MatrixSuche.findEntry(matrix, 5).toString()); - assertEquals("(2, 0)", - MatrixSuche.findEntry(matrix, 23).toString()); - assertEquals("(1, 2)", - MatrixSuche.findEntry(matrix, 14).toString()); - assertEquals("(0, 4)", - MatrixSuche.findEntry(matrix, 8).toString()); - assertNull( - MatrixSuche.findEntry(matrix, 99)); - } -} diff --git a/solutions/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java b/solutions/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java deleted file mode 100644 index 6fca817..0000000 --- a/solutions/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java +++ /dev/null @@ -1,6 +0,0 @@ -package pr2.lambda.mogrifier_1; - -@FunctionalInterface -public interface StringFunction { - String apply(String s); -} diff --git a/solutions/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java b/solutions/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java deleted file mode 100644 index 21d976a..0000000 --- a/solutions/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.lambda.mogrifier_1; - -public class StringTransmogrifier { - - public static String[] transmogrify(String[] elements, StringFunction t) { - String[] result = new String[elements.length]; - - for (int i = 0; i < elements.length; i++) { - result[i] = t.apply(elements[i]); - } - - return result; - } -} diff --git a/solutions/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java b/solutions/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java deleted file mode 100644 index 8b3bb4d..0000000 --- a/solutions/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package pr2.lambda.mogrifier_1.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.lambda.mogrifier_1.StringTransmogrifier; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -public class StringTransmogrifierTest { - - @Test - void testMogrification() { - String[] elements = {"Hello", "World"}; - - Assertions.assertArrayEquals(new String[] { "hello", "world"}, - StringTransmogrifier.transmogrify(elements, - String::toLowerCase)); - - assertArrayEquals(new String[] { "HELLO", "WORLD"}, - StringTransmogrifier.transmogrify(elements, - String::toUpperCase)); - - assertArrayEquals(new String[] { "Ifmmp", "Xpsme"}, - StringTransmogrifier.transmogrify(elements, - s -> { - char[] c = s.toCharArray(); - for (int i = 0; i < c.length; i++) { - c[i] = (char) (c[i] + 1); - } - return new String(c); - })); - } -} diff --git a/solutions/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java b/solutions/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java deleted file mode 100644 index 11d9608..0000000 --- a/solutions/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.lambda.mogrifier_2; - -@FunctionalInterface -public interface StringFunction { - static StringFunction caesar(final int shift) { - return (s) -> shiftCharacters(s, shift); - } - - static String shiftCharacters(String s, int shift) { - char[] c = s.toCharArray(); - for (int i = 0; i < c.length; i++) { - c[i] = (char) (c[i] + shift); - } - return new String(c); - } - - String apply(String s); -} diff --git a/solutions/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java b/solutions/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java deleted file mode 100644 index 79b64a4..0000000 --- a/solutions/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.lambda.mogrifier_2; - -public class StringTransmogrifier { - - public static String[] transmogrify(String[] elements, StringFunction t) { - String[] result = new String[elements.length]; - - for (int i = 0; i < elements.length; i++) { - result[i] = t.apply(elements[i]); - } - - return result; - } -} diff --git a/solutions/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java b/solutions/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java deleted file mode 100644 index b842940..0000000 --- a/solutions/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package pr2.lambda.mogrifier_2.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.lambda.mogrifier_2.StringFunction; -import pr2.lambda.mogrifier_2.StringTransmogrifier; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -public class StringTransmogrifierTest { - - static final String[] ELEMENTS = {"Hello", "World"}; - - @Test - void testMogrification() { - - - Assertions.assertArrayEquals(new String[] {"hello", "world"}, - StringTransmogrifier.transmogrify(ELEMENTS, - String::toLowerCase)); - - assertArrayEquals(new String[] {"HELLO", "WORLD"}, - StringTransmogrifier.transmogrify(ELEMENTS, - String::toUpperCase)); - - assertArrayEquals(new String[] {"Ifmmp", "Xpsme"}, - StringTransmogrifier.transmogrify(ELEMENTS, - s -> { - char[] c = s.toCharArray(); - for (int i = 0; i < c.length; i++) { - c[i] = (char) (c[i] + 1); - } - return new String(c); - })); - } - - @Test - void testCaesar() { - assertArrayEquals(new String[] {"Khoor", "Zruog"}, - StringTransmogrifier.transmogrify(ELEMENTS, - StringFunction.caesar(3))); - } -} diff --git a/solutions/src/main/java/pr2/lambda/observer/Beobachter.java b/solutions/src/main/java/pr2/lambda/observer/Beobachter.java deleted file mode 100644 index 98eb441..0000000 --- a/solutions/src/main/java/pr2/lambda/observer/Beobachter.java +++ /dev/null @@ -1,5 +0,0 @@ -package pr2.lambda.observer; - -public interface Beobachter { - int getValue(); -} diff --git a/solutions/src/main/java/pr2/lambda/observer/Datenhalter.java b/solutions/src/main/java/pr2/lambda/observer/Datenhalter.java deleted file mode 100644 index 9eb10d5..0000000 --- a/solutions/src/main/java/pr2/lambda/observer/Datenhalter.java +++ /dev/null @@ -1,23 +0,0 @@ -package pr2.lambda.observer; - -public class Datenhalter { - - private final int geheimerWert; - - public Datenhalter(int geheimerWert) { - this.geheimerWert = geheimerWert; - } - - public Beobachter getBeobachter() { - return new BeobachterImpl(); - } - - private class BeobachterImpl implements Beobachter { - - @Override - public int getValue() { - return geheimerWert; - } - - } -} diff --git a/solutions/src/main/java/pr2/lambda/observer/DatenhalterAnonym.java b/solutions/src/main/java/pr2/lambda/observer/DatenhalterAnonym.java deleted file mode 100644 index b2f2d64..0000000 --- a/solutions/src/main/java/pr2/lambda/observer/DatenhalterAnonym.java +++ /dev/null @@ -1,19 +0,0 @@ -package pr2.lambda.observer; - -public class DatenhalterAnonym { - - private final int geheimerWert; - - public DatenhalterAnonym(int geheimerWert) { - this.geheimerWert = geheimerWert; - } - - public Beobachter getBeobachter() { - return new Beobachter() { - @Override - public int getValue() { - return geheimerWert; - } - }; - } -} diff --git a/solutions/src/main/java/pr2/lambda/observer/test/BeobachterTest.java b/solutions/src/main/java/pr2/lambda/observer/test/BeobachterTest.java deleted file mode 100644 index 24e643a..0000000 --- a/solutions/src/main/java/pr2/lambda/observer/test/BeobachterTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.lambda.observer.test; - -import org.junit.jupiter.api.Test; -import pr2.lambda.observer.Beobachter; -import pr2.lambda.observer.Datenhalter; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class BeobachterTest { - - @Test - void testBeobachter() { - Datenhalter dh = new Datenhalter(42); - Beobachter b = dh.getBeobachter(); - assertEquals(42, b.getValue()); - } -} diff --git a/solutions/src/main/java/pr2/object/clone_alien/Alien.java b/solutions/src/main/java/pr2/object/clone_alien/Alien.java deleted file mode 100644 index 65f7132..0000000 --- a/solutions/src/main/java/pr2/object/clone_alien/Alien.java +++ /dev/null @@ -1,100 +0,0 @@ -package pr2.object.clone_alien; - -/** - * Ein Alien. - */ -public class Alien implements Cloneable { - - /** - * Name des Aliens. - */ - private final String name; - - /** - * Raumanzug des Aliens. - */ - private Raumanzug raumanzug; - - /** - * Erzeugt ein neues Alien. - * - * @param name Name des Aliens. - * @param raumanzug Anzug. - */ - public Alien(String name, Raumanzug raumanzug) { - this.name = name; - this.raumanzug = raumanzug; - } - - /** - * Gibt den Namen des Aliens zurück. - * - * @return Name des Aliens. - */ - public String getName() { - return name; - } - - /** - * Gibt den Anzug zurück. - * - * @return der Anzug. - */ - public Raumanzug getAnzug() { - return raumanzug; - } - - /** - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((raumanzug - == null) ? 0 : raumanzug.hashCode()); - return result; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Alien other = (Alien) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } - else if (!name.equals(other.name)) { - return false; - } - if (raumanzug == null) { - return other.raumanzug == null; - } - else { - return raumanzug.equals(other.raumanzug); - } - } - - /** - * @see java.lang.Object#clone() - */ - @Override - public Object clone() throws CloneNotSupportedException { - Alien o = (Alien) super.clone(); - o.raumanzug = (Raumanzug) raumanzug.clone(); - return o; - } -} diff --git a/solutions/src/main/java/pr2/object/clone_alien/Raumanzug.java b/solutions/src/main/java/pr2/object/clone_alien/Raumanzug.java deleted file mode 100644 index b17cde6..0000000 --- a/solutions/src/main/java/pr2/object/clone_alien/Raumanzug.java +++ /dev/null @@ -1,75 +0,0 @@ -package pr2.object.clone_alien; - -/** - * Ein Raumanzug. - */ -public class Raumanzug implements Cloneable { - - /** - * Sauerstoffvorrat, der noch im Raumanzug ist. - */ - private double sauerstoffVorrat; - - /** - * Ertzeugt einen neuen Raumanzug. - */ - public Raumanzug() { - sauerstoffVorrat = Math.random(); - } - - /** - * Sauerstoffvorrat im Anzug. - * - * @return Vorrat in % (0.0-1.0) - */ - public double getSauerstoffVorrat() { - return sauerstoffVorrat; - } - - /** - * Tankt den Anzug auf. - */ - public void auftanken() { - sauerstoffVorrat = 1.0; - } - - /** - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - long temp; - temp = Double.doubleToLongBits(sauerstoffVorrat); - result = prime * result + (int) (temp ^ (temp >>> 32)); - return result; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Raumanzug other = (Raumanzug) obj; - return Double.doubleToLongBits(sauerstoffVorrat) - == Double.doubleToLongBits(other.sauerstoffVorrat); - } - - /** - * @see java.lang.Object#clone() - */ - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } -} diff --git a/solutions/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java b/solutions/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java deleted file mode 100644 index 4248732..0000000 --- a/solutions/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package pr2.object.clone_alien.test; - -import org.junit.jupiter.api.Test; -import pr2.object.clone_alien.Alien; -import pr2.object.clone_alien.Raumanzug; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotSame; - -/** - * Test für die Clone-Methoden. - */ -public class AlienCloneTest { - - /** - * Test-Methode. - * - * @throws CloneNotSupportedException wird geworfen, wenn clone_alien - * nicht korrekt implementiert wurde. - */ - @Test - void testClone() throws CloneNotSupportedException { - Raumanzug r1 = new Raumanzug(); - Alien a1 = new Alien("Predator", r1); - - Alien a2 = (Alien) a1.clone(); - Raumanzug r2 = a2.getAnzug(); - - assertNotSame(a1, a2); - assertNotSame(r1, r2); - - assertEquals(a1, a2); - assertEquals(r1, r2); - assertEquals(r1.getSauerstoffVorrat(), r2.getSauerstoffVorrat(), - 0.0001); - } -} diff --git a/solutions/src/main/java/pr2/object/clone_person/Person.java b/solutions/src/main/java/pr2/object/clone_person/Person.java deleted file mode 100644 index b95b0c9..0000000 --- a/solutions/src/main/java/pr2/object/clone_person/Person.java +++ /dev/null @@ -1,34 +0,0 @@ -package pr2.object.clone_person; - -import java.util.Date; - -public class Person implements Cloneable { - - private final String vorname = ""; - private final String nachname = ""; - private Date geburtsdatum = new Date(); - - @Override - public Object clone() { - Person clone; - try { - clone = (Person) super.clone(); - clone.geburtsdatum = (Date) geburtsdatum.clone(); - return clone; - } - catch (CloneNotSupportedException e) { - // cannot happen - return null; - } - } - - - @Override - public String toString() { - return "Person{" - + "vorname='" + vorname + '\'' - + ", nachname='" + nachname + '\'' - + ", geburtsdatum=" + geburtsdatum - + '}'; - } -} diff --git a/solutions/src/main/java/pr2/object/equals_hashcode/Ork.java b/solutions/src/main/java/pr2/object/equals_hashcode/Ork.java deleted file mode 100644 index abae1a9..0000000 --- a/solutions/src/main/java/pr2/object/equals_hashcode/Ork.java +++ /dev/null @@ -1,57 +0,0 @@ -package pr2.object.equals_hashcode; - -/** - * Ork. - */ -public class Ork extends Wesen { - - /** - * Stärke der Orks. - */ - private static final int ORK_STAERKE = 17; - - /** - * Zeigt an, ob der Ork gut oder böse ist. - */ - private final boolean boese; - - /** - * Legt einen neuen Ork an. - * - * @param name Name des Orks. - * @param boese zeigt an, ob der Ork gut oder böse ist - */ - public Ork(String name, boolean boese) { - super(name, ORK_STAERKE); - this.boese = boese; - } - - /** - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + (boese ? 1231 : 1237); - return result; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!super.equals(obj)) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Ork other = (Ork) obj; - return boese == other.boese; - } -} diff --git a/solutions/src/main/java/pr2/object/equals_hashcode/Wesen.java b/solutions/src/main/java/pr2/object/equals_hashcode/Wesen.java deleted file mode 100644 index 424641c..0000000 --- a/solutions/src/main/java/pr2/object/equals_hashcode/Wesen.java +++ /dev/null @@ -1,66 +0,0 @@ -package pr2.object.equals_hashcode; - -/** - * Ein Wesen in der Spielwelt. - */ -public class Wesen { - - /** - * Name des Wesens. - */ - private final String name; - - /** - * Stärke des Wesens. - */ - private final int staerke; - - /** - * Legt ein neues Wesen an. - * - * @param name Name des Wesens. - * @param staerke Stärke des Wesens. - */ - public Wesen(String name, int staerke) { - this.name = name; - this.staerke = staerke; - } - - /** - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + staerke; - return result; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Wesen other = (Wesen) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } - else if (!name.equals(other.name)) { - return false; - } - return staerke == other.staerke; - } -} diff --git a/solutions/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java b/solutions/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java deleted file mode 100644 index bdbe397..0000000 --- a/solutions/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package pr2.object.equals_hashcode.test; - -import org.junit.jupiter.api.Test; -import pr2.object.equals_hashcode.Ork; -import pr2.object.equals_hashcode.Wesen; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotSame; - -/** - * Testklasse für die Wesen. - */ -public class WesenTest { - - /** - * Testet equals und hashCode von Wesen. - */ - @Test - void testWesen() { - Wesen w1 = new Wesen("Azok", 30); - Wesen w2 = new Wesen("Azok", 30); - Wesen w3 = new Wesen("Azok", 31); - Wesen w4 = new Wesen("Gorrok", 30); - Wesen w5 = new Wesen("Gorrok", 31); - - assertNotSame(w1, w2); - assertEquals(w1, w2); - - assertNotSame(w1, w3); - assertNotEquals(w1, w3); - - assertNotSame(w1, w4); - assertNotEquals(w1, w4); - - assertNotSame(w1, w5); - assertNotEquals(w1, w5); - - assertEquals(w1.hashCode(), w2.hashCode()); - } - - /** - * Testet equals und hashCode von Ork. - */ - @Test - void testOrk() { - Ork o1 = new Ork("Snagas", true); - Ork o2 = new Ork("Snagas", true); - Ork o3 = new Ork("Snagas", false); - Ork o4 = new Ork("Berg-Ork", false); - Ork o5 = new Ork("Berg-Ork", true); - Ork o6 = new Ork("Berg-Ork", false); - Wesen w = new Wesen("Snagas", 17); - - assertNotSame(o1, o2); - assertEquals(o1, o2); - - assertNotSame(o1, o3); - assertNotEquals(o1, o3); - - assertNotSame(o1, o4); - assertNotEquals(o1, o4); - - assertNotSame(o1, o5); - assertNotEquals(o1, o5); - - assertEquals(o1.hashCode(), o2.hashCode()); - assertEquals(o4.hashCode(), o6.hashCode()); - - assertNotEquals(w, o1); - assertNotEquals(w, o2); - assertNotEquals(w, o3); - assertNotEquals(null, o1); - assertNotEquals("Hugo", o1); - assertEquals(o1, o1); - - // Diese Tests muss nicht zwangsweise funktionieren, da - // ungleiche Objekte einen identischen Hashcode haben können. - // Wir gehen hier aber davon aus, dass eine Hashkollision - // sehr selten ist und machen daher aus didaktischen Gründen - // diesen Test. - assertNotEquals(o1.hashCode(), o3.hashCode()); - assertNotEquals(o1.hashCode(), o4.hashCode()); - assertNotEquals(o1.hashCode(), o5.hashCode()); - assertNotEquals(o4.hashCode(), o5.hashCode()); - } -} diff --git a/solutions/src/main/java/pr2/object/equals_person/Person.java b/solutions/src/main/java/pr2/object/equals_person/Person.java deleted file mode 100644 index b45948d..0000000 --- a/solutions/src/main/java/pr2/object/equals_person/Person.java +++ /dev/null @@ -1,54 +0,0 @@ -package pr2.object.equals_person; - -public class Person { - - private String vorname; - private String nachname; - private int alter; - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + alter; - result = prime * result - + ((nachname == null) ? 0 : nachname.hashCode()); - result = prime * result - + ((vorname == null) ? 0 : vorname.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (this == obj) { - return true; - } - if (getClass() != obj.getClass()) { - return false; - } - - Person other = (Person) obj; - - if (alter != other.alter) { - return false; - } - - if (nachname == null) { - if (other.nachname != null) { - return false; - } - } - else if (!nachname.equals(other.nachname)) { - return false; - } - if (vorname == null) { - return other.vorname == null; - } - else { - return vorname.equals(other.vorname); - } - } -} diff --git a/solutions/src/main/java/pr2/object/tostring/Alien.java b/solutions/src/main/java/pr2/object/tostring/Alien.java deleted file mode 100644 index 0a18c04..0000000 --- a/solutions/src/main/java/pr2/object/tostring/Alien.java +++ /dev/null @@ -1,56 +0,0 @@ -package pr2.object.tostring; - -/** - * Ein Alien. - */ -public class Alien implements Cloneable { - - /** - * Name des Aliens. - */ - private final String name; - - /** - * Raumanzug des Aliens. - */ - private final Raumanzug raumanzug; - - /** - * Erzeugt ein neues Alien. - * - * @param name Name des Aliens. - * @param raumanzug Anzug. - */ - public Alien(String name, Raumanzug raumanzug) { - this.name = name; - this.raumanzug = raumanzug; - } - - /** - * Gibt den Namen des Aliens zurück. - * - * @return Name des Aliens. - */ - public String getName() { - return name; - } - - /** - * Gibt den Anzug zurück. - * - * @return der Anzug. - */ - public Raumanzug getAnzug() { - return raumanzug; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format( - "Ich bin ein Alien und heiße '%s'. Ich trage " + "einen %s.", - name, raumanzug); - } -} diff --git a/solutions/src/main/java/pr2/object/tostring/Ausgabe.java b/solutions/src/main/java/pr2/object/tostring/Ausgabe.java deleted file mode 100644 index 637f3c6..0000000 --- a/solutions/src/main/java/pr2/object/tostring/Ausgabe.java +++ /dev/null @@ -1,24 +0,0 @@ -package pr2.object.tostring; - -/** - * Ausgabe. - */ -public final class Ausgabe { - - /** - * Konstruktor. - */ - private Ausgabe() { - // keine Objekte. - } - - /** - * Einstiegspunkt in das Programm. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - Alien alien = new Alien("E.T.", new Raumanzug("Spaceman 2000")); - System.out.println(alien); - } -} diff --git a/solutions/src/main/java/pr2/object/tostring/Raumanzug.java b/solutions/src/main/java/pr2/object/tostring/Raumanzug.java deleted file mode 100644 index 795e95e..0000000 --- a/solutions/src/main/java/pr2/object/tostring/Raumanzug.java +++ /dev/null @@ -1,52 +0,0 @@ -package pr2.object.tostring; - -/** - * Ein Raumanzug. - */ -public class Raumanzug implements Cloneable { - - /** - * Hersteller des Raumanzuges. - */ - private final String hersteller; - - /** - * Sauerstoffvorrat, der noch im Raumanzug ist. - */ - private double sauerstoffVorrat; - - /** - * Ertzeugt einen neuen Raumanzug. - * - * @param hersteller Hersteller des Anzuges. - */ - public Raumanzug(String hersteller) { - this.hersteller = hersteller; - sauerstoffVorrat = Math.random(); - } - - /** - * Sauerstoffvorrat im Anzug. - * - * @return Vorrat in % (0.0-1.0) - */ - public double getSauerstoffVorrat() { - return sauerstoffVorrat; - } - - /** - * Tankt den Anzug auf. - */ - public void auftanken() { - sauerstoffVorrat = 1.0; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("Raumanzug von %s (Füllstand %d%%)", hersteller, - (int) (sauerstoffVorrat * 100)); - } -} diff --git a/solutions/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java b/solutions/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java deleted file mode 100644 index 7370cda..0000000 --- a/solutions/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.object.wrapper_boxsearch; - -public class BoxSearcher { - - public static void main(String[] args) { - Integer[] array = new Integer[200]; - - for (int i = 0; i < array.length; i++) { - array[i] = i; - } - - for (Integer element : array) { - boolean identisch = (element == Integer.valueOf( - element.intValue())); - System.out.printf("%d: %s%n", element, identisch); - } - } -} diff --git a/solutions/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java b/solutions/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java deleted file mode 100644 index 7499a05..0000000 --- a/solutions/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java +++ /dev/null @@ -1,47 +0,0 @@ -package pr2.object.wrapper_umwandler; - -/** - * Enthält Methoden, um Integer-Zahlen umzuwandeln. - */ -public final class Umwandler { - - /** - * Konstruktor. - */ - private Umwandler() { - // keine Instanzen - } - - /** - * Wandelt eine Zahl in meherer Formate um. - * - * @param i die Zahl. - * @return String mit mehreren Formaten. - */ - public static String toString(int i) { - return "Dezimal: " + i + "\n" + "Hex : " + Integer.toHexString(i) - + "\n" + "Oktal : " + Integer.toOctalString(i) + "\n" - + "Binär : " + Integer.toBinaryString(i); - } - - /** - * Wandelt einen String (zur Basis 10) in eine Zahl um. - * - * @param s String, der umgewandelt werden soll - * @return Umgewandelte Zahl - */ - public static int fromString(String s) { - return Integer.parseInt(s); - } - - /** - * Einstiegspunkt in das Programm. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - String s = "17871"; - int i = fromString(s); - System.out.println(toString(i)); - } -} diff --git a/solutions/src/main/java/pr2/streams/chars_1/CountLetters.java b/solutions/src/main/java/pr2/streams/chars_1/CountLetters.java deleted file mode 100644 index d9b86c9..0000000 --- a/solutions/src/main/java/pr2/streams/chars_1/CountLetters.java +++ /dev/null @@ -1,13 +0,0 @@ -package pr2.streams.chars_1; - -public class CountLetters { - public static long count(String s) { - long sum; - - sum = s.chars() - .filter(Character::isLowerCase) - .count(); - - return sum; - } -} diff --git a/solutions/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java b/solutions/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java deleted file mode 100644 index 963c9ca..0000000 --- a/solutions/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.streams.chars_1.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.chars_1.CountLetters; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CountLettersTest { - @Test - void testCount() { - String s = "Dies ist ein String mit einer ganzen Reihe von " - + "Buchstaben."; - - assertEquals(44, CountLetters.count(s)); - } -} diff --git a/solutions/src/main/java/pr2/streams/chars_2/CountLetters.java b/solutions/src/main/java/pr2/streams/chars_2/CountLetters.java deleted file mode 100644 index c13bdfb..0000000 --- a/solutions/src/main/java/pr2/streams/chars_2/CountLetters.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.streams.chars_2; - -import java.util.List; - -public class CountLetters { - public static long count(List liste) { - - long chars; - - chars = liste.stream() - .flatMapToInt(s -> s.chars()) - .count(); - - return chars; - } -} diff --git a/solutions/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java b/solutions/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java deleted file mode 100644 index 462bde7..0000000 --- a/solutions/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package pr2.streams.chars_2.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.chars_2.CountLetters; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CountLettersTest { - @Test - void testCount() { - List liste = Arrays.asList("Hallo", "Welt", "wie", "geht", - "es"); - - assertEquals(18, CountLetters.count(liste)); - } -} diff --git a/solutions/src/main/java/pr2/streams/chars_3/CountLetters.java b/solutions/src/main/java/pr2/streams/chars_3/CountLetters.java deleted file mode 100644 index b2b43e0..0000000 --- a/solutions/src/main/java/pr2/streams/chars_3/CountLetters.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.streams.chars_3; - -import java.util.List; - -public class CountLetters { - public static long count(List liste) { - - long chars; - - chars = liste.stream() - .flatMapToInt(s -> s.chars()) - .filter(Character::isLowerCase) - .count(); - - return chars; - } -} diff --git a/solutions/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java b/solutions/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java deleted file mode 100644 index f547780..0000000 --- a/solutions/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package pr2.streams.chars_3.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.chars_3.CountLetters; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CountLettersTest { - @Test - void testCount() { - List liste = Arrays.asList("Hallo", "Welt", "wie", "geht", - "es"); - - assertEquals(16, CountLetters.count(liste)); - } -} diff --git a/solutions/src/main/java/pr2/streams/filter/FilterList.java b/solutions/src/main/java/pr2/streams/filter/FilterList.java deleted file mode 100644 index 99c64a7..0000000 --- a/solutions/src/main/java/pr2/streams/filter/FilterList.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.streams.filter; - -import java.util.List; -import java.util.stream.Collectors; - -public class FilterList { - public static List filter(List liste) { - List result; - - result = liste.stream() - .filter(s -> s.length() >= 5) - .map(String::toLowerCase) - .collect(Collectors.toList()); - - return result; - } -} diff --git a/solutions/src/main/java/pr2/streams/filter/test/FilterListTest.java b/solutions/src/main/java/pr2/streams/filter/test/FilterListTest.java deleted file mode 100644 index a807aec..0000000 --- a/solutions/src/main/java/pr2/streams/filter/test/FilterListTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package pr2.streams.filter.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.filter.FilterList; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class FilterListTest { - - @Test - void testFilter() { - List liste = Arrays.asList( - "Hallo", "Welt", "Dampfschifffahrt", "Hundekuchen", - "Fiction", "Java", "Visual Basic", "Drucker"); - - List result = Arrays.asList( - "hallo", "dampfschifffahrt", "hundekuchen", - "fiction", "visual basic", "drucker"); - - assertEquals(result, FilterList.filter(liste)); - } -} diff --git a/solutions/src/main/java/pr2/streams/interne_iteration/ComputerGame.java b/solutions/src/main/java/pr2/streams/interne_iteration/ComputerGame.java deleted file mode 100644 index ad9ef21..0000000 --- a/solutions/src/main/java/pr2/streams/interne_iteration/ComputerGame.java +++ /dev/null @@ -1,87 +0,0 @@ -package pr2.streams.interne_iteration; - -/** - * Computerspiel. - */ -public class ComputerGame { - - /** - * Name. - */ - private final String name; - - /** - * Jahr. - */ - private final int year; - - /** - * Metacritic. - */ - private final int metaScore; - - /** - * Userscore. - */ - private final int userScore; - - /** - * Legt ein neues Spiel an. - * - * @param name Name des Spiels. - * @param year Jahr. - * @param metaScore Metacritic-Bewertung. - * @param userScore Nutzer-Bewertung. - */ - public ComputerGame(String name, int year, int metaScore, int userScore) { - this.name = name; - this.year = year; - this.metaScore = metaScore; - this.userScore = userScore; - } - - /** - * Name des Spiels. - * - * @return Der Name - */ - public String getName() { - return name; - } - - /** - * Jahr, in dem das Spiel erschienen ist bzw. kritisiert wurde. - * - * @return Das Erscheinungsjahr. - */ - public int getYear() { - return year; - } - - /** - * Die Metacritic-Bewertung (0-100). - * - * @return Die Bewertung. - */ - public int getMetaScore() { - return metaScore; - } - - /** - * Die Benutzerbewertung (0-100). - * - * @return Die Benutzerbewertung. - */ - public int getUserScore() { - return userScore; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("%d;%s;%s;%d", metaScore, name, userScore / 10.0, - year); - } -} diff --git a/solutions/src/main/java/pr2/streams/interne_iteration/GameDatabase.java b/solutions/src/main/java/pr2/streams/interne_iteration/GameDatabase.java deleted file mode 100644 index be8483f..0000000 --- a/solutions/src/main/java/pr2/streams/interne_iteration/GameDatabase.java +++ /dev/null @@ -1,61 +0,0 @@ -package pr2.streams.interne_iteration; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -/** - * Datenbank für die Spiele. - */ -public class GameDatabase { - - private final List games; - - /** - * Datenbank mit Spieleinfomrationen. - */ - @SuppressWarnings("deprecation") - public GameDatabase() { - games = new ArrayList<>(); - - try { - BufferedReader br = - new BufferedReader(new FileReader( - "games.txt")); - - String line; - - while ((line = br.readLine()) != null) { - String[] tokens = line.split(";"); - int metacritic = Integer.parseInt(tokens[0]); - String name = tokens[1]; - int userScore = (int) (Double.parseDouble(tokens[2]) * 10); - Date date = - new SimpleDateFormat("MMM d, yyyy", Locale.US).parse( - tokens[3]); - - games.add(new ComputerGame(name, date.getYear() + 1900, - metacritic, userScore)); - } - - br.close(); - } catch (IOException | ParseException ex) { - ex.printStackTrace(); - } - } - - /** - * Gibt die Liste der Spiele zurück. - * - * @return Liste der Spiele - */ - public List getGames() { - return new ArrayList<>(games); - } -} diff --git a/solutions/src/main/java/pr2/streams/interne_iteration/ListGames.java b/solutions/src/main/java/pr2/streams/interne_iteration/ListGames.java deleted file mode 100644 index e9cce9b..0000000 --- a/solutions/src/main/java/pr2/streams/interne_iteration/ListGames.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.streams.interne_iteration; - -import java.util.stream.Stream; - -/** - * Spiele auflisten. - */ -public class ListGames { - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - GameDatabase db = new GameDatabase(); - - System.out.println("Interne Iterartion"); - System.out.println(); - Stream stream = db.getGames().stream(); - stream.forEach(g -> System.out.println(g)); - - System.out.println(); - System.out.println(); - System.out.println("Interne Iterartion mit Methodenreferenz"); - stream = db.getGames().stream(); - stream.forEach(System.out::println); - - System.out.println(); - System.out.println(); - System.out.println("Spiele aus 2012"); - stream = db.getGames().stream(); - stream.forEach(g -> { - if (g.getYear() == 2012) { - System.out.println(g); - } - }); - } -} diff --git a/solutions/src/main/java/pr2/streams/map_filter/ComputerGame.java b/solutions/src/main/java/pr2/streams/map_filter/ComputerGame.java deleted file mode 100644 index c85cb86..0000000 --- a/solutions/src/main/java/pr2/streams/map_filter/ComputerGame.java +++ /dev/null @@ -1,88 +0,0 @@ -package pr2.streams.map_filter; - -/** - * Computerspiel. - */ -public class ComputerGame { - - /** - * Name. - */ - private final String name; - - /** - * Jahr. - */ - private final int year; - - /** - * Metacritic. - */ - private final int metaScore; - - /** - * Userscore. - */ - private final int userScore; - - /** - * Legt ein neues Spiel an. - * - * @param name Name des Spiels. - * @param year Jahr. - * @param metaScore Metacritic-Bewertung. - * @param userScore Nutzer-Bewertung. - */ - public ComputerGame(String name, int year, int metaScore, int userScore) { - - this.name = name; - this.year = year; - this.metaScore = metaScore; - this.userScore = userScore; - } - - /** - * Name des Spiels. - * - * @return Der Name - */ - public String getName() { - return name; - } - - /** - * Jahr, in dem das Spiel erschienen ist bzw. kritisiert wurde. - * - * @return Das Erscheinungsjahr. - */ - public int getYear() { - return year; - } - - /** - * Die Metacritic-Bewertung (0-100). - * - * @return Die Bewertung. - */ - public int getMetaScore() { - return metaScore; - } - - /** - * Die Benutzerbewertung (0-100). - * - * @return Die Benutzerbewertung. - */ - public int getUserScore() { - return userScore; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("%d;%s;%s;%d", metaScore, name, userScore / 10.0, - year); - } -} diff --git a/solutions/src/main/java/pr2/streams/map_filter/GameDatabase.java b/solutions/src/main/java/pr2/streams/map_filter/GameDatabase.java deleted file mode 100644 index 863ff18..0000000 --- a/solutions/src/main/java/pr2/streams/map_filter/GameDatabase.java +++ /dev/null @@ -1,61 +0,0 @@ -package pr2.streams.map_filter; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -/** - * Datenbank für die Spiele. - */ -public class GameDatabase { - - private final List games; - - /** - * Datenbank mit Spieleinfomrationen. - */ - @SuppressWarnings("deprecation") - public GameDatabase() { - games = new ArrayList<>(); - - try { - BufferedReader br = - new BufferedReader(new FileReader( - "games.txt")); - - String line; - - while ((line = br.readLine()) != null) { - String[] tokens = line.split(";"); - int metacritic = Integer.parseInt(tokens[0]); - String name = tokens[1]; - int userScore = (int) (Double.parseDouble(tokens[2]) * 10); - Date date = - new SimpleDateFormat("MMM d, yyyy", Locale.US).parse( - tokens[3]); - - games.add(new ComputerGame(name, date.getYear() + 1900, - metacritic, userScore)); - } - - br.close(); - } catch (IOException | ParseException ex) { - ex.printStackTrace(); - } - } - - /** - * Gibt die Liste der Spiele zurück. - * - * @return Liste der Spiele - */ - public List getGames() { - return new ArrayList<>(games); - } -} diff --git a/solutions/src/main/java/pr2/streams/map_filter/MapFilterGames.java b/solutions/src/main/java/pr2/streams/map_filter/MapFilterGames.java deleted file mode 100644 index f9d095f..0000000 --- a/solutions/src/main/java/pr2/streams/map_filter/MapFilterGames.java +++ /dev/null @@ -1,47 +0,0 @@ -package pr2.streams.map_filter; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -/** - * Spiele auflisten. - */ -public class MapFilterGames { - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - GameDatabase db = new GameDatabase(); - List games = db.getGames(); - - // Alle Spiele von 2010 mit einem Metascore >= 80 - // und einem User-Score >= 80 - Stream stream = games.stream(); - stream.filter(g -> g.getYear() == 2010) - .filter(g -> g.getMetaScore() >= 80) - .filter(g -> g.getUserScore() >= 80).forEach( - System.out::println); - - // Größter und kleinster Unterschied - stream = games.stream(); - Optional o = stream.max((a, b) -> ( - a.getMetaScore() - a.getUserScore() - b.getMetaScore() - + b.getUserScore())); - if (o.isPresent()) { - System.out.println("Größte Abweichung: " + o.get()); - } - - stream = games.stream(); - o = stream.min((a, b) -> ( - a.getMetaScore() - a.getUserScore() - b.getMetaScore() - + b.getUserScore())); - - if (o.isPresent()) { - System.out.println("Kleinste Abweichung: " + o.get()); - } - } -} diff --git a/solutions/src/main/java/pr2/streams/reduce/Squarer.java b/solutions/src/main/java/pr2/streams/reduce/Squarer.java deleted file mode 100644 index 22cad1e..0000000 --- a/solutions/src/main/java/pr2/streams/reduce/Squarer.java +++ /dev/null @@ -1,25 +0,0 @@ -package pr2.streams.reduce; - -import java.util.List; - -import static java.util.stream.Collectors.summingInt; - -public class Squarer { - public static int mitMap(List zahlen) { - //= Arrays.asList(1, 5, 8, 9, 12, 10, 3); - int mitMap; - - mitMap = zahlen.stream() - .map(e -> e * e) - .collect(summingInt(e -> e)); - return mitMap; - } - - public static int ohneMap(List zahlen) { - int ohneMap; - ohneMap = zahlen.stream() - .reduce((a, b) -> a + b * b) - .orElse(0); - return ohneMap; - } -} diff --git a/solutions/src/main/java/pr2/streams/reduce/test/SquarerTest.java b/solutions/src/main/java/pr2/streams/reduce/test/SquarerTest.java deleted file mode 100644 index 638f9c2..0000000 --- a/solutions/src/main/java/pr2/streams/reduce/test/SquarerTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package pr2.streams.reduce.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.streams.reduce.Squarer; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SquarerTest { - - @Test - void testMitMap() { - List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); - Assertions.assertEquals(424, Squarer.mitMap(l)); - } - - @Test - void testOhneMap() { - List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); - assertEquals(424, Squarer.ohneMap(l)); - } - -} diff --git a/solutions/src/main/java/pr2/streams/reduce_critics/ComputerGame.java b/solutions/src/main/java/pr2/streams/reduce_critics/ComputerGame.java deleted file mode 100644 index 4410562..0000000 --- a/solutions/src/main/java/pr2/streams/reduce_critics/ComputerGame.java +++ /dev/null @@ -1,88 +0,0 @@ -package pr2.streams.reduce_critics; - -/** - * Computerspiel. - */ -public class ComputerGame { - - /** - * Name. - */ - private final String name; - - /** - * Jahr. - */ - private final int year; - - /** - * Metacritic. - */ - private final int metaScore; - - /** - * Userscore. - */ - private final int userScore; - - /** - * Legt ein neues Spiel an. - * - * @param name Name des Spiels. - * @param year Jahr. - * @param metaScore Metacritic-Bewertung. - * @param userScore Nutzer-Bewertung. - */ - public ComputerGame(String name, int year, int metaScore, int userScore) { - - this.name = name; - this.year = year; - this.metaScore = metaScore; - this.userScore = userScore; - } - - /** - * Name des Spiels. - * - * @return Der Name - */ - public String getName() { - return name; - } - - /** - * Jahr, in dem das Spiel erschienen ist bzw. kritisiert wurde. - * - * @return Das Erscheinungsjahr. - */ - public int getYear() { - return year; - } - - /** - * Die Metacritic-Bewertung (0-100). - * - * @return Die Bewertung. - */ - public int getMetaScore() { - return metaScore; - } - - /** - * Die Benutzerbewertung (0-100). - * - * @return Die Benutzerbewertung. - */ - public int getUserScore() { - return userScore; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("%d;%s;%s;%d", metaScore, name, userScore / 10.0, - year); - } -} diff --git a/solutions/src/main/java/pr2/streams/reduce_critics/GameDatabase.java b/solutions/src/main/java/pr2/streams/reduce_critics/GameDatabase.java deleted file mode 100644 index 771b8d4..0000000 --- a/solutions/src/main/java/pr2/streams/reduce_critics/GameDatabase.java +++ /dev/null @@ -1,61 +0,0 @@ -package pr2.streams.reduce_critics; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -/** - * Datenbank für die Spiele. - */ -public class GameDatabase { - - private final List games; - - /** - * Datenbank mit Spieleinfomrationen. - */ - @SuppressWarnings("deprecation") - public GameDatabase() { - games = new ArrayList<>(); - - try { - BufferedReader br = - new BufferedReader( - new FileReader("games.txt")); - - String line; - - while ((line = br.readLine()) != null) { - String[] tokens = line.split(";"); - int metacritic = Integer.parseInt(tokens[0]); - String name = tokens[1]; - int userScore = (int) (Double.parseDouble(tokens[2]) * 10); - Date date = - new SimpleDateFormat("MMM d, yyyy", Locale.US).parse( - tokens[3]); - - games.add(new ComputerGame(name, date.getYear() + 1900, - metacritic, userScore)); - } - - br.close(); - } catch (IOException | ParseException ex) { - ex.printStackTrace(); - } - } - - /** - * Gibt die Liste der Spiele zurück. - * - * @return Liste der Spiele - */ - public List getGames() { - return new ArrayList<>(games); - } -} diff --git a/solutions/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java b/solutions/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java deleted file mode 100644 index 265191b..0000000 --- a/solutions/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java +++ /dev/null @@ -1,41 +0,0 @@ -package pr2.streams.reduce_critics; - -import java.util.List; -import java.util.stream.Stream; - -/** - * Spiele auflisten. - */ -public class MapReduceGames { - - /** - * Hauptmethode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - GameDatabase db = new GameDatabase(); - List games = db.getGames(); - - // Abweichung des Metascores von dem Userscore - // als quadratisches Mittel berechnen. - Stream stream = games.stream(); - - double rms = stream.map(g -> g.getMetaScore() - g.getUserScore()) - .map(g -> g * g) - .reduce(0, (sum, value) -> sum + value); - rms /= games.size(); - rms = Math.sqrt(rms); - - // Abweichung als arithmetisches Mittel - stream = games.stream(); - double mittelwert = stream.map( - g -> g.getMetaScore() - g.getUserScore()) - .reduce(0, (sum, value) -> sum + value); - mittelwert /= games.size(); - - System.out.printf("Abweichung Metascore: Durchschnitt=%.2f%n", - mittelwert); - System.out.printf("Abweichung Metascore: RMS=%.2f%n", rms); - } -} diff --git a/solutions/src/main/java/pr2/streams/summieren/SumUp.java b/solutions/src/main/java/pr2/streams/summieren/SumUp.java deleted file mode 100644 index 71ae1a1..0000000 --- a/solutions/src/main/java/pr2/streams/summieren/SumUp.java +++ /dev/null @@ -1,11 +0,0 @@ -package pr2.streams.summieren; - -import java.util.stream.Stream; - -public class SumUp { - public static int sumUp(Stream numbers) { - int result; - result = numbers.reduce(0, (x, y) -> x + y); - return result; - } -} diff --git a/solutions/src/main/java/pr2/streams/summieren/test/SumUpTest.java b/solutions/src/main/java/pr2/streams/summieren/test/SumUpTest.java deleted file mode 100644 index bec5b46..0000000 --- a/solutions/src/main/java/pr2/streams/summieren/test/SumUpTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.streams.summieren.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.summieren.SumUp; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SumUpTest { - - @Test - void testSum() { - List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); - assertEquals(48, SumUp.sumUp(l.stream())); - } -} diff --git a/solutions/src/main/java/pr2/streams/word_count/WordCount.java b/solutions/src/main/java/pr2/streams/word_count/WordCount.java deleted file mode 100644 index 299dd1a..0000000 --- a/solutions/src/main/java/pr2/streams/word_count/WordCount.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.streams.word_count; - -import java.util.List; - -import static java.util.stream.Collectors.groupingBy; -import static java.util.stream.Collectors.toList; - -public class WordCount { - public static List count(List liste) { - List result; - - result = liste.stream() - .collect(groupingBy(s -> s)) - .entrySet().stream() - .map(e -> e.getKey() + "->" + e.getValue().size()) - .collect(toList()); - - return result; - } -} diff --git a/solutions/src/main/java/pr2/streams/word_count/test/WordCountTest.java b/solutions/src/main/java/pr2/streams/word_count/test/WordCountTest.java deleted file mode 100644 index 43dbcf8..0000000 --- a/solutions/src/main/java/pr2/streams/word_count/test/WordCountTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package pr2.streams.word_count.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.word_count.WordCount; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class WordCountTest { - - @Test - void testWordCount() { - List liste = Arrays.asList("A", "A", "B", "B", "B", "C", - "D", "D", "E", "E", "E", "F"); - - assertEquals(Arrays.asList("A->2", "B->3", "C->1", "D->2", - "E->3", "F->1"), WordCount.count(liste)); - } -} diff --git a/solutions/src/main/java/pr2/strukturierung/information_hiding/Rechner.java b/solutions/src/main/java/pr2/strukturierung/information_hiding/Rechner.java deleted file mode 100644 index 42bdd2d..0000000 --- a/solutions/src/main/java/pr2/strukturierung/information_hiding/Rechner.java +++ /dev/null @@ -1,60 +0,0 @@ -package pr2.strukturierung.information_hiding; - -/** - * Ein einfacher Taschenrechner. - */ -public class Rechner { - - /** Speicher des Taschenrechners. */ - private double speicher; - - /** - * Addiert zwei Werte und gibt das Ergebnis zurück. - * - * @param a erster Operand. - * @param b zweiter Operand. - * @return das Ergebnis. - */ - public double addiere(double a, double b) { - return a + b; - } - - /** - * Subtrahiert zwei Werte und gibt das Ergebnis zurück. - * - * @param a erster Operand. - * @param b zweiter Operand. - * @return das Ergebnis. - */ - public double subtrahiere(double a, double b) { - return a - b; - } - - /** - * Multipliziert zwei Werte und gibt das Ergebnis zurück. - * - * @param a erster Operand. - * @param b zweiter Operand. - * @return das Ergebnis. - */ - public double multipliziere(double a, double b) { - return a * b; - } - /** - * Gibt den gespeicherten Wert zurück. - * - * @return gespeicherter Wert. - */ - public double getSpeicher() { - return speicher; - } - - /** - * Speichert den gegebenen Wert. - * - * @param wert Wert, der gespeichert werden soll. - */ - public void setSpeicher(double wert) { - speicher = wert; - } -} diff --git a/solutions/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java b/solutions/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java deleted file mode 100644 index 264712f..0000000 --- a/solutions/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package pr2.strukturierung.information_hiding.test; - -import org.junit.jupiter.api.Test; -import pr2.strukturierung.information_hiding.Rechner; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Unit-Test für den Rechner. - */ -public class RechnerTest { - - /** - * Testet alle Grundoperationen des Rechners. - */ - @Test - void testRechner() { - Rechner r = new Rechner(); - - // 2 + 2 = 4 - assertEquals(4.0, r.addiere(2.0, 2.0), 0.0001); - - // 3 - 1 = 2 - assertEquals(2.0, r.subtrahiere(3, 1), 0.0001); - - // 3 * 3 = 9 - assertEquals(9.0, r.multipliziere(3, 3), 0.0001); - - // 2 + 2 * 2 = 6 - r.setSpeicher(r.multipliziere(2, 2)); - assertEquals(6.0, r.addiere(2, r.getSpeicher()), 0.0001); -// // 2 + 2 = 4 -// r.addiere(2.0, 2.0); -// assertEquals(4.0, r.wert, 0.0001); -// -// // 3 - 1 = 2 -// r.subtrahiere(3, 1); -// assertEquals(2.0, r.wert, 0.0001); -// -// // 3 * 3 = 9 -// r.multipliziere(3, 3); -// assertEquals(9.0, r.wert, 0.0001); -// -// // 2 + 2 * 2 = 6 -// r.multipliziere(2, 2); -// r.speichern(); -// r.addiere(2, r.speicher); -// assertEquals(6.0, r.wert, 0.0001); - } -} diff --git a/solutions/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java b/solutions/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java deleted file mode 100644 index 2e141e9..0000000 --- a/solutions/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java +++ /dev/null @@ -1,51 +0,0 @@ -package pr2.threads.fakultaet; - -public class FakultaetParallel { - - private long[] ergebnisse; - - private long fact(long n) { - return (n == 0 ? 1 : n * fact(n - 1)); - } - - private class FactThread implements Runnable { - - int startPunkt; - int endPunkt; - - public FactThread(int startPunkt, int endPunkt) { - this.startPunkt = startPunkt; - this.endPunkt = endPunkt; - } - - @Override - public void run() { - - for (int n = startPunkt; n <= endPunkt; n++) { - ergebnisse[n] = fact(n); - } - } - } - - public long[] calculate(int bis) { - - if ((bis <= 0) || (bis > 20)) { - throw new IllegalArgumentException("0 < n <= 20"); - } - - ergebnisse = new long[bis + 1]; - - Thread t1 = new Thread(new FactThread(0, bis / 2)); - Thread t2 = new Thread(new FactThread(bis / 2, bis)); - t1.start(); - t2.start(); - try { - t1.join(); - t2.join(); - } catch (InterruptedException e) { - // ignorieren - } - - return ergebnisse.clone(); - } -} diff --git a/solutions/src/main/java/pr2/threads/fakultaet/Main.java b/solutions/src/main/java/pr2/threads/fakultaet/Main.java deleted file mode 100644 index cf56f2d..0000000 --- a/solutions/src/main/java/pr2/threads/fakultaet/Main.java +++ /dev/null @@ -1,13 +0,0 @@ -package pr2.threads.fakultaet; - -public class Main { - public static void main(String[] args) { - FakultaetParallel fp = new FakultaetParallel(); - long[] ergebnisse = fp.calculate(20); - - for (int i = 0; i < ergebnisse.length; i++) { - long ergebnis = ergebnisse[i]; - System.out.printf("fact(%d) = %d%n", i, ergebnis); - } - } -} diff --git a/solutions/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java b/solutions/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java deleted file mode 100644 index 3070d20..0000000 --- a/solutions/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java +++ /dev/null @@ -1,26 +0,0 @@ -package pr2.threads.interrupt; - -public class ThreadsBeenden { - - public static void main(String[] args) throws InterruptedException { - Thread t = new Thread(new Runnable() { - - @Override - public void run() { - while (!Thread.currentThread().isInterrupted()) { - System.out.println("Paralleler Thread"); - - try { - Thread.sleep(100); - } catch (InterruptedException e) { - break; - } - } - } - }); - - t.start(); - Thread.sleep(2000); - t.interrupt(); - } -} diff --git a/solutions/src/main/java/pr2/threads/notifier/Main.java b/solutions/src/main/java/pr2/threads/notifier/Main.java deleted file mode 100644 index aa4f490..0000000 --- a/solutions/src/main/java/pr2/threads/notifier/Main.java +++ /dev/null @@ -1,40 +0,0 @@ -package pr2.threads.notifier; - -public class Main { - - private static final int SLEEP_TIME = 200; - - public static void main(String[] args) { - - final Notifier notifier = new Notifier(); - - Runnable putter = () -> { - while (true) { - notifier.setString(Thread.currentThread().getName()); - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - return; - } - } - }; - - Runnable getter = () -> { - while (true) { - System.out.println(notifier.getString()); - - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - return; - } - } - }; - - new Thread(putter, "Putter 1").start(); - new Thread(putter, "Putter 2").start(); - new Thread(getter, "Getter 1").start(); - new Thread(getter, "Getter 2").start(); - new Thread(getter, "Getter 3").start(); - } -} diff --git a/solutions/src/main/java/pr2/threads/notifier/Notifier.java b/solutions/src/main/java/pr2/threads/notifier/Notifier.java deleted file mode 100644 index 2a8b373..0000000 --- a/solutions/src/main/java/pr2/threads/notifier/Notifier.java +++ /dev/null @@ -1,34 +0,0 @@ -package pr2.threads.notifier; - -public class Notifier { - - private String theString; - - public synchronized String getString() { - while (theString == null) { - try { - wait(); - } catch (InterruptedException e) { - return null; // simply return - } - } - - String result = theString; - theString = null; - notifyAll(); - return result; - } - - public synchronized void setString(String string) { - while (theString != null) { - try { - wait(); - } catch (InterruptedException e) { - return; // simply return - } - } - - theString = string; - notifyAll(); - } -} diff --git a/solutions/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java b/solutions/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java deleted file mode 100644 index ad44743..0000000 --- a/solutions/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java +++ /dev/null @@ -1,25 +0,0 @@ -package pr2.threads.paralleldrucker; - -public class ParallelDrucker { - - public static void main(String[] args) { - Thread t1 = new Thread(() -> { - while (true) { - System.out.println("Thread 1 speaking"); - } - }); - - Thread t2 = new Thread(() -> { - while (true) { - System.out.println("Thread 2 speaking"); - } - }); - - t1.start(); - t2.start(); - - while (true) { - System.out.println("Main Thread speaking"); - } - } -} diff --git a/solutions/src/main/java/pr2/threads/race_condition/Main.java b/solutions/src/main/java/pr2/threads/race_condition/Main.java deleted file mode 100644 index ee66523..0000000 --- a/solutions/src/main/java/pr2/threads/race_condition/Main.java +++ /dev/null @@ -1,41 +0,0 @@ -package pr2.threads.race_condition; - -import java.util.Arrays; -import java.util.List; - -/** - * Haupklasse. - */ -public class Main { - - /** - * Start-Methode. - * - * @param args Kommandozeilenargumente. - */ - public static void main(String[] args) { - - NumberList numbers = new NumberList(); - - // Threads anlegen - List threads = Arrays.asList( - new Thread(new NumberIncrementer(100000, numbers)), - new Thread(new NumberIncrementer(100000, numbers)), - new Thread(new NumberIncrementer(100000, numbers))); - - // Threads starten - threads.forEach(Thread::start); - - // Auf Ende der Threads warten - threads.forEach(t -> { - try { - t.join(); - } catch (InterruptedException e) { - // ignore - } - }); - - // Zahlen überprüfen - numbers.check(); - } -} diff --git a/solutions/src/main/java/pr2/threads/race_condition/NumberIncrementer.java b/solutions/src/main/java/pr2/threads/race_condition/NumberIncrementer.java deleted file mode 100644 index d72a590..0000000 --- a/solutions/src/main/java/pr2/threads/race_condition/NumberIncrementer.java +++ /dev/null @@ -1,42 +0,0 @@ -package pr2.threads.race_condition; - -/** - * Runnable, dass Zahlen inkrementieren kann. - */ -public class NumberIncrementer implements Runnable { - - /** - * Zahl, bis zu der gearbeitet werden soll. - */ - private final int boundary; - - /** - * Speicher für die generierten Zahlen. - */ - private final NumberList numberList; - - /** - * Legt ein neues Objekt an. - * - * @param boundary Obergrenze für die Generierung - * @param numberList Speicher für die Zahlen - */ - public NumberIncrementer(int boundary, NumberList numberList) { - this.boundary = boundary; - this.numberList = numberList; - } - - /** - * @see java.lang.Runnable#run() - */ - @Override - public void run() { - for (int i = 0; i < boundary; i++) { - synchronized (numberList) { - int lastNum = numberList.getLastNumber(); - lastNum++; - numberList.add(lastNum); - } - } - } -} diff --git a/solutions/src/main/java/pr2/threads/race_condition/NumberList.java b/solutions/src/main/java/pr2/threads/race_condition/NumberList.java deleted file mode 100644 index c5ba3f5..0000000 --- a/solutions/src/main/java/pr2/threads/race_condition/NumberList.java +++ /dev/null @@ -1,60 +0,0 @@ -package pr2.threads.race_condition; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Einfache Sammlung von Zahlen. - */ -public class NumberList { - - /** - * Die gespeicherten Zahlen. - */ - private final List numbers = - Collections.synchronizedList(new ArrayList<>()); - - /** - * Die letzte Zahl, die gespeichert wurde. - */ - private int lastNumber; - - /** - * Liefert die letzte Zahl, die gespeichert wurde. - * - * @return letzte Zahl. - */ - public int getLastNumber() { - return lastNumber; - } - - /** - * Fügt eine neue Zahl hinzu. - * - * @param number die zu speichernde Zahl. - */ - public void add(int number) { - lastNumber = number; - numbers.add(number); - } - - /** - * Überprüft, ob die Zahlen fortlaufend sind. - * - * @throws IllegalArgumentException wenn die Zahlen nicht fortlaufend sind - */ - public void check() { - - int number = 0; - - for (Integer integer : numbers) { - number++; - if (integer != number) { - throw new IllegalStateException( - "Zahlen nicht fortlaufend!" + " erwartet: " + number - + " gefunden: " + integer); - } - } - } -} diff --git a/solutions/src/main/java/pr2/threads/stack_heap/ThreadProblem.java b/solutions/src/main/java/pr2/threads/stack_heap/ThreadProblem.java deleted file mode 100644 index 2548c09..0000000 --- a/solutions/src/main/java/pr2/threads/stack_heap/ThreadProblem.java +++ /dev/null @@ -1,32 +0,0 @@ -package pr2.threads.stack_heap; - -public class ThreadProblem { - - private int i = 0; - - public static void main(String[] args) { - new ThreadProblem().go(); - } - - public void go() { - new Thread(new Incrementer()).start(); - new Thread(new Incrementer()).start(); - new Thread(new Incrementer()).start(); - } - - private class Incrementer implements Runnable { - - private int j = 0; - - @Override - public void run() { - int k = 0; - - i++; - j++; - k++; - - System.out.printf("i=%d, j=%d, k=%d%n", i, j, k); - } - } -} diff --git a/solutions/src/main/java/pr2/threads/synchronize/Synchronizer.java b/solutions/src/main/java/pr2/threads/synchronize/Synchronizer.java deleted file mode 100644 index 6507ba5..0000000 --- a/solutions/src/main/java/pr2/threads/synchronize/Synchronizer.java +++ /dev/null @@ -1,24 +0,0 @@ -package pr2.threads.synchronize; - -public class Synchronizer { - - private int i = 0; - - public static void main(String[] args) { - - final Synchronizer s = new Synchronizer(); - - Runnable runner = () -> { - while (true) { - s.addAndPrint(); - } - }; - - new Thread(runner).start(); - new Thread(runner).start(); - } - - public synchronized void addAndPrint() { - System.out.println(i++); - } -} diff --git a/solutions/src/main/java/pr2/threads/timer/FakultaetTimer.java b/solutions/src/main/java/pr2/threads/timer/FakultaetTimer.java deleted file mode 100644 index a67d5fd..0000000 --- a/solutions/src/main/java/pr2/threads/timer/FakultaetTimer.java +++ /dev/null @@ -1,39 +0,0 @@ -/* (c) 2010 Thomas Smits */ -package pr2.threads.timer; - -import java.util.Timer; -import java.util.TimerTask; - -public class FakultaetTimer { - - private long fact(long n) { - return (n == 0 ? 1 : n * fact(n - 1)); - } - - public long[] calculate() { - - final long[] ergebnisse = new long[21]; - - class MyTask extends TimerTask { - - private final int pos; - - public MyTask(int pos) { - this.pos = pos; - } - - @Override - public void run() { - ergebnisse[pos] = fact(pos); - } - } - - Timer timer = new Timer(); - - for (int i = 0; i < ergebnisse.length; i++) { - timer.schedule(new MyTask(i), 0); - } - - return ergebnisse; - } -} diff --git a/solutions/src/main/java/pr2/threads/timer/Main.java b/solutions/src/main/java/pr2/threads/timer/Main.java deleted file mode 100644 index 0162793..0000000 --- a/solutions/src/main/java/pr2/threads/timer/Main.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.threads.timer; - -public class Main { - - public static void main(String[] args) { - FakultaetTimer ft = new FakultaetTimer(); - long[] result = ft.calculate(); - - for (int i = 0; i < result.length; i++) { - long ergebnis = result[i]; - System.out.printf("fact(%d) = %d%n", i, ergebnis); - } - } -} diff --git a/solutions/src/main/java/pr2/vererbung/finals/A.java b/solutions/src/main/java/pr2/vererbung/finals/A.java deleted file mode 100644 index a2c7933..0000000 --- a/solutions/src/main/java/pr2/vererbung/finals/A.java +++ /dev/null @@ -1,32 +0,0 @@ -package pr2.vererbung.finals; - -/** - * A-Klasse. - */ -public class A { - - /** - * Konstante für die Vorzeichenumkehr. - */ - public static final int KONSTANTE = 100; - - /** - * Addiert zwei Zahlen. Wenn das Ergebnis größer ist als - * der Wert von KONSTANTE, dann wird das - * Vorzeichen umgekehrt. - * - * @param a erster Wert - * @param b zweiter Wert - * @return Ergebnis - */ - public final int add(final int a, final int b) { - final int result = a + b; - - if (result > KONSTANTE) { - return result * -1; - } - else { - return result; - } - } -} diff --git a/solutions/src/main/java/pr2/vererbung/finals/B.java b/solutions/src/main/java/pr2/vererbung/finals/B.java deleted file mode 100644 index 7e3fb1c..0000000 --- a/solutions/src/main/java/pr2/vererbung/finals/B.java +++ /dev/null @@ -1,22 +0,0 @@ -package pr2.vererbung.finals; - -/** - * B-Klasse. - */ -public final class B extends A { - - /** - * Subtrahiert zwei Zahlen. Wenn das Ergebnis kleiner ist als - * der Wert von KONSTANTE, dann wird das - * Vorzeichen umgekehrt. - * - * @param a erster Wert - * @param b zweiter Wert - * @return Ergebnis - */ - public static int sub(final int a, final int b) { - final int result = a + b; - - return (result < KONSTANTE) ? (result * -1) : (result); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie1/Figur.java b/solutions/src/main/java/pr2/vererbung/geometrie1/Figur.java deleted file mode 100644 index 193626a..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie1/Figur.java +++ /dev/null @@ -1,14 +0,0 @@ -package pr2.vererbung.geometrie1; - -public class Figur { - - protected int flaeche; - - protected Figur() { - /* nichts zu tun */ - } - - public int getFlaeche() { - return flaeche; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie1/Main.java b/solutions/src/main/java/pr2/vererbung/geometrie1/Main.java deleted file mode 100644 index 803774b..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie1/Main.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.vererbung.geometrie1; - -public class Main { - - public static void main(String[] args) { - Figur f1 = new Rechteck(10, 10); - Figur f2 = new Rechteck(5, 10); - - System.out.println(f1.getFlaeche()); - System.out.println(f2.getFlaeche()); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie1/Rechteck.java b/solutions/src/main/java/pr2/vererbung/geometrie1/Rechteck.java deleted file mode 100644 index 3e5be9f..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie1/Rechteck.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.vererbung.geometrie1; - -public class Rechteck extends Figur { - - public Rechteck(int breite, int hoehe) { - flaeche = breite * hoehe; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie2/Figur.java b/solutions/src/main/java/pr2/vererbung/geometrie2/Figur.java deleted file mode 100644 index cc8cf39..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie2/Figur.java +++ /dev/null @@ -1,6 +0,0 @@ -package pr2.vererbung.geometrie2; - -public class Figur { - - private final int flaeche; - diff --git a/solutions/src/main/java/pr2/vererbung/geometrie2/Main.java b/solutions/src/main/java/pr2/vererbung/geometrie2/Main.java deleted file mode 100644 index bf3ee32..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie2/Main.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.vererbung.geometrie2; - -public class Main { - - public static void main(String[] args) { - Figur f1 = new Rechteck(10, 10); - Figur f2 = new Rechteck(5, 10); - - System.out.println(f1.getFlaeche()); - System.out.println(f2.getFlaeche()); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie2/Rechteck.java b/solutions/src/main/java/pr2/vererbung/geometrie2/Rechteck.java deleted file mode 100644 index edac2b5..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie2/Rechteck.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.vererbung.geometrie2; - - -public class Rechteck extends Figur { - - public Rechteck(int breite, int hoehe) { - super(breite * hoehe); - } diff --git a/solutions/src/main/java/pr2/vererbung/geometrie3/Dreieck.java b/solutions/src/main/java/pr2/vererbung/geometrie3/Dreieck.java deleted file mode 100644 index e878a60..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie3/Dreieck.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.vererbung.geometrie3; - -public class Dreieck extends Figur { - - public Dreieck(int grundseite, int hoehe) { - super(grundseite * hoehe / 2); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie3/Figur.java b/solutions/src/main/java/pr2/vererbung/geometrie3/Figur.java deleted file mode 100644 index 983f4ea..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie3/Figur.java +++ /dev/null @@ -1,19 +0,0 @@ -package pr2.vererbung.geometrie3; - -public class Figur { - - private int flaeche; - - protected Figur() { - /* leer */ - } - - protected Figur(int flaeche) { - this.flaeche = flaeche; - } - - public int getFlaeche() { - return flaeche; - } - -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie3/Gerade.java b/solutions/src/main/java/pr2/vererbung/geometrie3/Gerade.java deleted file mode 100644 index 11d1749..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie3/Gerade.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.vererbung.geometrie3; - -public class Gerade extends Figur { - - private final int laenge; - - public Gerade(int laenge) { - this.laenge = laenge; - } - - @Override - public String toString() { - return "Gerade{" - + "laenge=" + laenge - + '}'; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie3/Main.java b/solutions/src/main/java/pr2/vererbung/geometrie3/Main.java deleted file mode 100644 index ef073b9..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie3/Main.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.vererbung.geometrie3; - -public class Main { - - public static void main(String[] args) { - Figur f1 = new Gerade(10); - Figur f2 = new Gerade(5); - - System.out.println(f1.getFlaeche()); - System.out.println(f2.getFlaeche()); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie3/Quadrat.java b/solutions/src/main/java/pr2/vererbung/geometrie3/Quadrat.java deleted file mode 100644 index 1bd3232..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie3/Quadrat.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.vererbung.geometrie3; - -public class Quadrat extends Rechteck { - - public Quadrat(int seitenlaenge) { - super(seitenlaenge, seitenlaenge); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/geometrie3/Rechteck.java b/solutions/src/main/java/pr2/vererbung/geometrie3/Rechteck.java deleted file mode 100644 index a02354c..0000000 --- a/solutions/src/main/java/pr2/vererbung/geometrie3/Rechteck.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.vererbung.geometrie3; - -public class Rechteck extends Figur { - - public Rechteck(int breite, int hoehe) { - super(breite * hoehe); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java b/solutions/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java deleted file mode 100644 index 97b8477..0000000 --- a/solutions/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java +++ /dev/null @@ -1,47 +0,0 @@ -package pr2.vererbung.konstruktoren; - -/** - * Nachtelf aus der Allianz. - */ -public class Nachtelf extends Wesen { - - /** - * Standardmäßige Stärke der Fähigkeit Naturwiderstand. - */ - public static final int STANDARD_NATURWIDERSTAND = 5; - - /** - * Fähigkeit zum Widerstand gegen Naturmagie. - */ - private int naturwiderstand; - - /** - * Legt einen neuen Nachtelf an. - * - * @param name Name der Figur. - * @param naturwiderstand Stärke der Fähigkeit Naturwiderstand. - */ - public Nachtelf(String name, int naturwiderstand) { - super(name); - this.naturwiderstand = naturwiderstand; - } - - /** - * Legt einen neuen Nachtelf an. Die Stärke des Naturwiderstandes entspricht - * dem Standardwert. - * - * @param name Name der Figur. - */ - public Nachtelf(String name) { - this(name, STANDARD_NATURWIDERSTAND); - } - - /** - * Stärke des Naturwiderstandes. - * - * @return the naturwiderstand - */ - public int getNaturwiderstand() { - return naturwiderstand; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/konstruktoren/Untoter.java b/solutions/src/main/java/pr2/vererbung/konstruktoren/Untoter.java deleted file mode 100644 index acd5d9f..0000000 --- a/solutions/src/main/java/pr2/vererbung/konstruktoren/Untoter.java +++ /dev/null @@ -1,47 +0,0 @@ -package pr2.vererbung.konstruktoren; - -/** - * Untoter aus der Horde. - */ -public class Untoter extends Wesen { - - /** - * Standardmäßige Stärke der Fähigkeit zur Unterwasseratmung. - */ - public static final int STANDARD_UNTERWASSERATMUNG = 10; - - /** - * Fähigkeit zur Atmung unter Wasser. - */ - private int unterwasseratmung; - - /** - * Legt einen neuen Untoten an. - * - * @param name Name der Figur. - * @param unterwasseratmung Stärke der Fähigkeit zur Unterwasseratmung. - */ - public Untoter(String name, int unterwasseratmung) { - super(name); - this.unterwasseratmung = unterwasseratmung; - } - - /** - * Legt einen neuen Untoten an. Die Stärke der Unterwasseratmung entspricht - * dem Standardwert. - * - * @param name Name der Figur. - */ - public Untoter(String name) { - this(name, STANDARD_UNTERWASSERATMUNG); - } - - /** - * Fähigkeit zur Unterwasseratmnung. - * - * @return the Stärke der Fähigkeit. - */ - public int getUnterwasseratmung() { - return unterwasseratmung; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/konstruktoren/Wesen.java b/solutions/src/main/java/pr2/vererbung/konstruktoren/Wesen.java deleted file mode 100644 index 0287b62..0000000 --- a/solutions/src/main/java/pr2/vererbung/konstruktoren/Wesen.java +++ /dev/null @@ -1,30 +0,0 @@ -package pr2.vererbung.konstruktoren; - -/** - * Basisklasse für Spielfiguren. - */ -public class Wesen { - - /** - * Name der Spielfigur. - */ - private final String name; - - /** - * Legt eine neue Spielfigur an. - * - * @param name Name der Figur. - */ - public Wesen(String name) { - this.name = name; - } - - /** - * Gibt den Namen der Spielfigur zurück. - * - * @return Name der Spielfigur. - */ - public String getName() { - return name; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java b/solutions/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java deleted file mode 100644 index 3587cf9..0000000 --- a/solutions/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package pr2.vererbung.konstruktoren.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.konstruktoren.Nachtelf; -import pr2.vererbung.konstruktoren.Untoter; -import pr2.vererbung.konstruktoren.Wesen; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Test für die Aufgabe. - */ -public class WesenTest { - - /** - * Testet den Nachtelf. - */ - @Test - void testNachtelf() { - assertTrue(new Nachtelf("") instanceof Wesen, - "Nachtelf erbt nicht " + "von Wesen"); - - assertEquals(Nachtelf.STANDARD_NATURWIDERSTAND, - new Nachtelf("").getNaturwiderstand()); - - assertEquals(120, new Nachtelf("", 120).getNaturwiderstand()); - - assertEquals("Hugo", new Nachtelf("Hugo").getName()); - } - - /** - * Testet den Untoten. - */ - @Test - void testUntoten() { - assertTrue(new Untoter("") instanceof Wesen, - "Untoter erbt nicht von " + "Wesen"); - - assertEquals(Untoter.STANDARD_UNTERWASSERATMUNG, - new Untoter("").getUnterwasseratmung()); - - assertEquals(120, new Untoter("", 120).getUnterwasseratmung()); - - assertEquals("Hugo", new Untoter("Hugo").getName()); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/polymorphie/Affe.java b/solutions/src/main/java/pr2/vererbung/polymorphie/Affe.java deleted file mode 100644 index 612e4ee..0000000 --- a/solutions/src/main/java/pr2/vererbung/polymorphie/Affe.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.vererbung.polymorphie; - -/** - * Ein Affe im Zoo. - */ -public class Affe extends ZooTier { - - /** - * Legt einen neuen Affen an. - * - * @param name Name des Affen. - */ - public Affe(String name) { - super(name); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java b/solutions/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java deleted file mode 100644 index 96e6fb8..0000000 --- a/solutions/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.vererbung.polymorphie; - -/** - * Fütterung der Tiere. - */ -public class Futterstelle { - - /** - * Füttert das Tier. - * - * @param tier Tier, das gefüttert werden soll. - */ - public void gibFutter(ZooTier tier) { - tier.fuettern(); - } - -} diff --git a/solutions/src/main/java/pr2/vererbung/polymorphie/Giraffe.java b/solutions/src/main/java/pr2/vererbung/polymorphie/Giraffe.java deleted file mode 100644 index 1c4cf69..0000000 --- a/solutions/src/main/java/pr2/vererbung/polymorphie/Giraffe.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.vererbung.polymorphie; - -/** - * Eine Giraffe im Zoo. - */ -public class Giraffe extends ZooTier { - - /** - * Legt einen neue Giraffe an. - * - * @param name Name der Giraffe. - */ - public Giraffe(String name) { - super(name); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/polymorphie/Gorilla.java b/solutions/src/main/java/pr2/vererbung/polymorphie/Gorilla.java deleted file mode 100644 index fd6f23d..0000000 --- a/solutions/src/main/java/pr2/vererbung/polymorphie/Gorilla.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.vererbung.polymorphie; - -/** - * Ein Gorilla. - */ -public class Gorilla extends Affe { - - /** - * Legt einen neuen Gorilla an. - * - * @param name Name des Gorilla. - */ - public Gorilla(String name) { - super(name); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java b/solutions/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java deleted file mode 100644 index e205954..0000000 --- a/solutions/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java +++ /dev/null @@ -1,40 +0,0 @@ -package pr2.vererbung.polymorphie; - -/** - * Simulationsklasse. - */ -public final class ZooSimulation { - - /** - * Konstruktor. - */ - private ZooSimulation() { - // keine Objekte benötigt - } - - /** - * Main-Methode. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - Futterstelle futterstelle = new Futterstelle(); - - ZooTier[] tiere = {new Affe("Charlie"), new Gorilla("Buck"), - new Giraffe("Debbie")}; - - for (ZooTier tier : tiere) { - System.out.println(tier); - } - - System.out.println("Fütterung..."); - - for (ZooTier tier : tiere) { - futterstelle.gibFutter(tier); - } - - for (ZooTier tier : tiere) { - System.out.println(tier); - } - } -} diff --git a/solutions/src/main/java/pr2/vererbung/polymorphie/ZooTier.java b/solutions/src/main/java/pr2/vererbung/polymorphie/ZooTier.java deleted file mode 100644 index ff9edf9..0000000 --- a/solutions/src/main/java/pr2/vererbung/polymorphie/ZooTier.java +++ /dev/null @@ -1,41 +0,0 @@ -package pr2.vererbung.polymorphie; - -/** - * Ein Tier im Zoo. - */ -public class ZooTier { - - /** - * Name des Tiers. - */ - private final String name; - - /** - * Zeigt an, ob das Tier hungrig ist. - */ - private boolean hungrig = true; - - /** - * Legt ein neues Zootier an. - * - * @param name Name des Tiers - */ - public ZooTier(String name) { - this.name = name; - } - - /** - * Gibt dem Tier futter. - */ - public void fuettern() { - hungrig = false; - } - - /** - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return name + ": Ich bin " + (hungrig ? "hungrig" : "satt") + "!"; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java b/solutions/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java deleted file mode 100644 index 0436a18..0000000 --- a/solutions/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java +++ /dev/null @@ -1,12 +0,0 @@ -package pr2.vererbung.singleton_einfach; - -public final class Singleton { - - private static final Singleton INSTANCE = new Singleton(); - - private Singleton() { /* leer */ } - - public static Singleton getInstance() { - return INSTANCE; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/statics/Spiel.java b/solutions/src/main/java/pr2/vererbung/statics/Spiel.java deleted file mode 100644 index 5959cf4..0000000 --- a/solutions/src/main/java/pr2/vererbung/statics/Spiel.java +++ /dev/null @@ -1,35 +0,0 @@ -package pr2.vererbung.statics; - -/** - * Spiel mit den Würfeln. - */ -public final class Spiel { - - /** - * Keine Objekte. - */ - private Spiel() { - // leer - } - - /** - * Programm-Einstieg. - * - * @param args Kommandozeilen-Argumente. - */ - public static void main(String[] args) { - Wuerfel wuerfel1 = new Wuerfel(); - Wuerfel wuerfel2 = new Wuerfel(); - - // 1000 Mal würfeln - for (int i = 0; i < 1000; i++) { - wuerfel1.wuerfele(); - wuerfel2.wuerfele(); - } - - // Statistik ausgeben - System.out.println("Statistik für alle Würfel"); - System.out.println(Wuerfel.statistik()); - System.out.println(); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/statics/Wuerfel.java b/solutions/src/main/java/pr2/vererbung/statics/Wuerfel.java deleted file mode 100644 index 31ee54c..0000000 --- a/solutions/src/main/java/pr2/vererbung/statics/Wuerfel.java +++ /dev/null @@ -1,53 +0,0 @@ -package pr2.vererbung.statics; - -import java.util.Random; - -/** - * Ein einfacher Würfel. - */ -public class Wuerfel { - - /** Häufigkeit der Werte. */ - private static final int[] HAEUFIGKEIT = new int[6]; - - /** Anzahl der Würfe mit dem Würfel. */ - private static int wuerfe = 0; - - /** Zufallsgenerator. */ - private final Random random = new Random(); - - /** - * Bestimmt den nächsten Wurf. - * - * @return der Wurf. - */ - public int wuerfele() { - int wert = random.nextInt(6); - HAEUFIGKEIT[wert]++; - wuerfe++; - return wert + 1; - } - - /** - * Gibt die Häufigkeit der Würfe zurück. - * - * @return die Statistik mit der Häufigkeit. - */ - public static String statistik() { - StringBuilder result = new StringBuilder(); - - for (int i = 0; i < HAEUFIGKEIT.length; i++) { - result.append(i + 1) - .append(": ") - .append(String.format("%.2f %%", - ((double) HAEUFIGKEIT[i] / wuerfe) * 100)) - .append("\n"); - } - - result.append("Summe: ") - .append(wuerfe) - .append("\n"); - - return result.toString(); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java b/solutions/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java deleted file mode 100644 index 7f0bfa1..0000000 --- a/solutions/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java +++ /dev/null @@ -1,20 +0,0 @@ -package pr2.vererbung.ueberladen_summe; - -public class Summator { - - public int sum(int a, int b) { - return a + b; - } - - public int sum(int a, int b, int c) { - return a + b + c; - } - - public int sum(int a, int b, int c, int d) { - return a + b + c + d; - } - - public int sum(int a, int b, int c, int d, int e) { - return a + b + c + d + e; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java b/solutions/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java deleted file mode 100644 index d20882e..0000000 --- a/solutions/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package pr2.vererbung.ueberladen_summe.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.ueberladen_summe.Summator; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SummatorTest { - - @Test - void testSum() { - Summator s = new Summator(); - assertEquals(3, s.sum(1, 2)); - assertEquals(1, s.sum(-1, 2)); - assertEquals(6, s.sum(1, 2, 3)); - assertEquals(0, s.sum(1, 2, -3)); - assertEquals(10, s.sum(1, 2, 3, 4)); - assertEquals(2, s.sum(1, 2, 3, -4)); - assertEquals(15, s.sum(1, 2, 3, 4, 5)); - assertEquals(5, s.sum(1, 2, 3, 4, -5)); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java b/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java deleted file mode 100644 index fe89d11..0000000 --- a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java +++ /dev/null @@ -1,9 +0,0 @@ -package pr2.vererbung.ueberschreiben_lebewesen; - -public class Amoebe extends Lebewesen { - - @Override - public void bewegen() { - System.out.println("Schleimen"); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java b/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java deleted file mode 100644 index 7056594..0000000 --- a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java +++ /dev/null @@ -1,13 +0,0 @@ -package pr2.vererbung.ueberschreiben_lebewesen; - -public class Dackel extends Lebewesen { - - @Override - public void bewegen() { - System.out.println("Auf kurzen Beinen vorwärts wackeln"); - } - - public void bellen() { - System.out.println("Wau wau wau"); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java b/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java deleted file mode 100644 index 85ebef2..0000000 --- a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java +++ /dev/null @@ -1,8 +0,0 @@ -package pr2.vererbung.ueberschreiben_lebewesen; - -public class Lebewesen { - - public void bewegen() { - /* nichts machen */ - } -} diff --git a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java b/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java deleted file mode 100644 index e535a17..0000000 --- a/solutions/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.vererbung.ueberschreiben_lebewesen; - -public class Main { - - public static void main(String[] args) { - Lebewesen l1 = new Dackel(); - Lebewesen l2 = new Amoebe(); - - l1.bewegen(); - l2.bewegen(); - - if (l1 instanceof Dackel) { - ((Dackel) l1).bellen(); - } - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vararg_summe/Summator.java b/solutions/src/main/java/pr2/vererbung/vararg_summe/Summator.java deleted file mode 100644 index 6457e2a..0000000 --- a/solutions/src/main/java/pr2/vererbung/vararg_summe/Summator.java +++ /dev/null @@ -1,22 +0,0 @@ -package pr2.vererbung.vararg_summe; - -public class Summator { - - public int sum(int a, int b) { - return a + b; - } - - public int sum(int a, int b, int c) { - return a + b + c; - } - - public int sum(int a, int b, int c, int... as) { - int sum = a + b + c; - - for (int i : as) { - sum += i; - } - - return sum; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java b/solutions/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java deleted file mode 100644 index 93aba84..0000000 --- a/solutions/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package pr2.vererbung.vararg_summe.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.vararg_summe.Summator; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SummatorTest { - - @Test - void testSum() { - Summator s = new Summator(); - assertEquals(3, s.sum(1, 2)); - assertEquals(1, s.sum(-1, 2)); - assertEquals(6, s.sum(1, 2, 3)); - assertEquals(0, s.sum(1, 2, -3)); - assertEquals(10, s.sum(1, 2, 3, 4)); - assertEquals(2, s.sum(1, 2, 3, -4)); - assertEquals(15, s.sum(1, 2, 3, 4, 5)); - assertEquals(5, s.sum(1, 2, 3, 4, -5)); - assertEquals(36, s.sum(1, 2, 3, 4, 5, 6, 7, 8)); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java b/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java deleted file mode 100644 index 3e2c61c..0000000 --- a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.vererbung.vererbung_geometrie; - -/** - * Ein Dreieck. - */ -public class Dreieck extends Figur { - - /** - * Erzeugt ein neues Dreieck mit den gegebenen Daten. - * - * @param grundseite Grundseite des Dreiecks. - * @param hoehe Höhe des Dreiecks. - */ - public Dreieck(double grundseite, double hoehe) { - super(grundseite * hoehe / 2); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java b/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java deleted file mode 100644 index ebe5383..0000000 --- a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java +++ /dev/null @@ -1,37 +0,0 @@ -package pr2.vererbung.vererbung_geometrie; - -/** - * Basisklasse für geometrische Formen. - */ -public class Figur { - - /** - * Fläche der Figur. - */ - private double flaeche; - - /** - * Legt eine neue Figur mit der Fläche 0 an. - */ - protected Figur() { - /* leer */ - } - - /** - * Legt eine neue Figur mit der gegebenen Fläche an. - * - * @param flaeche Fläche der Figur. - */ - protected Figur(double flaeche) { - this.flaeche = flaeche; - } - - /** - * Liefert die Fläche der Figur. - * - * @return die Fläche. - */ - public double getFlaeche() { - return flaeche; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java b/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java deleted file mode 100644 index a8af5fd..0000000 --- a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java +++ /dev/null @@ -1,31 +0,0 @@ -package pr2.vererbung.vererbung_geometrie; - -/** - * Eine Gerade. - */ -public class Gerade extends Figur { - - /** - * Länge der Geraden. - */ - private double laenge; - - /** - * Legt eine neue Gerade mit der gegebenen Länge an. - * - * @param laenge Länge der Geraden. - */ - public Gerade(double laenge) { - super(); - this.laenge = laenge; - } - - /** - * Liefert die Länge der Geraden. - * - * @return die Länge. - */ - public double getLaenge() { - return laenge; - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java b/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java deleted file mode 100644 index 5e0626f..0000000 --- a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.vererbung.vererbung_geometrie; - -/** - * Qudrat. - */ -public class Quadrat extends Rechteck { //*** replace(public class Quadrat {) - - /** - * Legt ein neues Quadrat an. - * - * @param seitenlaenge Länge der Seiten des Quadrates. - */ - public Quadrat(double seitenlaenge) { - super(seitenlaenge, seitenlaenge); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java b/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java deleted file mode 100644 index af82bef..0000000 --- a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java +++ /dev/null @@ -1,17 +0,0 @@ -package pr2.vererbung.vererbung_geometrie; - -/** - * Rechteck. - */ -public class Rechteck extends Figur { - - /** - * Legt ein neues Rechteck an. - * - * @param breite Breite. - * @param hoehe Höhe. - */ - public Rechteck(double breite, double hoehe) { - super(breite * hoehe); - } -} diff --git a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java b/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java deleted file mode 100644 index 446402d..0000000 --- a/solutions/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package pr2.vererbung.vererbung_geometrie.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.vererbung_geometrie.Dreieck; -import pr2.vererbung.vererbung_geometrie.Gerade; -import pr2.vererbung.vererbung_geometrie.Quadrat; -import pr2.vererbung.vererbung_geometrie.Rechteck; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Tests für die Figuren. - */ -public class FigurenTest { - - private static final double PRECISION = 0.0001; - - /** - * Rechteck. - */ - @Test - void testReckteck() { - Rechteck r1 = new Rechteck(4.0, 5.0); - Rechteck r2 = new Rechteck(0.0, 3.0); - assertEquals(20.0, r1.getFlaeche(), PRECISION); - assertEquals(0.0, r2.getFlaeche(), PRECISION); - } - - /** - * Dreieck. - */ - @Test - void testDreieck() { - Dreieck d1 = new Dreieck(6.0, 3.5); - assertEquals(10.5, d1.getFlaeche(), PRECISION); - } - - /** - * Gerade. - */ - @Test - void testGerade() { - Gerade g1 = new Gerade(8.0); - assertEquals(8.0, g1.getLaenge(), PRECISION); - assertEquals(0.0, g1.getFlaeche(), PRECISION); - - g1 = new Gerade(0.0); - assertEquals(0.0, g1.getLaenge(), PRECISION); - assertEquals(0.0, g1.getFlaeche(), PRECISION); - } - - /** - * Quadrat. - */ - @Test - void testQuadrat() { - Quadrat q1 = new Quadrat(3.0); - assertEquals(9.0, q1.getFlaeche(), PRECISION); - - Rechteck r1 = new Rechteck(5.0, 5.0); - Quadrat q2 = new Quadrat(5.0); - assertEquals(r1.getFlaeche(), q2.getFlaeche(), PRECISION); - - q1 = new Quadrat(0.0); - assertEquals(0.0, q1.getFlaeche(), PRECISION); - } -} diff --git a/sources/pmd.xml b/sources/pmd.xml index 97e1b5f..8bc3b38 100644 --- a/sources/pmd.xml +++ b/sources/pmd.xml @@ -1,2253 +1,60 @@ - + -Rules which enforce generally accepted best practices. + My custom rules - - - - -Instantiation by way of private constructors from outside the constructor's class often causes the -generation of an accessor. A factory method, or non-privatization of the constructor can eliminate this -situation. The generated class file is actually an interface. It gives the accessing class the ability -to invoke a new hidden package scope constructor that takes the interface as a supplementary parameter. -This turns a private constructor effectively into one with package scope, and is challenging to discern. - -_Note:_ This rule is only executed for Java 10 or lower. -Since Java 11, [JEP 181: Nest-Based Access Control](https://openjdk.org/jeps/181) has been implemented. This -means that in Java 11 and above accessor classes are not generated anymore. - - 3 - - - - - - - - - - Declaring a MessageDigest instance as a field make this instance directly available to multiple threads. - Such sharing of MessageDigest instances should be avoided if possible since it leads to wrong results - if the access is not synchronized correctly. - Just create a new instance and use it locally, where you need it. - Creating a new instance is easier than synchronizing access to a shared instance. - - 3 - - - - - - - - - - - - - - - -Reassigning exception variables caught in a catch statement should be avoided because of: - -1) If it is needed, multi catch can be easily added and code will still compile. - -2) Following the principle of least surprise we want to make sure that a variable caught in a catch statement -is always the one thrown in a try block. - - 3 - - - - - -Reassigning loop variables can lead to hard-to-find bugs. Prevent or limit how these variables can be changed. - -In foreach-loops, configured by the `foreachReassign` property: -- `deny`: Report any reassignment of the loop variable in the loop body. _This is the default._ -- `allow`: Don't check the loop variable. -- `firstOnly`: Report any reassignments of the loop variable, except as the first statement in the loop body. - _This is useful if some kind of normalization or clean-up of the value before using is permitted, but any other change of the variable is not._ - -In for-loops, configured by the `forReassign` property: -- `deny`: Report any reassignment of the control variable in the loop body. _This is the default._ -- `allow`: Don't check the control variable. -- `skip`: Report any reassignments of the control variable, except conditional increments/decrements (`++`, `--`, `+=`, `-=`). - _This prevents accidental reassignments or unconditional increments of the control variable._ - - 3 - - - - - - - - - - - -Reassigning values to incoming parameters of a method or constructor is not recommended, as this can -make the code more difficult to understand. The code is often read with the assumption that parameter values -don't change and an assignment violates therefore the principle of least astonishment. This is especially a -problem if the parameter is documented e.g. in the method's javadoc and the new content differs from the original -documented content. - -Use temporary local variables instead. This allows you to assign a new name, which makes the code better -understandable. - -Note that this rule considers both methods and constructors. If there are multiple assignments for a formal -parameter, then only the first assignment is reported. - - 2 - - - - - - - -StringBuffers/StringBuilders can grow considerably, and so may become a source of memory leaks -if held within objects with long lifetimes. - - 3 - - - - - - - - - - - - - - - -Application with hard-coded IP addresses can become impossible to deploy in some cases. -Externalizing IP adresses is preferable. - - 3 - - - - - - - -Always check the return values of navigation methods (next, previous, first, last) of a ResultSet. -If the value return is 'false', it should be handled properly. - - 3 - - - - - - - -Avoid constants in interfaces. Interfaces should define types, constants are implementation details -better placed in classes or enums. See Effective Java, item 19. - - 3 - - - - - - - - - - - - - - - - -By convention, the default label should be the last label in a switch statement. - - 3 - - - - - - - - - - - - - - - - Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly - generates a new .class file, and the object holds a strong reference to the enclosing object. For those - reasons, it is preferable to initialize the object normally, even though it's verbose. - - This rule counts any anonymous class which only has a single initializer as an instance of double-brace - initialization. There is currently no way to find out whether a method called in the initializer is not - accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. - - 3 - - - - - - - - - (){{ - add("a"); - add("b"); - add("c"); -}}; - -// the better way is to not create an anonymous class: -List a = new ArrayList<>(); -a.add("a"); -a.add("b"); -a.add("c"); -return a; -]]> - - - - - -Reports loops that can be safely replaced with the foreach syntax. The rule considers loops over -lists, arrays and iterators. A loop is safe to replace if it only uses the index variable to -access an element of the list or array, only has one update statement, and loops through *every* -element of the list or array left to right. - - 3 - - l) { - for (int i = 0; i < l.size(); i++) { // pre Java 1.5 - System.out.println(l.get(i)); - } - - for (String s : l) { // post Java 1.5 - System.out.println(s); - } - } -} -]]> - - - - - -Whenever using a log level, one should check if the loglevel is actually enabled, or -otherwise skip the associate String creation and manipulation. - -An alternative to checking the log level are substituting parameters, formatters or lazy logging -with lambdas. The available alternatives depend on the actual logging framework. - - 2 - - calculateExpensiveLoggingText()); -]]> - - - - - -In JUnit 3, test suites are indicated by the suite() method. In JUnit 4, suites are indicated -through the @RunWith(Suite.class) annotation. - - 3 - - - - - - - - - - - - - - - -In JUnit 3, the tearDown method was used to clean up all data entities required in running tests. -JUnit 4 skips the tearDown method and executes all methods annotated with @After after running each test. -JUnit 5 introduced @AfterEach and @AfterAll annotations to execute methods after each test or after all tests in the class, respectively. - - 3 - - - - - - - - - - - - - - - -In JUnit 3, the setUp method was used to set up all data entities required in running tests. -JUnit 4 skips the setUp method and executes all methods annotated with @Before before all tests. -JUnit 5 introduced @BeforeEach and @BeforeAll annotations to execute methods before each test or before all tests in the class, respectively. - - 3 - - - - - - - - - - - - - - - -In JUnit 3, the framework executed all methods which started with the word test as a unit test. -In JUnit 4, only methods annotated with the @Test annotation are executed. -In JUnit 5, one of the following annotations should be used for tests: @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest. - - 3 - - - - - - - - - - - - - - - - - - - - -In JUnit4, use the @Test(expected) annotation to denote tests that should throw exceptions. - - 3 - - - - - - - - Position literals first in all String comparisons, if the second argument is null then NullPointerExceptions - can be avoided, they will just return false. Note that switching literal positions for compareTo and - compareToIgnoreCase may change the result, see examples. - - 3 - - 0); // should be: "bar".compareTo(x) < 0 - } - boolean bar(String x) { - return (x.compareToIgnoreCase("bar") > 0); // should be: "bar".compareToIgnoreCase(x) < 0 - } - boolean bar(String x) { - return x.contentEquals("bar"); // should be "bar".contentEquals(x) - } -} -]]> - - - - - -The use of implementation types (i.e., HashSet) as object references limits your ability to use alternate -implementations in the future as requirements change. Whenever available, referencing objects -by their interface types (i.e, Set) provides much more flexibility. - - 3 - - list = new ArrayList<>(); - - public HashSet getFoo() { - return new HashSet(); - } - - // preferred approach - private List list = new ArrayList<>(); - - public Set getFoo() { - return new HashSet(); - } -} -]]> - - - - - -Exposing internal arrays to the caller violates object encapsulation since elements can be -removed or replaced outside of the object that owns it. It is safer to return a copy of the array. - - 3 - - - - - - - - - Annotating overridden methods with @Override ensures at compile time that - the method really overrides one, which helps refactoring and clarifies intent. - - 3 - - - - - - - -Java allows the use of several variables declaration of the same type on one line. However, it -can lead to quite messy code. This rule looks for several declarations on the same line. - - 4 - - - - - 1] - [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] -| -//FieldDeclaration - [count(VariableDeclarator) > 1] - [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] -]]> - - - - - - - - - - - - -Position literals first in comparisons, if the second argument is null then NullPointerExceptions -can be avoided, they will just return false. - -This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. - - 3 - - - - - - - -Position literals first in comparisons, if the second argument is null then NullPointerExceptions -can be avoided, they will just return false. - -This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. - - 3 - - - - - - - - Reports usages of primitive wrapper constructors. They are deprecated - since Java 9 and should not be used. Even before Java 9, they can - be replaced with usage of the corresponding static `valueOf` factory method - (which may be automatically inserted by the compiler since Java 1.5). - This has the advantage that it may reuse common instances instead of creating - a new instance each time. - - Note that for `Boolean`, the named constants `Boolean.TRUE` and `Boolean.FALSE` - are preferred instead of `Boolean.valueOf`. - - 3 - - - - - - - - -Consider replacing Enumeration usages with the newer java.util.Iterator - - 3 - - - - - - - - - - - - - - - -Consider replacing Hashtable usage with the newer java.util.Map if thread safety is not required. - - 3 - - - - //Type/ReferenceType/ClassOrInterfaceType[@Image='Hashtable'] - - - - - - - - - -Consider replacing Vector usages with the newer java.util.ArrayList if expensive thread-safe operations are not required. - - 3 - - - - //Type/ReferenceType/ClassOrInterfaceType[@Image='Vector'] - - - - - - - - - - - Switch statements should be exhaustive, to make their control flow - easier to follow. This can be achieved by adding a `default` case, or, - if the switch is on an enum type, by ensuring there is one switch branch - for each enum constant. - - 3 - - - - - - - - - - - - - - - Reports assignments to variables that are never used before the variable is overwritten, - or goes out of scope. Unused assignments are those for which - 1. The variable is never read after the assignment, or - 2. The assigned value is always overwritten by other assignments before the next read of - the variable. - - The rule doesn't consider assignments to fields except for those of `this` in a constructor, - or static fields of the current class in static initializers. - - The rule may be suppressed with the standard `@SuppressWarnings("unused")` tag. - - The rule subsumes {% rule "UnusedLocalVariable" %}, and {% rule "UnusedFormalParameter" %}. - Those violations are filtered - out by default, in case you already have enabled those rules, but may be enabled with the property - `reportUnusedVariables`. Variables whose name starts with `ignored` or `unused` are filtered out, as - is standard practice for exceptions. - - Limitations: - * The rule currently cannot know which method calls throw exceptions, or which exceptions they throw. - In the body of a try block, every method or constructor call is assumed to throw. This may cause false-negatives. - The only other language construct that is assumed to throw is the `throw` statement, in particular, - things like `assert` statements, or NullPointerExceptions on dereference are ignored. - * The rule cannot resolve assignments across constructors, when they're called with the special - `this(...)` syntax. This may cause false-negatives. - - Both of those limitations may be partly relaxed in PMD 7. - - 3 - - - - - - - - - - - - - - - - -Reports parameters of methods and constructors that are not referenced them in the method body. -Parameters whose name starts with `ignored` or `unused` are filtered out. - -Removing unused formal parameters from public methods could cause a ripple effect through the code base. -Hence, by default, this rule only considers private methods. To include non-private methods, set the -`checkAll` property to `true`. - - - 3 - - - - - - - -Reports import statements that are not used within the file. This also reports -duplicate imports, and imports from the same package. The simplest fix is just -to delete those imports. - -This rule is deprecated since PMD 6.34.0. Use the rule {% rule "java/codestyle/UnnecessaryImport" %} -from category codestyle instead. - - 4 - - - - - - - -Detects when a local variable is declared and/or assigned, but not used. -Variables whose name starts with `ignored` or `unused` are filtered out. - - 3 - - - - - - - -Detects when a private field is declared and/or assigned a value, but not used. - -Since PMD 6.50.0 private fields are ignored, if the fields are annotated with any annotation or the -enclosing class has any annotation. Annotations often enable a framework (such as dependency injection, mocking -or e.g. Lombok) which use the fields by reflection or other means. This usage can't be detected by static code analysis. -Previously these frameworks where explicitly allowed by listing their annotations in the property -"ignoredAnnotations", but that turned out to be prone of false positive for any not explicitly considered framework. - - 3 - - - - - - - -Unused Private Method detects when a private method is declared but is unused. - - 3 - - - - - - - -This rule detects JUnit assertions in object references equality. These assertions should be made by -more specific methods, like assertNull, assertNotNull. - -Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. - - 3 - - - - - - - - - - - - - - - -When asserting a value is the same as a literal or Boxed boolean, use assertTrue/assertFalse, instead of assertEquals. - -Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. - - 3 - - - - - - - - - - - - - - - -The isEmpty() method on java.util.Collection is provided to determine if a collection has any elements. -Comparing the value of size() to 0 does not convey intent as well as the isEmpty() method. - - 3 - - - - - - - -Starting with Java 7, StandardCharsets provides constants for common Charset objects, such as UTF-8. -Using the constants is less error prone, and can provide a small performance advantage compared to `Charset.forName(...)` -since no scan across the internal `Charset` caches is needed. - - 3 - - - - - - - - - - - - - - - - - -`do {} while (true);` requires reading the end of the statement before it is -apparent that it loops forever, whereas `while (true) {}` is easier to understand. - -`do {} while (false);` is redundant, and if an inner variable scope is required, -a block `{}` is sufficient. - -`while (false) {}` will never execute the block and can be removed in its entirety. - - 3 - - - -= 1]] -| -(: while loops with conditional and'ed boolean literals, maybe parenthesized :) -//WhileStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) - (: at least one false literal :) - [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1]] -| -(: do-while loops with conditional or'ed boolean literals, maybe parenthesized :) -//DoStatement[Expression/(InclusiveOrExpression|ConditionalOrExpression|(PrimaryExpression/PrimaryPrefix/Expression/(InclusiveOrExpression|ConditionalOrExpression))) - [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral) = 2]] -| -(: do-while loops with conditional and'ed boolean literals, maybe parenthesized :) -//DoStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) - (: at least one false literal :) - [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1 - (: or two true literals (e.g. true & true) :) - or count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = true()]) = 2]] -]]> - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pom.xml b/sources/pom.xml index 7d56871..11cbea7 100644 --- a/sources/pom.xml +++ b/sources/pom.xml @@ -11,21 +11,25 @@ UTF-8 - 17 - 17 - 5.9.1 - 1.9.1 + 23 + 23 + 5.12.2 + 1.12.2 + 7.13.0 + jitpack.io https://jitpack.io + install ${basedir}/target ${project.artifactId}-${project.version} + maven-compiler-plugin @@ -33,12 +37,16 @@ maven-surefire-plugin - 3.0.0-M7 + 3.5.2 + + + maven-failsafe-plugin + 3.5.2 org.apache.maven.plugins maven-checkstyle-plugin - 3.2.0 + 3.6.0 com.puppycrawl.tools @@ -65,7 +73,29 @@ org.apache.maven.plugins maven-pmd-plugin - 3.19.0 + 3.26.0 + + + net.sourceforge.pmd + pmd-core + ${pmdVersion} + + + net.sourceforge.pmd + pmd-java + ${pmdVersion} + + + net.sourceforge.pmd + pmd-javascript + ${pmdVersion} + + + net.sourceforge.pmd + pmd-jsp + ${pmdVersion} + + ./pmd.xml @@ -84,6 +114,7 @@ + com.github.thomsmits - game-framework + game-framework v1.0 @@ -117,11 +148,6 @@ junit-platform-suite ${junit.platform.version} - - org.junit.vintage - junit-vintage-engine - 4.12.0-M4 - org.jfree jfreechart diff --git a/sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java b/sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java deleted file mode 100644 index 7abca23..0000000 --- a/sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package pr2.collections.iterator.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.iterator.SimpleStack; - -import java.util.Iterator; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Test für den Stack. - */ -public class SimpleStackTest { - - /** - * Testet den Stack an sich. - */ - @Test - void testStack() { - SimpleStack s = new SimpleStack<>(10); - s.push("A"); - s.push("B"); - s.push("C"); - s.push("D"); - assertEquals("D", s.peek()); - assertEquals("D", s.pop()); - assertEquals("C", s.pop()); - assertEquals("B", s.pop()); - s.push("A2"); - s.push("A3"); - assertEquals("A3", s.peek()); - assertEquals("A3", s.pop()); - assertEquals("A2", s.pop()); - assertEquals("A", s.pop()); - } - -// TODO: Einkommentieren -// -// /** -// * Testet den Iterator. -// */ -// @Test -// void testIterator() { -// SimpleStack s = new SimpleStack<>(10); -// s.push("A"); -// s.push("B"); -// s.push("C"); -// s.push("D"); -// -// String[] result = new String[5]; -// int count = 0; -// -// for (String string : s) { -// result[count++] = string; -// } -// -// assertEquals("D", s.peek()); -// -// assertEquals("D", result[0]); -// assertEquals("C", result[1]); -// assertEquals("B", result[2]); -// assertEquals("A", result[3]); -// -// s.push("E"); -// -// Iterator it = s.iterator(); -// -// count = 0; -// while (it.hasNext()) { -// result[count++] = it.next(); -// } -// -// assertEquals("E", result[0]); -// assertEquals("D", result[1]); -// assertEquals("C", result[2]); -// assertEquals("B", result[3]); -// assertEquals("A", result[4]); -// -// assertFalse(it.hasNext()); -// -// it = s.iterator(); -// -// assertTrue(it.hasNext()); -// } -} diff --git a/sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java b/sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java deleted file mode 100644 index efc0c5e..0000000 --- a/sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.collections.reverser.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.reverser.Reverser; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class ReverserTest { - - @Test - void testReverser() { - // TODO: Reverser testen - } - -} diff --git a/sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java b/sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java deleted file mode 100644 index 94f7da4..0000000 --- a/sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.collections.reverser_generic.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.reverser_generic.Reverser; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class ReverserTest { - - @Test - void testReverser() { - // TODO: Reverser testen - } - -} diff --git a/sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java b/sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java deleted file mode 100644 index a2c30f2..0000000 --- a/sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package pr2.collections.sortieren.test; - -import org.junit.jupiter.api.Test; -import pr2.collections.sortieren.Sorter; -import pr2.collections.sortieren.Sorter.SortOrder; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - - -/** - * Test für die Sortierung. - */ -public class SorterTest { - - private static final String[] DATA = - {"aaron", "ALFONS", "bond", "BerND", "henry", "Hugo"}; - - /** - * Testet die Sortierung: aufsteigend. - */ - @Test - void testAscendingSorting() { - - String[] asc = DATA.clone(); - - Sorter.sort(asc, SortOrder.ASCENDING); - - assertArrayEquals( - new String[] {"ALFONS", "BerND", "Hugo", "aaron", "bond", - "henry"}, asc); - } - - /** - * Testet die Sortierung: Absteigend. - */ - @Test - void testDescendingSorting() { - - String[] desc = DATA.clone(); - Sorter.sort(desc, SortOrder.DESCENDING); - - assertArrayEquals( - new String[] {"henry", "bond", "aaron", "Hugo", "BerND", - "ALFONS"}, desc); - } - - /** - * Testet die Sortierung: Aufsteigend, CI. - */ - @Test - void testAscendingCISorting() { - - String[] ascCI = DATA.clone(); - Sorter.sort(ascCI, SortOrder.ASCENDING_CASE_INSENSITIVE); - - assertArrayEquals( - new String[] {"aaron", "ALFONS", "BerND", "bond", "henry", - "Hugo"}, ascCI); - } - - /** - * Testet die Sortierung: Absteigend, CI. - */ - @Test - void testDescendingCISorting() { - - String[] descCI = DATA.clone(); - - Sorter.sort(descCI, SortOrder.DESCENDING_CASE_INSENSITIVE); - - assertArrayEquals( - new String[] {"Hugo", "henry", "bond", "BerND", "ALFONS", - "aaron"}, descCI); - } -} diff --git a/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java b/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java deleted file mode 100644 index af7a80c..0000000 --- a/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package pr2.enums.eigene.test; - -import org.junit.jupiter.api.Test; -import pr2.enums.eigene.Wuerfel; - - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test für die Würfel. - */ -public class WuerfelTest { - - /** - * Anzahl der Durchläufe (Gesetz der großen Zahl!). - */ - private static final int RUNS = 10000000; - - - @Test - void testFairnessD4() { - internalTestFairness(new Wuerfel(Wuerfel.D4), 2.5); - } - - @Test - void testFairnessD6() { - internalTestFairness(new Wuerfel(Wuerfel.D6), 3.5); - } - - @Test - void testFairnessD8() { - internalTestFairness(new Wuerfel(Wuerfel.D8), 4.5); - } - - @Test - void testFairnessD10() { - internalTestFairness(new Wuerfel(Wuerfel.D10), 5.5); - } - - @Test - void testFairnessD12() { - internalTestFairness(new Wuerfel(Wuerfel.D12), 6.5); - } - - /** - * Interne Hilfsmethode, um die Fairness zu testen. - * - * @param w der zu testende Wuerfel. - * @param expected Erwartungswert. - */ - private void internalTestFairness(Wuerfel w, double expected) { - long sum = 0; - - for (int i = 0; i < RUNS; i++) { - sum += w.roll(); - } - double average = (double) sum / (double) RUNS; - assertEquals(expected, average, 0.1); - } -} diff --git a/sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java deleted file mode 100644 index a821a0b..0000000 --- a/sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package pr2.exceptions.ausnahmen_testen.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.exceptions.ausnahmen_testen.CrypterCaesar; -import pr2.exceptions.ausnahmen_testen.IllegalKeyException; -import pr2.exceptions.ausnahmen_testen.IllegalMessageException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Testklasse für die Verschlüsselung. - */ -public class CaesarTest { - - // TODO: Tests für die Ausnahmen hinzufügen - - /** - * Testet die Verschlüsselung an sich. - * - * @throws IllegalMessageException Wird geworfen, wenn die - * Nachricht ungültig ist. - * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel - * ungültig ist. - */ - @Test - void testCaesar() - throws IllegalKeyException, IllegalMessageException { - String klarText = "KATHARGOMUSSFALLEN"; - CrypterCaesar c = new CrypterCaesar(); - assertEquals(klarText, c.decrypt("C", c.encrypt("C", klarText))); - assertEquals("FDHVDU", c.encrypt("C", "CAESAR")); - assertEquals(klarText, c.encrypt("Z", klarText)); - } -} diff --git a/sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java deleted file mode 100644 index 66dd5e0..0000000 --- a/sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package pr2.exceptions.eigene_ausnahme.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.exceptions.eigene_ausnahme.Fuse; -import pr2.exceptions.eigene_ausnahme.FuseTrippedException; -import pr2.exceptions.eigene_ausnahme.IllegalCurrentException; - -/** - * Testet die Sicherung. - */ -public class FuseTest { - -// TODO: Quellcode wieder einkommentieren -// -// /** -// * Testet die Erzeugung von Sicherungen mit gültigen Werten. -// * -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testCreationValid() throws IllegalCurrentException { -// new Fuse(Fuse.A16); -// new Fuse(Fuse.A25); -// new Fuse(Fuse.A32); -// } -// -// /** -// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. -// * -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testCreationValid1() throws IllegalCurrentException { -// Assertions.assertThrows(IllegalCurrentException.class, () -> { -// new Fuse(15); -// }); -// } -// -// /** -// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. -// * -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testCreationValid2() throws IllegalCurrentException { -// Assertions.assertThrows(IllegalCurrentException.class, () -> { -// new Fuse(-1); -// }); -// } -// -// /** -// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. -// * -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testCreationValid3() throws IllegalCurrentException { -// Assertions.assertThrows(IllegalCurrentException.class, () -> { -// new Fuse(0); -// }); -// } -// -// /** -// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. -// * -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testCreationValid4() throws IllegalCurrentException { -// Assertions.assertThrows(IllegalCurrentException.class, () -> { -// new Fuse(Integer.MAX_VALUE); -// }); -// } -// -// /** -// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. -// * -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testCreationValid5() throws IllegalCurrentException { -// Assertions.assertThrows(IllegalCurrentException.class, () -> { -// new Fuse(Integer.MIN_VALUE); -// }); -// } -// -// /** -// * Testet das Auslösen der Sicherung. -// * -// * @throws FuseTrippedException Sicherung hat ausgelöst. -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testTripping1() -// throws FuseTrippedException, IllegalCurrentException { -// -// Fuse f = new Fuse(Fuse.A16); -// f.use(5); -// f.use(16); -// f.use(0); -// -// f = new Fuse(Fuse.A25); -// f.use(5); -// f.use(16); -// f.use(25); -// -// -// Assertions.assertThrows(FuseTrippedException.class, () -> { -// Fuse f2 = new Fuse(Fuse.A16); -// f2.use(0); -// f2.use(16); -// f2.use(25); -// }); -// } -// -// /** -// * Testet das Auslösen der Sicherung. -// * -// * @throws FuseTrippedException Sicherung hat ausgelöst. -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testTripping2() -// throws FuseTrippedException, IllegalCurrentException { -// Assertions.assertThrows(FuseTrippedException.class, () -> { -// new Fuse(Fuse.A16).use(17); -// }); -// } -// -// /** -// * Testet das Auslösen der Sicherung. -// * -// * @throws FuseTrippedException Sicherung hat ausgelöst. -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testTripping3() -// throws FuseTrippedException, IllegalCurrentException { -// -// Assertions.assertThrows(FuseTrippedException.class, () -> { -// new Fuse(Fuse.A16).use(Integer.MAX_VALUE); -// }); -// } -// -// /** -// * Testet das Auslösen der Sicherung. -// * -// * @throws FuseTrippedException Sicherung hat ausgelöst. -// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. -// */ -// @Test -// void testTripping4() -// throws FuseTrippedException, IllegalCurrentException { -// Assertions.assertThrows(FuseTrippedException.class, () -> { -// new Fuse(Fuse.A32).use(40); -// }); -// } -} diff --git a/sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java b/sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java deleted file mode 100644 index 3f1b5a9..0000000 --- a/sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package pr2.exceptions.fakultaet.test; - -import org.junit.jupiter.api.Test; -import pr2.exceptions.fakultaet.Fakultaet; -import pr2.exceptions.fakultaet.FakultaetException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -public class FakultaetTest { - - @Test - void testFact() { - Fakultaet f = new Fakultaet(); - assertEquals(1, f.fact(0)); - assertEquals(1, f.fact(1)); - assertEquals(2, f.fact(2)); - assertEquals(6, f.fact(3)); - assertEquals(24, f.fact(4)); - assertEquals(3628800, f.fact(10)); - } - - @Test - void testFactEx1() { - // TODO: Auf Ausnahme testen - } - - @Test - void testFactEx2() { - // TODO: Auf Ausnahme testen - } -} diff --git a/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java b/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java deleted file mode 100644 index e680148..0000000 --- a/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package pr2.generics.einfach.test; - -import org.junit.jupiter.api.Test; -import pr2.generics.einfach.Liste; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -/** - * Test für die Liste. - */ -public class ListeTest { - - /** - * Testet das Hinzufügen und Löschen der Liste. - */ - @Test - void testAddAndClear() { - Liste l = new Liste(); - - assertEquals(0, l.size()); - - l.add("Hallo"); - assertEquals(1, l.size()); - l.add("Hugo"); - assertEquals(2, l.size()); - l.add("Peter"); - l.add("Alfons"); - assertEquals(4, l.size()); - - l.clear(); - assertEquals(0, l.size()); - } - - /** - * Testet das Lesen von Elementen. - */ - @Test - void testGet() { - Liste l = new Liste(); - l.add("Hallo"); - l.add("Hugo"); - l.add("Peter"); - l.add("Alfons"); - - assertNull(l.get(-1)); - assertNull(l.get(4)); - assertEquals("Hallo", l.get(0)); - assertEquals("Hugo", l.get(1)); - assertEquals("Peter", l.get(2)); - assertEquals("Alfons", l.get(3)); - - assertEquals(4, l.size()); - l.clear(); - assertEquals(0, l.size()); - assertNull(l.get(0)); - assertNull(l.get(1)); - assertNull(l.get(2)); - assertNull(l.get(3)); - } -} diff --git a/sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java b/sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java deleted file mode 100644 index 91c7cb8..0000000 --- a/sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package pr2.generics.super_extends.test; - -import org.junit.jupiter.api.Test; -import pr2.generics.super_extends.Liste; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Test für die Liste. - */ -public class ListeTest { - - /** - * Testet das Umkopieren. - */ - @Test - void testAddAndClear() { -// TODO: Einkommentieren -// Liste ls = new Liste<>(); -// Liste lo = new Liste<>(); -// -// ls.add("Hallo"); -// ls.add("Hugo"); -// ls.add("Peter"); -// ls.add("Alfons"); -// -// ls.copyInto(lo); -// -// assertEquals("Hallo", lo.get(0)); -// assertEquals("Hugo", lo.get(1)); -// assertEquals("Peter", lo.get(2)); -// assertEquals("Alfons", lo.get(3)); -// -// lo = new Liste<>(); -// lo.fillFrom(ls); -// -// assertEquals("Hallo", lo.get(0)); -// assertEquals("Hugo", lo.get(1)); -// assertEquals("Peter", lo.get(2)); -// assertEquals("Alfons", lo.get(3)); - } -} diff --git a/sources/src/main/java/pr2/generics/wildcards/Main.java b/sources/src/main/java/pr2/generics/wildcards/Main.java index 5d11f46..49c9523 100644 --- a/sources/src/main/java/pr2/generics/wildcards/Main.java +++ b/sources/src/main/java/pr2/generics/wildcards/Main.java @@ -18,6 +18,7 @@ public final class Main { * @param args Kommandozeilenargumente. */ public static void main(String[] args) { + @SuppressWarnings("PMD.LooseCoupling") SimpleList l1 = new SimpleList<>(); l1.add("Dies"); l1.add("ist"); @@ -25,6 +26,7 @@ public final class Main { l1.add("Test"); l1.add("."); + @SuppressWarnings("PMD.LooseCoupling") SimpleList l2 = new SimpleList<>(); l2.add(1); l2.add(2); diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java deleted file mode 100644 index 19a44ab..0000000 --- a/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package pr2.interfaces.interfaces_e.test; - -//import org.junit.jupiter.api.Test; - -//import tpe.vererbung.interfaces.api.AnalogController; -//import tpe.vererbung.interfaces.chinesen.AnalogControllerImpl; - -/** - * Tests für einen analogen Joystick. - */ -public class AnalogControllerTest extends DigitalControllerTest { -// -// /** -// * Testet einen anlogen Controller. -// */ -// @Test -// void testAnalogController() { -// AnalogController c = new AnalogControllerImpl(); -// testAnalogController(c); -// } -// -// /** -// * Interne Hilfsmethode zum Test von analogen Controllern. -// * -// * @param c Controller, der getestet wird -// */ -// protected void testAnalogController(AnalogController c) { -// c.up(0.5); -// assertPointEquals(0, 0, c.getPosition()); -// c.up(0.5); -// assertPointEquals(0, -1, c.getPosition()); -// -// c.left(0.3); -// c.left(0.3); -// c.left(0.3); -// assertPointEquals(0, -1, c.getPosition()); -// c.left(0.2); -// assertPointEquals(-1, -1, c.getPosition()); -// -// c.down(1.0); -// assertPointEquals(-1, 0, c.getPosition()); -// -// c.down(1.0); -// assertPointEquals(-1, 1, c.getPosition()); -// c.down(1.0); -// assertPointEquals(-1, 2, c.getPosition()); -// -// c.right(0.5); -// c.right(0.5); -// c.right(0.5); -// assertPointEquals(0, 2, c.getPosition()); -// } -} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java deleted file mode 100644 index 85ca8ec..0000000 --- a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.interfaces.interfaces_e.test; - -import java.awt.Point; -import org.junit.jupiter.api.Test; -// -//import org.junit.jupiter.api.Test; -import pr2.interfaces.interfaces_e.impl.DigitalControllerImpl; -import pr2.interfaces.interfaces_e.api.DigitalController; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Tests für einen digitalen Joystick. - */ -public class DigitalControllerTest { - - /** - * Testet einen digitalen Controller. - */ - @Test - void testDigitalController() { - DigitalController c = new DigitalControllerImpl(); - testDigitalController(c); - } - - /** - * Interne Hilfsmethode zum Test von digitalen Controllern. - * - * @param c Controller, der getestet wird - */ - protected void testDigitalController(DigitalController c) { - assertPointEquals(0, 0, c.getPosition()); - c.up(); - c.up(); - assertPointEquals(0, -2, c.getPosition()); - c.down(); - c.down(); - assertPointEquals(0, 0, c.getPosition()); - c.left(); - c.right(); - assertPointEquals(0, 0, c.getPosition()); - c.left(); - assertPointEquals(-1, 0, c.getPosition()); - c.left(); - assertPointEquals(-2, 0, c.getPosition()); - c.right(); - c.right(); - c.right(); - assertPointEquals(1, 0, c.getPosition()); - } - - /** - * Interne Hilfsmethode, um einen Punkt mit seinem x und - * y-Wert zu vergleichen. - * - * @param x x-Wert - * @param y y-Wert - * @param point Punkt, der verglichen werden soll - */ - protected void assertPointEquals(int x, int y, Point point) { - assertEquals(new Point(x, y), point); - } -} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java deleted file mode 100644 index 7024ab6..0000000 --- a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java +++ /dev/null @@ -1,43 +0,0 @@ -package pr2.interfaces.interfaces_e.test; - -//import org.junit.jupiter.api.Test; - -//import pr2.interfaces.interfaces_e.api.DigitalController; - -/** - * Tests für einen analogen Joystick. - */ -public class DualShock4Test extends AnalogControllerTest { -// -// /** -// * Testet einen DualShock4 Kombi-Controller. -// */ -// @Test -// void testDualShock4() { -// DigitalController cd = new DualShock4(); -// testDigitalController(cd); -// -// AnalogController ca = new DualShock4(); -// testAnalogController(ca); -// -// DualShock4 ds = new DualShock4(); -// -// ds.up(); -// ds.up(1.0); -// assertPointEquals(0, -2, ds.getPosition()); -// -// ds.left(); -// ds.right(); -// ds.right(0.5); -// ds.right(0.5); -// assertPointEquals(1, -2, ds.getPosition()); -// -// ds.down(); -// ds.down(); -// ds.down(0.3); -// ds.down(0.3); -// ds.down(0.3); -// ds.down(0.1); -// assertPointEquals(1, 1, ds.getPosition()); -// } -} diff --git a/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java b/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java deleted file mode 100644 index 2b12714..0000000 --- a/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package pr2.interfaces.stack.test; - -import org.junit.jupiter.api.Test; -import pr2.interfaces.stack.Stack; -import pr2.interfaces.stack.StackImpl; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -public class StackTest { - - @Test - void testStack() { -// TODO: Einkommentieren -// Stack s = new StackImpl(100); -// -// assertEquals(0, s.size()); -// -// s.push("Hallo"); -// s.push("wie"); -// s.push("gehts"); -// -// assertEquals(3, s.size()); -// -// assertEquals("gehts", s.peek()); -// assertEquals("gehts", s.pop()); -// -// assertEquals("wie", s.peek()); -// assertEquals("wie", s.pop()); -// -// assertEquals("Hallo", s.peek()); -// assertEquals("Hallo", s.pop()); -// -// assertNull(s.pop()); - } -} diff --git a/sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java b/sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java deleted file mode 100644 index c63a0d3..0000000 --- a/sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package pr2.intro.junit_faculty.test; - -import org.junit.jupiter.api.Test; -import pr2.intro.junit_faculty.Fakultaet; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class FakultaetTest { - - @Test - void testFact() { - } -} diff --git a/sources/src/main/java/pr2/io/data_output/test/BoardTest.java b/sources/src/main/java/pr2/io/data_output/test/BoardTest.java deleted file mode 100644 index 8643548..0000000 --- a/sources/src/main/java/pr2/io/data_output/test/BoardTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.io.data_output.test; - -import org.junit.jupiter.api.Test; -import pr2.io.data_output.Board; -import pr2.io.data_output.Color; - -import java.io.FileOutputStream; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Test. - */ -public class BoardTest { - - private static final byte[] RESULT = new byte[] { - 0x00, 0x0B, 0x53, 0x63, 0x68, 0x61, 0x63, 0x68, 0x62, 0x72, 0x65, - 0x74, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0x00, 0x00, 0x00, 0x01, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, - 0x00, (byte) 0xff, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, - (byte) 0xFF, (byte) 0xFF - }; - - /** - * Test für die Implementierung des Spielbrettes. - * - * @throws IOException Datei-Probleme. - */ - @Test - void testDame() throws IOException { - Board s = new Board(); - s.set("a1", Color.BLACK); - s.set("b1", Color.WHITE); - s.set("h1", Color.BLACK); - s.set("h2", Color.BLACK); - s.set("a8", Color.BLACK); - s.set("f8", Color.BLACK); - s.set("f5", Color.WHITE); - s.set("e3", Color.WHITE); - s.set("g2", Color.WHITE); - - String stringRepresentation = s.toString(); - - s.writeToFile("/tmp/daten.dat"); - - s = Board.loadFromFile("/tmp/daten.dat"); - - assertEquals(stringRepresentation, s.toString()); - - FileOutputStream fos = new FileOutputStream("/tmp/testdata.dat"); - fos.write(RESULT); - fos.close(); - - s = Board.loadFromFile("/tmp/testdata.dat"); - - assertEquals(stringRepresentation, s.toString()); - } -} diff --git a/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java b/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java index 1d58d48..b862c2e 100644 --- a/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java +++ b/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java @@ -9,11 +9,6 @@ import java.io.OutputStream; */ public class WriteData { - /** - * Datei. - */ - public static final String FILE = "pr2/io/datei_schreiben/daten.dat"; - /** * Hauptmethode. * @@ -21,7 +16,8 @@ public class WriteData { */ public static void main(String[] args) { - // TODO: OutputStream für Datei `File` öffnen + String file = args[0]; + // TODO: OutputStream für Datei `file` öffnen // TODO: 0xca 0xff 0xfe 0xba 0xbe 0x0 0xde 0xad 0xbe 0xef schreiben // TODO: OutputStream schließen } diff --git a/sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java b/sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java deleted file mode 100644 index c4fc9fd..0000000 --- a/sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package pr2.io.datei_schreiben.test; - -import org.junit.jupiter.api.Test; -import pr2.io.datei_schreiben.WriteData; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static pr2.io.datei_schreiben.WriteData.FILE; - -/** - * Test für die geschriebenen Daten. - */ -public class DataTest { - - /** - * Geschriebene Daten testen. - * - * @throws IOException Datei-Probleme. - */ - @Test - void testData() throws IOException { - - WriteData.main(new String[0]); - - InputStream is = new FileInputStream(FILE); - - byte[] buffer = new byte[10]; - is.read(buffer); - assertArrayEquals( - new byte[] {(byte) 0xca, (byte) 0xff, (byte) 0xfe, (byte) 0xba, - (byte) 0xbe, (byte) 0x00, (byte) 0xde, (byte) 0xad, - (byte) 0xbe, (byte) 0xef}, buffer); - - is.close(); - } -} diff --git a/sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java b/sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java deleted file mode 100644 index 7c96175..0000000 --- a/sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package pr2.io.filter.test; - -import org.junit.jupiter.api.Test; -import pr2.io.filter.UCaseReader; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.StringReader; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test für die Rot13 "Verschlüsselung". - */ -public class UCaseReaderTest { - - /** - * Testmethode. - * - * @throws IOException IO-Probleme - */ - @Test - void testReader() throws IOException { - -// TODO: Einkommentieren -// BufferedReader br = new BufferedReader( -// new UCaseReader(new StringReader( -// "Dies ist" + " ein Test für den UCASE-Reader."))); -// -// String line = br.readLine(); -// assertEquals("DIES IST EIN TEST FÜR DEN UCASE-READER.", line); -// -// br.close(); - } -} diff --git a/sources/src/main/java/pr2/io/random_access/test/FileSortTest.java b/sources/src/main/java/pr2/io/random_access/test/FileSortTest.java deleted file mode 100644 index 2112c41..0000000 --- a/sources/src/main/java/pr2/io/random_access/test/FileSortTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package pr2.io.random_access.test; - -import org.junit.jupiter.api.Test; -import pr2.io.random_access.FileSort; - -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Testet die Sortierung per Random-Access-File. - */ -public class FileSortTest { - - /** - * Kopiert die Datei f1 als Datei f2. - * - * @param f1 Quell-Datei - * @param f2 Ziel-Datei - * @throws IOException IO-Probleme - */ - private static void copyFile(String f1, String f2) throws IOException { - - FileInputStream fis = new FileInputStream(f1); - FileOutputStream fos = new FileOutputStream(f2); - - int b; - - while ((b = fis.read()) != -1) { - fos.write(b); - } - - fis.close(); - fos.close(); - } - - /** - * Testet die File-Sortierung. - * - * @throws IOException IO-Problem - */ - @Test - void testBubbleSort() throws IOException { - copyFile("data.dat", "output/data.dat"); - FileSort.sortFile("output/data.dat"); - - InputStream is = new FileInputStream("output/data.dat"); - - int data; - byte lastByte = 0; - - while ((data = is.read()) >= 0) { - byte b = (byte) data; - assertTrue(b >= lastByte); - lastByte = b; - } - - is.close(); - } -} diff --git a/sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java b/sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java deleted file mode 100644 index e96d2a0..0000000 --- a/sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.io.serialisierung.test; - -import org.junit.jupiter.api.Test; -import pr2.io.serialisierung.Board; -import pr2.io.serialisierung.Color; - -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test. - */ -public class BoardTest { - - /** - * Test für die Implementierung des Spielbrettes. - * - * @throws IOException Datei-Probleme. - */ - @Test - void testDame() throws IOException { - Board s = new Board(); - s.set("a1", Color.BLACK); - s.set("b1", Color.WHITE); - s.set("h1", Color.BLACK); - s.set("h2", Color.BLACK); - s.set("a8", Color.BLACK); - s.set("f8", Color.BLACK); - s.set("f5", Color.WHITE); - s.set("e3", Color.WHITE); - s.set("g2", Color.WHITE); - - String stringRepresentation = s.toString(); - - s.writeToFile("/tmp/daten.dat"); - - s = Board.loadFromFile("/tmp/daten.dat"); - - assertEquals(stringRepresentation, s.toString()); - - s = Board.loadFromFile("testdata.dat"); - - assertEquals(stringRepresentation, s.toString()); - } -} diff --git a/sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java b/sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java deleted file mode 100644 index 4435c33..0000000 --- a/sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package pr2.lambda.matrixsuche.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.lambda.matrixsuche.MatrixSuche; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -public class MatrixSucheTest { - - @Test - void testSuche() { - -// TODO: Einkommentieren -// int[][] matrix = { -// {3, 5, 6, 7, 8}, -// {10, 12, 14, 16, 18}, -// {23, 25, 26, 27, 28} -// }; -// -// Assertions.assertEquals("(0, 1)", -// MatrixSuche.findEntry(matrix, 5).toString()); -// assertEquals("(2, 0)", -// MatrixSuche.findEntry(matrix, 23).toString()); -// assertEquals("(1, 2)", -// MatrixSuche.findEntry(matrix, 14).toString()); -// assertEquals("(0, 4)", -// MatrixSuche.findEntry(matrix, 8).toString()); -// assertNull( -// MatrixSuche.findEntry(matrix, 99)); - } -} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java b/sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java deleted file mode 100644 index 1e5bfcb..0000000 --- a/sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package pr2.lambda.mogrifier_1.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.lambda.mogrifier_1.StringTransmogrifier; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -public class StringTransmogrifierTest { - - @Test - void testMogrification() { - // TODO: Tests durchführen - } -} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java b/sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java deleted file mode 100644 index 79aff6c..0000000 --- a/sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package pr2.lambda.mogrifier_2.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.lambda.mogrifier_2.StringFunction; -import pr2.lambda.mogrifier_2.StringTransmogrifier; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -public class StringTransmogrifierTest { - - static final String[] ELEMENTS = {"Hello", "World"}; - - @Test - void testMogrification() { - - - Assertions.assertArrayEquals(new String[] {"hello", "world"}, - StringTransmogrifier.transmogrify(ELEMENTS, - String::toLowerCase)); - - assertArrayEquals(new String[] {"HELLO", "WORLD"}, - StringTransmogrifier.transmogrify(ELEMENTS, - String::toUpperCase)); - - assertArrayEquals(new String[] {"Ifmmp", "Xpsme"}, - StringTransmogrifier.transmogrify(ELEMENTS, - s -> { - char[] c = s.toCharArray(); - for (int i = 0; i < c.length; i++) { - c[i] = (char) (c[i] + 1); - } - return new String(c); - })); - } - - // TODO: Tests für caesar durchführen -} diff --git a/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java b/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java deleted file mode 100644 index c30dff5..0000000 --- a/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package pr2.object.clone_alien.test; - -import org.junit.jupiter.api.Test; -import pr2.object.clone_alien.Alien; -import pr2.object.clone_alien.Raumanzug; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotSame; - -/** - * Test für die Clone-Methoden. - */ -public class AlienCloneTest { - - /** - * Test-Methode. - * - * @throws CloneNotSupportedException wird geworfen, wenn clone_alien - * nicht korrekt implementiert wurde. - */ - @Test - void testClone() throws CloneNotSupportedException { -// TODO: Einkommentieren -// Raumanzug r1 = new Raumanzug(); -// Alien a1 = new Alien("Predator", r1); -// -// Alien a2 = (Alien) a1.clone(); -// Raumanzug r2 = a2.getAnzug(); -// -// assertNotSame(a1, a2); -// assertNotSame(r1, r2); -// -// assertEquals(a1, a2); -// assertEquals(r1, r2); -// assertEquals(r1.getSauerstoffVorrat(), r2.getSauerstoffVorrat(), -// 0.0001); - } -} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java b/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java deleted file mode 100644 index bdbe397..0000000 --- a/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package pr2.object.equals_hashcode.test; - -import org.junit.jupiter.api.Test; -import pr2.object.equals_hashcode.Ork; -import pr2.object.equals_hashcode.Wesen; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotSame; - -/** - * Testklasse für die Wesen. - */ -public class WesenTest { - - /** - * Testet equals und hashCode von Wesen. - */ - @Test - void testWesen() { - Wesen w1 = new Wesen("Azok", 30); - Wesen w2 = new Wesen("Azok", 30); - Wesen w3 = new Wesen("Azok", 31); - Wesen w4 = new Wesen("Gorrok", 30); - Wesen w5 = new Wesen("Gorrok", 31); - - assertNotSame(w1, w2); - assertEquals(w1, w2); - - assertNotSame(w1, w3); - assertNotEquals(w1, w3); - - assertNotSame(w1, w4); - assertNotEquals(w1, w4); - - assertNotSame(w1, w5); - assertNotEquals(w1, w5); - - assertEquals(w1.hashCode(), w2.hashCode()); - } - - /** - * Testet equals und hashCode von Ork. - */ - @Test - void testOrk() { - Ork o1 = new Ork("Snagas", true); - Ork o2 = new Ork("Snagas", true); - Ork o3 = new Ork("Snagas", false); - Ork o4 = new Ork("Berg-Ork", false); - Ork o5 = new Ork("Berg-Ork", true); - Ork o6 = new Ork("Berg-Ork", false); - Wesen w = new Wesen("Snagas", 17); - - assertNotSame(o1, o2); - assertEquals(o1, o2); - - assertNotSame(o1, o3); - assertNotEquals(o1, o3); - - assertNotSame(o1, o4); - assertNotEquals(o1, o4); - - assertNotSame(o1, o5); - assertNotEquals(o1, o5); - - assertEquals(o1.hashCode(), o2.hashCode()); - assertEquals(o4.hashCode(), o6.hashCode()); - - assertNotEquals(w, o1); - assertNotEquals(w, o2); - assertNotEquals(w, o3); - assertNotEquals(null, o1); - assertNotEquals("Hugo", o1); - assertEquals(o1, o1); - - // Diese Tests muss nicht zwangsweise funktionieren, da - // ungleiche Objekte einen identischen Hashcode haben können. - // Wir gehen hier aber davon aus, dass eine Hashkollision - // sehr selten ist und machen daher aus didaktischen Gründen - // diesen Test. - assertNotEquals(o1.hashCode(), o3.hashCode()); - assertNotEquals(o1.hashCode(), o4.hashCode()); - assertNotEquals(o1.hashCode(), o5.hashCode()); - assertNotEquals(o4.hashCode(), o5.hashCode()); - } -} diff --git a/sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java b/sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java deleted file mode 100644 index e18ad24..0000000 --- a/sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package pr2.streams.chars_1.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.chars_1.CountLetters; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CountLettersTest { - @Test - void testCount() { - // TODO: Methode count testen - } -} diff --git a/sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java b/sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java deleted file mode 100644 index 446262c..0000000 --- a/sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.streams.chars_2.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.chars_2.CountLetters; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CountLettersTest { - @Test - void testCount() { - // TODO: Methode count testen - } -} diff --git a/sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java b/sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java deleted file mode 100644 index 6e0ed8c..0000000 --- a/sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package pr2.streams.chars_3.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.chars_3.CountLetters; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CountLettersTest { - @Test - void testCount() { - // TODO: Methode count testen - } -} diff --git a/sources/src/main/java/pr2/streams/filter/test/FilterListTest.java b/sources/src/main/java/pr2/streams/filter/test/FilterListTest.java deleted file mode 100644 index a807aec..0000000 --- a/sources/src/main/java/pr2/streams/filter/test/FilterListTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package pr2.streams.filter.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.filter.FilterList; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class FilterListTest { - - @Test - void testFilter() { - List liste = Arrays.asList( - "Hallo", "Welt", "Dampfschifffahrt", "Hundekuchen", - "Fiction", "Java", "Visual Basic", "Drucker"); - - List result = Arrays.asList( - "hallo", "dampfschifffahrt", "hundekuchen", - "fiction", "visual basic", "drucker"); - - assertEquals(result, FilterList.filter(liste)); - } -} diff --git a/sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java b/sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java deleted file mode 100644 index 638f9c2..0000000 --- a/sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package pr2.streams.reduce.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import pr2.streams.reduce.Squarer; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SquarerTest { - - @Test - void testMitMap() { - List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); - Assertions.assertEquals(424, Squarer.mitMap(l)); - } - - @Test - void testOhneMap() { - List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); - assertEquals(424, Squarer.ohneMap(l)); - } - -} diff --git a/sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java b/sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java deleted file mode 100644 index bec5b46..0000000 --- a/sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package pr2.streams.summieren.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.summieren.SumUp; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SumUpTest { - - @Test - void testSum() { - List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); - assertEquals(48, SumUp.sumUp(l.stream())); - } -} diff --git a/sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java b/sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java deleted file mode 100644 index 43dbcf8..0000000 --- a/sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package pr2.streams.word_count.test; - -import org.junit.jupiter.api.Test; -import pr2.streams.word_count.WordCount; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class WordCountTest { - - @Test - void testWordCount() { - List liste = Arrays.asList("A", "A", "B", "B", "B", "C", - "D", "D", "E", "E", "E", "F"); - - assertEquals(Arrays.asList("A->2", "B->3", "C->1", "D->2", - "E->3", "F->1"), WordCount.count(liste)); - } -} diff --git a/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java b/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java deleted file mode 100644 index 852894f..0000000 --- a/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package pr2.strukturierung.information_hiding.test; - -import org.junit.jupiter.api.Test; -import pr2.strukturierung.information_hiding.Rechner; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Unit-Test für den Rechner. - */ -public class RechnerTest { - - /** - * Testet alle Grundoperationen des Rechners. - */ - @Test - void testRechner() { - Rechner r = new Rechner(); - - // 2 + 2 = 4 - r.addiere(2.0, 2.0); - assertEquals(4.0, r.wert, 0.0001); - - // 3 - 1 = 2 - r.subtrahiere(3, 1); - assertEquals(2.0, r.wert, 0.0001); - - // 3 * 3 = 9 - r.multipliziere(3, 3); - assertEquals(9.0, r.wert, 0.0001); - - // 2 + 2 * 2 = 6 - r.multipliziere(2, 2); - r.speichern(); - r.addiere(2, r.speicher); - assertEquals(6.0, r.wert, 0.0001); - } -} diff --git a/sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java b/sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java deleted file mode 100644 index 1732f9e..0000000 --- a/sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package pr2.vererbung.konstruktoren.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.konstruktoren.Nachtelf; -import pr2.vererbung.konstruktoren.Untoter; -import pr2.vererbung.konstruktoren.Wesen; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Test für die Aufgabe. - */ -public class WesenTest { - - /** - * Testet den Nachtelf. - */ - @Test - void testNachtelf() { -// TODO: Einkommentieren -// assertTrue(new Nachtelf("") instanceof Wesen, -// "Nachtelf erbt nicht " + "von Wesen"); -// -// assertEquals(Nachtelf.STANDARD_NATURWIDERSTAND, -// new Nachtelf("").getNaturwiderstand()); -// -// assertEquals(120, new Nachtelf("", 120).getNaturwiderstand()); -// -// assertEquals("Hugo", new Nachtelf("Hugo").getName()); - } - - /** - * Testet den Untoten. - */ - @Test - void testUntoten() { -// TODO: Einkommentieren -// assertTrue(new Untoter("") instanceof Wesen, -// "Untoter erbt nicht von " + "Wesen"); -// -// assertEquals(Untoter.STANDARD_UNTERWASSERATMUNG, -// new Untoter("").getUnterwasseratmung()); -// -// assertEquals(120, new Untoter("", 120).getUnterwasseratmung()); -// -// assertEquals("Hugo", new Untoter("Hugo").getName()); - } -} diff --git a/sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java b/sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java deleted file mode 100644 index 5d3496b..0000000 --- a/sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package pr2.vererbung.ueberladen_summe.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.ueberladen_summe.Summator; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SummatorTest { - - @Test - void testSum() { -// TODO: Einkommentieren -// Summator s = new Summator(); -// assertEquals(3, s.sum(1, 2)); -// assertEquals(1, s.sum(-1, 2)); -// assertEquals(6, s.sum(1, 2, 3)); -// assertEquals(0, s.sum(1, 2, -3)); -// assertEquals(10, s.sum(1, 2, 3, 4)); -// assertEquals(2, s.sum(1, 2, 3, -4)); -// assertEquals(15, s.sum(1, 2, 3, 4, 5)); -// assertEquals(5, s.sum(1, 2, 3, 4, -5)); - } -} diff --git a/sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java b/sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java deleted file mode 100644 index 2b8ab32..0000000 --- a/sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package pr2.vererbung.vararg_summe.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.vararg_summe.Summator; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SummatorTest { - - @Test - void testSum() { -// TODO: Einkommentieren -// Summator s = new Summator(); -// assertEquals(3, s.sum(1, 2)); -// assertEquals(1, s.sum(-1, 2)); -// assertEquals(6, s.sum(1, 2, 3)); -// assertEquals(0, s.sum(1, 2, -3)); -// assertEquals(10, s.sum(1, 2, 3, 4)); -// assertEquals(2, s.sum(1, 2, 3, -4)); -// assertEquals(15, s.sum(1, 2, 3, 4, 5)); -// assertEquals(5, s.sum(1, 2, 3, 4, -5)); -// assertEquals(36, s.sum(1, 2, 3, 4, 5, 6, 7, 8)); - } -} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java deleted file mode 100644 index 3dc462c..0000000 --- a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package pr2.vererbung.vererbung_geometrie.test; - -import org.junit.jupiter.api.Test; -import pr2.vererbung.vererbung_geometrie.Dreieck; -import pr2.vererbung.vererbung_geometrie.Gerade; -import pr2.vererbung.vererbung_geometrie.Quadrat; -import pr2.vererbung.vererbung_geometrie.Rechteck; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Tests für die Figuren. - */ -public class FigurenTest { - - private static final double PRECISION = 0.0001; - - /** - * Rechteck. - */ - @Test - void testReckteck() { -// TODO: Einkommentieren -// Rechteck r1 = new Rechteck(4.0, 5.0); -// Rechteck r2 = new Rechteck(0.0, 3.0); -// assertEquals(20.0, r1.getFlaeche(), PRECISION); -// assertEquals(0.0, r2.getFlaeche(), PRECISION); - } - - /** - * Dreieck. - */ - @Test - void testDreieck() { -// TODO: Einkommentieren -// Dreieck d1 = new Dreieck(6.0, 3.5); -// assertEquals(10.5, d1.getFlaeche(), PRECISION); - } - - /** - * Gerade. - */ - @Test - void testGerade() { -// TODO: Einkommentieren -// Gerade g1 = new Gerade(8.0); -// assertEquals(8.0, g1.getLaenge(), PRECISION); -// assertEquals(0.0, g1.getFlaeche(), PRECISION); -// -// g1 = new Gerade(0.0); -// assertEquals(0.0, g1.getLaenge(), PRECISION); -// assertEquals(0.0, g1.getFlaeche(), PRECISION); - } - - /** - * Quadrat. - */ - @Test - void testQuadrat() { -// TODO: Einkommentieren -// Quadrat q1 = new Quadrat(3.0); -// assertEquals(9.0, q1.getFlaeche(), PRECISION); -// -// Rechteck r1 = new Rechteck(5.0, 5.0); -// Quadrat q2 = new Quadrat(5.0); -// assertEquals(r1.getFlaeche(), q2.getFlaeche(), PRECISION); -// -// q1 = new Quadrat(0.0); -// assertEquals(0.0, q1.getFlaeche(), PRECISION); - } -} diff --git a/sources/src/main/resources/pr2/io/random_access/data.dat b/sources/src/main/resources/pr2/io/random_access/data.dat deleted file mode 100644 index 33a685580299d03e84b67d2d69ae52fb5eb2fdee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmY%PD$pn})^bocv2u~ENm679P%NyAPO>YH=F(tD^Y=+gH@1%k<%6&5tw< zm&g~$3gt<(kSNJ5X3dhR43Tp!$qi2ybxTfkl4Oe3R+CJ&Hq)&v@vKr-&*s)EFjoNp D9Jd-0 diff --git a/sources/src/main/resources/pr2/io/random_access/output/.gitkeep b/sources/src/main/resources/pr2/io/random_access/output/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/sources/src/main/resources/pr2/io/serialisierung/testdata.dat b/sources/src/main/resources/pr2/io/serialisierung/testdata.dat deleted file mode 100644 index 34b842b77598dd72c757803d410c2729263b1cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmZ4UmVvdnh(W5PAXP6jU#~c|C^Io9vnsJ9Ge1wyDL=6&h2`3m3u~C52Bdq3_23$uSE{B6{0GbH~LO=_O82GXh%M$f+67$maT=PnEktGXC z7+9Tr9G$)E3K{Ac*nzxo56=+S0uTU+aF&8dR-hIRuozg78;cA`h#RN`T|I^fR3Sli NC}x2z1UUf80046Cg8u*j