├── .editorconfig
├── .gitattributes
├── .github
├── CODEOWNERS
├── dependabot.yml
└── workflows
│ ├── beamer.yaml
│ ├── docsify.yaml
│ ├── gfm.yaml
│ ├── pdf.yaml
│ └── tests.yaml
├── .gitignore
├── .gitmodules
├── .nojekyll
├── CITATION.cff
├── CREDITS.md
├── LICENSE.md
├── Makefile
├── admin
├── exams.md
├── images
│ └── fahrplan.png
├── planung_pm.xlsx
└── readme.md
├── homework
├── b01.md
├── b02.md
├── b03.md
├── b04.md
├── b05.md
├── b06.md
├── b07.md
├── b08.md
├── b09.md
├── images
│ ├── bridgetroll-annot.excalidraw
│ ├── bridgetroll-annot.png
│ └── bridgetroll.png
└── readme.md
├── lecture
├── building
│ ├── ant.md
│ ├── ci.md
│ ├── docker.md
│ ├── gradle.md
│ ├── images
│ │ ├── ci.png
│ │ ├── screenshot-githubci-job.png
│ │ ├── screenshot-githubci-triggeredworkflow.png
│ │ ├── screenshot-githubci-workflows.png
│ │ ├── screenshot-gitlabci-job.png
│ │ ├── screenshot-gitlabci-pipelines.png
│ │ ├── screenshot-gitlabci-triggeredpipeline.png
│ │ ├── screenshot_github_actions.png
│ │ ├── screenshot_github_settings_actions.png
│ │ ├── screenshot_github_settings_permissions.png
│ │ ├── screenshot_maven-lifecycle.png
│ │ ├── screenshot_maven-project.png
│ │ ├── virtualisierung.png
│ │ └── vscode-remote.png
│ ├── maven.md
│ ├── readme.md
│ └── src
│ │ ├── Dockerfile
│ │ ├── Makefile
│ │ ├── ant
│ │ ├── Hello.java
│ │ ├── build.xml
│ │ ├── hello.xml
│ │ ├── ivy.xml
│ │ └── ivydemo.xml
│ │ ├── docker
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── demo.yml
│ │ ├── .gitlab-ci.yml
│ │ ├── Hello.java
│ │ └── debian-latex.df
│ │ └── maven
│ │ ├── Hello.java
│ │ └── pom.xml
├── git
│ ├── bisect.md
│ ├── branches.md
│ ├── branching-strategies.md
│ ├── git-basics.md
│ ├── git-intro.md
│ ├── images
│ │ ├── after.excalidraw
│ │ ├── after.png
│ │ ├── before.excalidraw
│ │ ├── before.png
│ │ ├── centralised.png
│ │ ├── distributed.png
│ │ ├── lifecycle.png
│ │ ├── linkedworktrees.png
│ │ ├── local.png
│ │ ├── remote-branches-2.excalidraw
│ │ ├── remote-branches-2.png
│ │ ├── screenshot_branches.png
│ │ ├── screenshot_git_log.png
│ │ ├── screenshot_git_log_recent.png
│ │ ├── screenshot_merge-request_code.png
│ │ ├── screenshot_merge-request_discussion.png
│ │ ├── screenshot_zusammenarbeit_ohne_vcs.png
│ │ ├── workflow.png
│ │ └── workflow_remote.png
│ ├── readme.md
│ ├── remotes.md
│ ├── workflows.md
│ └── worktree.md
├── gui
│ ├── events.md
│ ├── images
│ │ ├── ActionListener.png
│ │ ├── ActionListener.uxf
│ │ ├── EventListener.png
│ │ ├── EventListener.uxf
│ │ ├── EventObject.png
│ │ ├── EventObject.uxf
│ │ ├── java2d-koordinaten.png
│ │ ├── java2d.png
│ │ ├── mvc.drawio
│ │ ├── mvc.png
│ │ ├── observer.png
│ │ ├── observer.uxf
│ │ ├── screenshot-borderlayout.png
│ │ ├── screenshot-dialog.png
│ │ ├── screenshot-filechooser.png
│ │ ├── screenshot-flowlayout.png
│ │ ├── screenshot-gridlayout.png
│ │ └── screenshot-radiobuttons.png
│ ├── java2d.md
│ ├── layouts.md
│ ├── readme.md
│ ├── src
│ │ ├── basics
│ │ │ ├── FirstWindow.java
│ │ │ └── SecondWindow.java
│ │ ├── challenges
│ │ │ └── tictactoe
│ │ │ │ ├── Gamestate.java
│ │ │ │ ├── Icon.java
│ │ │ │ ├── Player.java
│ │ │ │ └── TicTacToe.java
│ │ ├── events
│ │ │ ├── DemoStarter.java
│ │ │ ├── ListenerDemo.java
│ │ │ ├── MouseAdapterDemo.java
│ │ │ └── MouseListenerDemo.java
│ │ ├── java2d
│ │ │ ├── DemoStarter.java
│ │ │ ├── SimpleDrawings.java
│ │ │ ├── SimpleFonts.java
│ │ │ ├── SimplePoly.java
│ │ │ └── simplegame
│ │ │ │ ├── GameObject.java
│ │ │ │ ├── GameOval.java
│ │ │ │ ├── GameRect.java
│ │ │ │ ├── GameString.java
│ │ │ │ └── J2DTeaser.java
│ │ ├── layout
│ │ │ ├── Border.java
│ │ │ ├── DemoStarter.java
│ │ │ ├── Flow.java
│ │ │ ├── Grid.java
│ │ │ └── GridBag.java
│ │ ├── tables
│ │ │ ├── DemoStarter.java
│ │ │ ├── ModelTable.java
│ │ │ ├── SelectTable.java
│ │ │ └── SimpleTable.java
│ │ └── widgets
│ │ │ ├── DemoStarter.java
│ │ │ ├── DialogDemo.java
│ │ │ ├── FileChooserDemo.java
│ │ │ ├── MenuDemo.java
│ │ │ ├── PopupDemo.java
│ │ │ ├── RadioButtonDemo.java
│ │ │ └── TabbedPaneDemo.java
│ ├── swing-basics.md
│ ├── tables.md
│ └── widgets.md
├── java-classic
│ ├── annotations.md
│ ├── collections.md
│ ├── configuration.md
│ ├── enums.md
│ ├── exceptions.md
│ ├── generics-bounds-wildcards.md
│ ├── generics-classes-methods.md
│ ├── generics-polymorphism.md
│ ├── generics-type-erasure.md
│ ├── images
│ │ ├── ThreadRunnable.png
│ │ ├── ThreadRunnable.uxf
│ │ ├── arraylist.gif
│ │ ├── arraylist.png
│ │ ├── collection.png
│ │ ├── collection.uxf
│ │ ├── collections.png
│ │ ├── collections.uxf
│ │ ├── collections_table.png
│ │ ├── collections_table_vorlage.numbers
│ │ ├── exception.png
│ │ ├── exception.uxf
│ │ ├── gif_vorlage
│ │ │ ├── arraylist_vorlage.pptx
│ │ │ ├── iterator_vorlage.pptx
│ │ │ └── linkedlist_vorlage.pptx
│ │ ├── hashmap.png
│ │ ├── hashmap.uxf
│ │ ├── ide-cli.png
│ │ ├── iterator.gif
│ │ ├── iterator.png
│ │ ├── iterator.uxf
│ │ ├── iteratoruml.drawio
│ │ ├── iteratoruml.png
│ │ ├── linkedlist.gif
│ │ ├── linkedlist.png
│ │ ├── map.png
│ │ ├── map.uxf
│ │ ├── screenshot_infer-notnull.png
│ │ ├── screenshot_nullpointerexception-notnull.png
│ │ ├── screenshot_swingworker.png
│ │ ├── uml_serialisierung.png
│ │ └── uml_serialisierung.uxf
│ ├── readme.md
│ ├── reflection.md
│ ├── regexp.md
│ ├── serialisation.md
│ ├── src
│ │ ├── META-INF
│ │ │ └── services
│ │ │ │ └── javax.annotation.processing.Processor
│ │ ├── annotations
│ │ │ ├── A.java
│ │ │ ├── B.java
│ │ │ ├── C.java
│ │ │ ├── Foo.java
│ │ │ └── WuppieAnnotation.java
│ │ ├── arrays
│ │ │ └── X.java
│ │ ├── bounds
│ │ │ └── Cps.java
│ │ ├── challenges
│ │ │ ├── exceptions
│ │ │ │ ├── better_try_catch
│ │ │ │ │ ├── BetterTryCatchMain.java
│ │ │ │ │ ├── MyFunctions.java
│ │ │ │ │ └── NoNumberFoundException.java
│ │ │ │ ├── finally_resources
│ │ │ │ │ ├── MyException.java
│ │ │ │ │ └── MyResource.java
│ │ │ │ └── where_to_catch
│ │ │ │ │ ├── JustThrow.java
│ │ │ │ │ └── MyException.java
│ │ │ ├── reflection
│ │ │ │ ├── calculator
│ │ │ │ │ ├── CalculatorUI.java
│ │ │ │ │ ├── Main.java
│ │ │ │ │ └── OperationLoader.java
│ │ │ │ └── operations
│ │ │ │ │ └── IOperation.java
│ │ │ ├── regexp
│ │ │ │ ├── Lexer.java
│ │ │ │ ├── LexerUI.java
│ │ │ │ ├── MyMatchResult.java
│ │ │ │ └── Token.java
│ │ │ └── threads
│ │ │ │ ├── BlueHamster.java
│ │ │ │ ├── Hamster.java
│ │ │ │ ├── Main.java
│ │ │ │ ├── RedHamster.java
│ │ │ │ └── Tunnel.java
│ │ ├── classes
│ │ │ └── GenericClasses.java
│ │ ├── cli
│ │ │ ├── Args.java
│ │ │ ├── Props.java
│ │ │ └── Teaser.java
│ │ ├── collections
│ │ │ ├── hash_example
│ │ │ │ ├── HashCodeExample.java
│ │ │ │ └── Point.java
│ │ │ └── iterator_example
│ │ │ │ ├── BinarySearchTree.java
│ │ │ │ ├── InorderIterator.java
│ │ │ │ └── IteratorExample.java
│ │ ├── creation
│ │ │ ├── ThreadRunnable.java
│ │ │ └── ThreadedKaputt.java
│ │ ├── enums
│ │ │ ├── FinalDemo.java
│ │ │ ├── v1
│ │ │ │ └── Studi.java
│ │ │ ├── v2
│ │ │ │ └── Studi.java
│ │ │ └── v3
│ │ │ │ ├── Fach.java
│ │ │ │ └── Studi.java
│ │ ├── exceptions
│ │ │ ├── DivExample.java
│ │ │ ├── HowMuchTry.java
│ │ │ ├── MyCheckedException.java
│ │ │ ├── MyUncheckedException.java
│ │ │ └── WhereToCatch.java
│ │ ├── executor
│ │ │ └── ExecutorDemo.java
│ │ ├── forkjoin
│ │ │ └── ForkJoin.java
│ │ ├── intro
│ │ │ ├── Join.java
│ │ │ ├── Threaded.java
│ │ │ └── Traditional.java
│ │ ├── lock
│ │ │ ├── LockObjects.java
│ │ │ └── TradMonitors.java
│ │ ├── methods
│ │ │ └── GenericMethods.java
│ │ ├── misc
│ │ │ └── SwingWorkerDemo.java
│ │ ├── reflection
│ │ │ ├── ClassLoaderDemo.java
│ │ │ ├── ReflectionDemo.java
│ │ │ ├── Studi.java
│ │ │ └── Wuppie.java
│ │ ├── regexp
│ │ │ ├── Backref.java
│ │ │ ├── Groups.java
│ │ │ ├── MatchFind.java
│ │ │ ├── Quantifier.java
│ │ │ └── StringSplit.java
│ │ ├── serial
│ │ │ ├── SerializableStudi.java
│ │ │ └── TestSerializableStudi.java
│ │ ├── synchronised
│ │ │ ├── Deadlock.java
│ │ │ ├── MethodSync.java
│ │ │ ├── ObjSync.java
│ │ │ ├── Staffel.java
│ │ │ └── Teaser.java
│ │ └── wildcards
│ │ │ ├── v1
│ │ │ └── X.java
│ │ │ ├── v2
│ │ │ └── X.java
│ │ │ └── v3
│ │ │ └── X.java
│ ├── threads-highlevel.md
│ ├── threads-intro.md
│ └── threads-synchronisation.md
├── java-modern
│ ├── defaultmethods.md
│ ├── images
│ │ ├── screenshot_katze.png
│ │ ├── screenshot_review1.png
│ │ ├── screenshot_review2.png
│ │ └── screenshot_review3.png
│ ├── lambdas.md
│ ├── methodreferences.md
│ ├── optional.md
│ ├── readme.md
│ ├── records.md
│ ├── src
│ │ ├── challenges
│ │ │ ├── defaults
│ │ │ │ ├── Enten.java
│ │ │ │ ├── Kolibris.java
│ │ │ │ ├── Main.java
│ │ │ │ ├── Pinguine.java
│ │ │ │ └── Voegel.java
│ │ │ ├── lambda
│ │ │ │ ├── Student.java
│ │ │ │ └── StudentSort.java
│ │ │ ├── optional
│ │ │ │ ├── Box.java
│ │ │ │ ├── Katze.java
│ │ │ │ ├── KatzenCafe.java
│ │ │ │ └── Material.java
│ │ │ └── streams
│ │ │ │ ├── Main.java
│ │ │ │ ├── Student.java
│ │ │ │ └── file.txt
│ │ ├── defaultmethods
│ │ │ ├── quiz
│ │ │ │ └── DefaultTest.java
│ │ │ ├── rule1
│ │ │ │ └── DefaultTest1.java
│ │ │ ├── rule2
│ │ │ │ └── DefaultTest2.java
│ │ │ └── rule3
│ │ │ │ └── DefaultTest3.java
│ │ ├── functionalinterfaces
│ │ │ └── DemoFI.java
│ │ ├── methodreferences
│ │ │ ├── CollectionStreams.java
│ │ │ ├── DemoInstanceMethodReferenceObject.java
│ │ │ ├── DemoInstanceMethodReferenceType.java
│ │ │ ├── DemoStaticMethodReference.java
│ │ │ ├── Studi.java
│ │ │ ├── Teaser.java
│ │ │ └── ThreadStarter.java
│ │ ├── nested
│ │ │ ├── DemoAnonymousInnerClass.java
│ │ │ ├── DemoComparator.java
│ │ │ ├── DemoFunctionalInterface.java
│ │ │ ├── DemoLambda.java
│ │ │ ├── Outer.java
│ │ │ ├── Studi.java
│ │ │ ├── StudiListNested.java
│ │ │ └── Wuppie.java
│ │ ├── optional
│ │ │ ├── streams
│ │ │ │ ├── Demo.java
│ │ │ │ ├── LSF.java
│ │ │ │ └── Studi.java
│ │ │ ├── teaser
│ │ │ │ ├── Demo.java
│ │ │ │ ├── LSF.java
│ │ │ │ └── Studi.java
│ │ │ └── traditional
│ │ │ │ ├── Demo.java
│ │ │ │ ├── LSF.java
│ │ │ │ └── Studi.java
│ │ ├── records
│ │ │ ├── DemoRecords.java
│ │ │ ├── Studi.java
│ │ │ ├── StudiR.java
│ │ │ ├── StudiS.java
│ │ │ └── StudiT.java
│ │ └── streams
│ │ │ ├── Demo.java
│ │ │ ├── Fachbereich.java
│ │ │ ├── LSF.java
│ │ │ ├── Studi.java
│ │ │ └── Studiengang.java
│ └── stream-api.md
├── misc
│ ├── dungeon.md
│ ├── images
│ │ ├── checklisteMotivation.png
│ │ ├── checklisteMotivationFarbig.png
│ │ ├── frameworkVSlib.uxf
│ │ ├── frameworksVSlib.png
│ │ ├── screenshot_dungeon_clone.png
│ │ ├── screenshot_dungeon_defaultlevel.png
│ │ ├── screenshot_dungeon_import_intellij.png
│ │ ├── screenshot_dungeon_import_intellij_asgradle.png
│ │ └── screenshot_dungeon_intellij_gradle.png
│ ├── intro-frameworks.md
│ ├── readme.md
│ └── src
│ │ ├── dungeon
│ │ ├── demo
│ │ │ ├── Main.java
│ │ │ ├── WalkerComponent.java
│ │ │ └── WalkerSystem.java
│ │ └── notes.txt
│ │ └── javalin
│ │ ├── build.gradle
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── src
│ │ └── main
│ │ └── java
│ │ ├── JavalinHelloWorld.java
│ │ └── JavalinRandomNumber.java
├── pattern
│ ├── command.md
│ ├── factory-method.md
│ ├── flyweight.md
│ ├── images
│ │ ├── command.drawio
│ │ ├── command.png
│ │ ├── composite.drawio
│ │ ├── composite.png
│ │ ├── factorymethod.png
│ │ ├── factorymethod.uxf
│ │ ├── flyweight.drawio
│ │ ├── flyweight.png
│ │ ├── hunde.png
│ │ ├── hunde.uxf
│ │ ├── hunde_strat.png
│ │ ├── hunde_strat.uxf
│ │ ├── lsf.png
│ │ ├── lsf.uxf
│ │ ├── observer.png
│ │ ├── observer.uxf
│ │ ├── observerexample.png
│ │ ├── observerexample.uxf
│ │ ├── parsetree.png
│ │ ├── parsetree_classes_uml.drawio
│ │ ├── parsetree_classes_uml.png
│ │ ├── parsetree_eval_print_uml.drawio
│ │ ├── parsetree_eval_print_uml.png
│ │ ├── parsetree_eval_uml.drawio
│ │ ├── parsetree_eval_uml.png
│ │ ├── parsetree_visitor_uml.drawio
│ │ ├── parsetree_visitor_uml.png
│ │ ├── template-method.drawio
│ │ ├── template-method.png
│ │ ├── translator.png
│ │ ├── translator.uxf
│ │ ├── visitor.drawio
│ │ └── visitor.png
│ ├── observer.md
│ ├── readme.md
│ ├── singleton.md
│ ├── src
│ │ ├── challenges
│ │ │ ├── command
│ │ │ │ ├── Cursor.java
│ │ │ │ ├── Direction.java
│ │ │ │ ├── Dwarf.java
│ │ │ │ ├── Key.java
│ │ │ │ └── Position.java
│ │ │ ├── flyweight
│ │ │ │ ├── Brett.java
│ │ │ │ ├── Figur.java
│ │ │ │ ├── Main.java
│ │ │ │ ├── Position.java
│ │ │ │ └── Typ.java
│ │ │ ├── observer
│ │ │ │ ├── Auftrag.java
│ │ │ │ ├── Einzelhandel.java
│ │ │ │ ├── Grosshandel.java
│ │ │ │ ├── Main.java
│ │ │ │ └── WarenTyp.java
│ │ │ └── visitor
│ │ │ │ ├── BinaryNode.java
│ │ │ │ ├── Main.java
│ │ │ │ ├── Node.java
│ │ │ │ ├── NodeVisitor.java
│ │ │ │ └── UnaryNode.java
│ │ ├── command
│ │ │ ├── sketch
│ │ │ │ ├── Buttons.java
│ │ │ │ ├── Command.java
│ │ │ │ ├── Entity.java
│ │ │ │ ├── Hero.java
│ │ │ │ ├── InputHandler.java
│ │ │ │ ├── InputHandler2.java
│ │ │ │ └── Jump.java
│ │ │ └── undo
│ │ │ │ ├── Buttons.java
│ │ │ │ ├── Command.java
│ │ │ │ ├── Entity.java
│ │ │ │ ├── Hero.java
│ │ │ │ ├── InputHandler3.java
│ │ │ │ ├── Jump.java
│ │ │ │ └── Move.java
│ │ ├── factory
│ │ │ └── FactoryBeispiel.java
│ │ ├── observer
│ │ │ ├── LSF.java
│ │ │ ├── Lecturer.java
│ │ │ ├── Observer.java
│ │ │ ├── ObserverBeispiel.java
│ │ │ ├── Person.java
│ │ │ ├── Student.java
│ │ │ └── Tutor.java
│ │ ├── singleton
│ │ │ ├── SingletonEager.java
│ │ │ └── SingletonLazy.java
│ │ ├── strategy
│ │ │ ├── SortDefault.java
│ │ │ ├── SortOwnCrit.java
│ │ │ ├── Studi.java
│ │ │ └── TranslatorExample.java
│ │ └── visitor
│ │ │ ├── direct
│ │ │ ├── AddExpr.java
│ │ │ ├── DemoExpr.java
│ │ │ ├── Expr.java
│ │ │ ├── MulExpr.java
│ │ │ └── NumExpr.java
│ │ │ └── visit
│ │ │ ├── extrav
│ │ │ ├── AddExpr.java
│ │ │ ├── DemoExpr.java
│ │ │ ├── EvalVisitor.java
│ │ │ ├── Expr.java
│ │ │ ├── ExprVisitor.java
│ │ │ ├── MulExpr.java
│ │ │ ├── NumExpr.java
│ │ │ └── PrintVisitor.java
│ │ │ └── intrav
│ │ │ ├── AddExpr.java
│ │ │ ├── DemoExpr.java
│ │ │ ├── EvalVisitor.java
│ │ │ ├── Expr.java
│ │ │ ├── ExprVisitor.java
│ │ │ ├── MulExpr.java
│ │ │ ├── NumExpr.java
│ │ │ └── PrintVisitor.java
│ ├── strategy.md
│ ├── template-method.md
│ ├── type-object.md
│ └── visitor.md
├── quality
│ ├── codingrules.md
│ ├── images
│ │ ├── aequivalenzklassen.odg
│ │ ├── aequivalenzklassen.png
│ │ ├── grenzwerte.png
│ │ ├── junitErgebnis.png
│ │ ├── junitIgnore.png
│ │ ├── logging.png
│ │ ├── newJUnit.png
│ │ ├── swfehler.png
│ │ ├── tdd.odg
│ │ └── tdd.png
│ ├── javadoc.md
│ ├── junit-basics.md
│ ├── logging.md
│ ├── mockito.md
│ ├── readme.md
│ ├── refactoring.md
│ ├── smells.md
│ ├── src
│ │ ├── challenges
│ │ │ └── refactor
│ │ │ │ ├── Article.java
│ │ │ │ ├── Bike.java
│ │ │ │ ├── Bill.java
│ │ │ │ ├── Brompton.java
│ │ │ │ ├── EBike.java
│ │ │ │ └── Mountainbike.java
│ │ ├── checkstyle.xml
│ │ ├── checkstyle
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── checkstyle.xml
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ └── src
│ │ │ │ └── main
│ │ │ │ └── java
│ │ │ │ └── wuppie
│ │ │ │ └── deeplearning
│ │ │ │ └── strategy
│ │ │ │ └── MyWuppieStudi.java
│ │ ├── formatter
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle.properties
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ └── src
│ │ │ │ └── main
│ │ │ │ └── java
│ │ │ │ └── wuppie
│ │ │ │ └── deeplearning
│ │ │ │ └── strategy
│ │ │ │ ├── MyWuppieStudi.java
│ │ │ │ └── MyWuppieStudi.java_orig
│ │ ├── junit4
│ │ │ ├── MyTestSuite4.java
│ │ │ ├── Studi.java
│ │ │ ├── Sum.java
│ │ │ ├── SumTestConstructor.java
│ │ │ ├── SumTestParameters.java
│ │ │ ├── Test4.java
│ │ │ └── TestAssume.java
│ │ ├── junit5
│ │ │ ├── MyTestSuite5.java
│ │ │ ├── Test5.java
│ │ │ ├── TestMethodSource.java
│ │ │ └── TestValueSource.java
│ │ ├── logging
│ │ │ ├── LoggingDemo.java
│ │ │ ├── LoggingHandler.java
│ │ │ ├── LoggingLevel.java
│ │ │ ├── LoggingParent.java
│ │ │ └── MyFormatter.java
│ │ ├── mockito
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── checkstyle.xml
│ │ │ ├── gradle.properties
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ ├── hsbi
│ │ │ │ │ ├── LSF.java
│ │ │ │ │ └── Studi.java
│ │ │ │ │ └── wuppie
│ │ │ │ │ ├── mock
│ │ │ │ │ ├── IWuppiWarenlager.java
│ │ │ │ │ └── WuppiStore.java
│ │ │ │ │ ├── spy
│ │ │ │ │ ├── IWuppiWarenlager.java
│ │ │ │ │ ├── Wuppi.java
│ │ │ │ │ ├── WuppiStore.java
│ │ │ │ │ └── WuppiWarenlager.java
│ │ │ │ │ ├── stub
│ │ │ │ │ ├── IWuppiWarenlager.java
│ │ │ │ │ ├── WuppiStore.java
│ │ │ │ │ └── WuppiWarenlagerStub.java
│ │ │ │ │ └── verify
│ │ │ │ │ └── FluppisListe.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ ├── hsbi
│ │ │ │ ├── MatcherTest.java
│ │ │ │ ├── StudiMockTest.java
│ │ │ │ ├── StudiSpyTest.java
│ │ │ │ ├── StudiStubTest.java
│ │ │ │ └── VerifyTest.java
│ │ │ │ └── wuppie
│ │ │ │ ├── mock
│ │ │ │ └── WuppiWarenlagerMockTest.java
│ │ │ │ ├── spy
│ │ │ │ └── WuppiWarenlagerSpyTest.java
│ │ │ │ ├── stub
│ │ │ │ └── WuppiWarenlagerStubTest.java
│ │ │ │ └── verify
│ │ │ │ └── VerifyFluppisListeTest.java
│ │ ├── refactoring
│ │ │ ├── Kurs.java
│ │ │ ├── KursTest.java
│ │ │ ├── Person.java
│ │ │ ├── PersonTest.java
│ │ │ ├── Studi.java
│ │ │ └── StudiTest.java
│ │ ├── spotbugs
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ └── src
│ │ │ │ └── main
│ │ │ │ └── java
│ │ │ │ └── wuppie
│ │ │ │ └── deeplearning
│ │ │ │ └── strategy
│ │ │ │ └── MyWuppieStudi.java
│ │ └── tdd
│ │ │ ├── PasswordChecker.java
│ │ │ ├── PasswordCheckerTest.java
│ │ │ └── anforderungen.md
│ ├── tdd.md
│ ├── testcases.md
│ └── testing-intro.md
└── readme.md
├── metadata.yml
├── pm.bib
├── pm.yaml
└── readme.md
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 4
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [Makefile]
13 | indent_style = tab
14 |
15 | [{*.sh, gradlew}]
16 | end_of_line = lf
17 |
18 | [{*.bat, *.cmd}]
19 | end_of_line = crlf
20 |
21 | [{*.hs, *.yaml}]
22 | indent_style = space
23 | indent_size = 2
24 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 |
3 | *.cmd text eol=crlf
4 | *.bat text eol=crlf
5 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @cagix
2 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
7 |
--------------------------------------------------------------------------------
/.github/workflows/beamer.yaml:
--------------------------------------------------------------------------------
1 | name: Beamer Slides
2 |
3 | on:
4 | # push on master branch
5 | push:
6 | branches: [master]
7 | # triggered manually
8 | workflow_dispatch:
9 |
10 | jobs:
11 | beamer:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v4
15 | with:
16 | fetch-depth: 0
17 | - uses: cagix/pandoc-lecture-zen@master
18 | with:
19 | mktarget: beamer
20 | pandoc_data: .pandoc
21 | metadata: pm.yaml
22 | publish_dir: _beamer
23 | - uses: peaceiris/actions-gh-pages@v4
24 | with:
25 | github_token: ${{ secrets.GITHUB_TOKEN }}
26 | publish_dir: _beamer
27 | publish_branch: _beamer
28 | force_orphan: true
29 |
--------------------------------------------------------------------------------
/.github/workflows/docsify.yaml:
--------------------------------------------------------------------------------
1 | name: Docsify Preview
2 |
3 | on:
4 | # push on master branch
5 | push:
6 | branches: [master]
7 | # triggered manually
8 | workflow_dispatch:
9 |
10 | jobs:
11 | docsify:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v4
15 | with:
16 | fetch-depth: 0
17 | - uses: cagix/pandoc-lecture-zen@master
18 | with:
19 | mktarget: docsify
20 | pandoc_data: .pandoc
21 | metadata: pm.yaml
22 | publish_dir: _docsify
23 | - uses: peaceiris/actions-gh-pages@v4
24 | with:
25 | github_token: ${{ secrets.GITHUB_TOKEN }}
26 | publish_dir: _docsify
27 | publish_branch: _docsify
28 | force_orphan: true
29 |
--------------------------------------------------------------------------------
/.github/workflows/gfm.yaml:
--------------------------------------------------------------------------------
1 | name: GitHub Preview
2 |
3 | on:
4 | # push on master branch
5 | push:
6 | branches: [master]
7 | # triggered manually
8 | workflow_dispatch:
9 |
10 | jobs:
11 | gfm:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v4
15 | with:
16 | fetch-depth: 0
17 | - uses: cagix/pandoc-lecture-zen@master
18 | with:
19 | mktarget: gfm
20 | pandoc_data: .pandoc
21 | metadata: pm.yaml
22 | publish_dir: _gfm
23 | - uses: peaceiris/actions-gh-pages@v4
24 | with:
25 | github_token: ${{ secrets.GITHUB_TOKEN }}
26 | publish_dir: _gfm
27 | publish_branch: _gfm
28 | force_orphan: true
29 |
--------------------------------------------------------------------------------
/.github/workflows/pdf.yaml:
--------------------------------------------------------------------------------
1 | name: PDF Handout
2 |
3 | on:
4 | # push on master branch
5 | push:
6 | branches: [master]
7 | # triggered manually
8 | workflow_dispatch:
9 |
10 | jobs:
11 | pdf:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v4
15 | with:
16 | fetch-depth: 0
17 | - uses: cagix/pandoc-lecture-zen@master
18 | with:
19 | mktarget: pdf
20 | pandoc_data: .pandoc
21 | metadata: pm.yaml
22 | publish_dir: _pdf
23 | - uses: peaceiris/actions-gh-pages@v4
24 | with:
25 | github_token: ${{ secrets.GITHUB_TOKEN }}
26 | publish_dir: _pdf
27 | publish_branch: _pdf
28 | force_orphan: true
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # IDE generated files #
2 | ######################
3 | .vscode/
4 | .idea/
5 | *.iml
6 | .project
7 | .metadata
8 | .settings/
9 | .externalToolBuilders/
10 | .classpath
11 |
12 |
13 | # Temporary files #
14 | ###################
15 | *~
16 | *.swp
17 | *.tmp
18 | *.bak
19 | .DS_Store
20 | ._*
21 |
22 |
23 | # Temporary directory #
24 | #######################
25 | tmp/
26 | temp/
27 | resources/
28 | docs/
29 | pdf/
30 |
31 |
32 | # Hugo / Pandoc related files #
33 | ###############################
34 | .hugo_build.lock
35 | local.yaml
36 | /data/readings.yaml
37 | .pandoc
38 | make.deps
39 | _gfm
40 | _docsify
41 | _pdf
42 | _beamer
43 |
44 |
45 | # JAVA, Scala #
46 | ###############
47 | *.class
48 | *.log
49 | *.jar
50 | hs_err_pid*
51 | replay_pid*
52 | *.hprof
53 | **/build/
54 | **/bin/
55 | **/out/
56 | **/target/
57 | .gradle/
58 | # don't ignore any gradle wrapper files
59 | !gradle/
60 |
61 |
62 | # Packages #
63 | ############
64 | *.dmg
65 | *.iso
66 | *.rar
67 | *.zip
68 | *.tgz
69 | *.tar.gz
70 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/.gitmodules
--------------------------------------------------------------------------------
/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/.nojekyll
--------------------------------------------------------------------------------
/CITATION.cff:
--------------------------------------------------------------------------------
1 | # This CITATION.cff file was generated with cffinit.
2 | # Visit https://bit.ly/cffinit to generate yours today!
3 |
4 | cff-version: 1.2.0
5 | title: Lecture "Programmieren 2"
6 | message: >-
7 | If you use this lecture material, please cite it using the
8 | metadata from this file.
9 | type: software
10 | authors:
11 | - given-names: Carsten
12 | family-names: Gips
13 | email: cagix@hsbi.de
14 | affiliation: HSBI
15 | orcid: 'https://orcid.org/0000-0002-4230-9060'
16 | repository-code: >-
17 | https://github.com/Programmiermethoden-CampusMinden/Prog2-Lecture
18 | abstract: >-
19 | This represents the lecture material for the lecture
20 | "Programmieren 2" (formerly known as
21 | "Programmiermethoden"), a course developed and taught at
22 | Bielefeld University of Applied Sciences.
23 | keywords:
24 | - java
25 | - git
26 | - refactoring
27 | - testing
28 | - clean code
29 | - oer
30 | license: CC-BY-SA-4.0
31 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | ## Source files of our project
2 | METADATA ?= pm.yaml
3 | OUTPUT_DIR ?= _gfm
4 |
5 | ## Folder to contain the Pandoc-Lecture-Zen project tooling
6 | PANDOC_DATA ?= .pandoc
7 |
8 |
9 | ## Update Pandoc-Lecture-Zen dependency
10 | update_tooling: $(PANDOC_DATA)
11 | cd $(PANDOC_DATA) && git switch master && git pull
12 |
13 | $(PANDOC_DATA):
14 | git clone git@github.com:cagix/pandoc-lecture-zen.git $(PANDOC_DATA)
15 |
16 |
17 | ## Include targets from Pandoc-Lecture-Zen Makefile
18 | -include $(PANDOC_DATA)/Makefile
19 |
20 |
21 | ## Declaration of phony targets
22 | .PHONY: update_tooling
23 |
--------------------------------------------------------------------------------
/admin/images/fahrplan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/admin/images/fahrplan.png
--------------------------------------------------------------------------------
/admin/planung_pm.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/admin/planung_pm.xlsx
--------------------------------------------------------------------------------
/admin/readme.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Organisatorisches"
3 | no_pdf: true
4 | no_beamer: true
5 | ---
6 |
--------------------------------------------------------------------------------
/homework/images/bridgetroll-annot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/homework/images/bridgetroll-annot.png
--------------------------------------------------------------------------------
/homework/images/bridgetroll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/homework/images/bridgetroll.png
--------------------------------------------------------------------------------
/homework/readme.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Praktikum"
3 | no_pdf: true
4 | no_beamer: true
5 | ---
6 |
7 |
8 | Hier finden Sie die Übungsblätter.
9 |
--------------------------------------------------------------------------------
/lecture/building/images/ci.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/ci.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot-githubci-job.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot-githubci-job.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot-githubci-triggeredworkflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot-githubci-triggeredworkflow.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot-githubci-workflows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot-githubci-workflows.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot-gitlabci-job.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot-gitlabci-job.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot-gitlabci-pipelines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot-gitlabci-pipelines.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot-gitlabci-triggeredpipeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot-gitlabci-triggeredpipeline.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot_github_actions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot_github_actions.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot_github_settings_actions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot_github_settings_actions.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot_github_settings_permissions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot_github_settings_permissions.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot_maven-lifecycle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot_maven-lifecycle.png
--------------------------------------------------------------------------------
/lecture/building/images/screenshot_maven-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/screenshot_maven-project.png
--------------------------------------------------------------------------------
/lecture/building/images/virtualisierung.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/virtualisierung.png
--------------------------------------------------------------------------------
/lecture/building/images/vscode-remote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Programmiermethoden-CampusMinden/Prog2-Lecture/bba3ae3786a25142d0d1b553996547cd2f02edfe/lecture/building/images/vscode-remote.png
--------------------------------------------------------------------------------
/lecture/building/readme.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Bauen von Programmen, Automatisierung, Continuous Integration"
3 | no_pdf: true
4 | no_beamer: true
5 | ---
6 |
--------------------------------------------------------------------------------
/lecture/building/src/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:latest
2 |
3 | ENV DEBIAN_FRONTEND noninteractive
4 | RUN apt-get -q --no-allow-insecure-repositories update \
5 | && apt-get install --assume-yes --no-install-recommends \
6 | openjdk-17-jdk \
7 | maven \
8 | ant \
9 | ivy \
10 | && rm -rf /var/lib/apt/lists/*
11 |
12 | ENTRYPOINT ["sh", "-c"]
13 |
--------------------------------------------------------------------------------
/lecture/building/src/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: Dockerfile
3 | docker build -t ubuntu-ant-maven -f Dockerfile .
4 |
5 | .PHONY: clean
6 | clean:
7 | -docker rmi ubuntu-ant-maven
8 |
9 | .PHONY: run
10 | run:
11 | docker run --rm -it -v "$(shell pwd):/data" -w "/data" -u "$(shell id -u):$(shell id -g)" --entrypoint "bash" ubuntu-ant-maven
12 |
13 | .PHONY: run_as_root
14 | run_as_root:
15 | docker run --rm -it -v "$(shell pwd):/data" -w "/data" --entrypoint "bash" ubuntu-ant-maven
16 |
--------------------------------------------------------------------------------
/lecture/building/src/ant/Hello.java:
--------------------------------------------------------------------------------
1 | /** Demo für Ant */
2 | public class Hello {
3 | /** Hier gibt's nix zu sehen, gehen Sie weiter :) */
4 | public static void main(String[] argv) {
5 | System.out.println("Hello World :-)");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/lecture/building/src/ant/hello.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
Wozu, warum, wieso :) Wozu, warum, wieso :) Wozu, warum, wieso :) 8 | * 9 | * @author Carsten Gips 10 | */ 11 | public class A { 12 | 13 | /** 14 | * Ein kurzer Satz, der im Abschnitt "Method Summary" stehen wird. 15 | * 16 | *
Es folgt die ausfuehrliche Beschreibung, die spaeter im Abschnitt "Method Detail"
17 | * erscheint, aber nicht in der Uebersicht.
18 | *
19 | * @return Info zu Klasse A
20 | * @see java.util.Calendar
21 | * @deprecated Wurde ersetzt durch {@link #wuppiefluppie()}.
22 | */
23 | // @Deprecated
24 | public String getInfo() {
25 | return "Klasse A";
26 | }
27 |
28 | /** Demo fuer Link-Ziel fuer Javadoc ... :) */
29 | public void wuppiefluppie() {}
30 | }
31 |
--------------------------------------------------------------------------------
/lecture/java-classic/src/annotations/WuppieAnnotation.java:
--------------------------------------------------------------------------------
1 | package annotations;
2 |
3 | import org.jetbrains.annotations.NotNull;
4 |
5 | public class WuppieAnnotation {
6 | public static void main(String[] args) {
7 | WuppieAnnotation w = new WuppieAnnotation();
8 | w.foo(null);
9 | }
10 |
11 | /** @param o must not be null */
12 | public void foo(@NotNull Object o) {
13 | int i = o.hashCode();
14 | }
15 |
16 | /** @param o should not be null */
17 | public void bar(Object o) {
18 | int i;
19 | if (o != null) {
20 | i = o.hashCode();
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lecture/java-classic/src/bounds/Cps.java:
--------------------------------------------------------------------------------
1 | package bounds;
2 |
3 | public class Cps Diese Schleife wird sequentiell ausgeführt: Erst die Ausgabe in main(), dann geht der
26 | * Kontrollfluss hier in die Methode und die Schleife wird ausgeführt, und danach geht der
27 | * Kontrollfluss wieder zurück nach main() und die letzte Ausgabe dort wird gemacht.
28 | */
29 | public void run() {
30 | IntStream.range(0, 10).mapToObj(i -> "in run(): " + incrVal()).forEach(System.out::println);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lecture/java-classic/src/reflection/Wuppie.java:
--------------------------------------------------------------------------------
1 | package reflection;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * Dummy-Annotation.
10 | *
11 | * Kann an Methoden angewendet werden, bleibt zur Laufzeit auswertbar.
12 | */
13 | @Target(value = ElementType.METHOD)
14 | @Retention(value = RetentionPolicy.RUNTIME)
15 | public @interface Wuppie {
16 | String value() default "wuppie";
17 | }
18 |
--------------------------------------------------------------------------------
/lecture/java-classic/src/regexp/Backref.java:
--------------------------------------------------------------------------------
1 | package regexp;
2 |
3 | /** Demo für Backreferences */
4 | public class Backref {
5 | /** Starter - use the debugger */
6 | public static void main(String[] args) {
7 | boolean e;
8 |
9 | e = "1212".matches("(\\d\\d)\\1");
10 | e = "1223".matches("(\\d\\d)\\1");
11 | e = "1212".matches("(?