DCV 2022 03/Strukturierte Programmierung Uebungen: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Gyula (Diskussion | Beiträge)
Gyula (Diskussion | Beiträge)
Zeile 629: Zeile 629:
# Sortiere der Größe nach aufsteigend (Ascending)
# Sortiere der Größe nach aufsteigend (Ascending)
# Sortiere der Größe nach absteigend (Descending)
# Sortiere der Größe nach absteigend (Descending)
=== Bonusaufgabe: 15 Differenz Sort Algorithmen ===
Implementiere 3 unterschiedliche Algorithmen (nach deinem Wahl)
https://www.youtube.com/watch?v=kPRA0W1kECg


=== Aufgabe: Bubblesort mit Strings ===  
=== Aufgabe: Bubblesort mit Strings ===  

Version vom 28. März 2022, 12:40 Uhr

Im folgenden finden sich verschiedene Übungsaufgaben für den Bereich der Strukturierten Programmierung in Java. Es müssen nicht alle Aufgaben zur Gänze gelöst werden. Es sollten jedoch einige Aufgaben dabei Sein die ihr lösen könnt:-)

Solltet ihr Fehler finden dürft ihr diese gerne beheben, es ist ein Wiki
Habt ihr Fragen, so meldet euch einfach
Befindet sich bei einer Aufgabe eine Nummerierung im Inhalt, so sind diese als unterschiedliche Varianten anzusehen. Also eigentlich mehrere Aufgaben. Ihr dürft aber gerne auf bestehenden Code zurückgreifen

Schleifen

Aufgabe: Zählen

Zähle in einer Schleife von 0 bis inklusive 10 und gib die Zahlen aus.

  1. Verwende dazu eine for-Schleife
  2. Verwende dazu eine while-Schleife und erstelle eine separate Zählvariable

Aufgabe: Zählen 2

Zähle in einer Schleife von 0 bis exklusive 10 und gib die Zählvariable aus.

Aufgabe: Zählen mit Trick

Zähle in einer Schleife von 0 bis inklusive 10 gib nur jede gerade Zahl aus.

  1. Verwende um zu prüfen ob es eine gerade Zahl ist den Modulo Operator
  2. Modifiziere die Zählvariable so, dass die Zählvariable nur jede gerade Zahlen enthält

Aufgabe: Rewind

Zähle in einer Schleife rückwärts von 10 bis inklusive -10 und gib die Zählvariable aus.

Methoden & Schleifen

Wähle immer einen sinnvollen Methodennamen der beschreibt was die Methode macht und überlege dir Rückgabewert und Übergabeparameter gut. Teste deine Methoden ausgiebig. Überlege auch immer gut, was du alles in Methoden auslagern kannst. Es macht dir die Übungen leichter.

Wenn du es als sinnvoll erachtest, greife auf Methoden von anderen Übungen zu (aber schreib sie zumindest einmal selbst).

Aufgabe: Print Characters

Erstelle eine Methode die eine bestimmte Anzahl parameterisierbarer Zeichen einer Zeile ausgibt.

Aufruf:

printChars("x", 10);

Ausgabe:

xxxxxxxxxx

Aufgabe: Print Square

Erstelle eine Methode welche ein Quader mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printSquare("x", 10);

Ausgabe:

xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx

Aufgabe: Print Rectangle

Erstelle eine Methode welche ein Viereck mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printRect("x", 10, 3);

Ausgabe:

xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx

Aufgabe: Print Trinangle (1)

Erstelle eine Methode welche ein Dreieck mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printTriangleBottomLeft("x", 4);

Ausgabe:

x
xx
xxx
xxxx

Aufgabe: Print Trinangle (2)

Erstelle eine Methode welche ein Dreieck mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printTriangleTopLeft("x", 5);

Ausgabe:

xxxxx
xxxx
xxx
xx
x

Aufgabe: Print Trinangle (3)

Erstelle eine Methode welche ein Dreieck mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printTriangleTopRight("x", 5);

Ausgabe:

xxxxx
 xxxx
  xxx
   xx
    x

Aufgabe: Print Trinangle (4)

Erstelle eine Methode welche ein Dreieck mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printTriangleBottomRight("x", 5);

Ausgabe:

#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
    x
   xx
  xxx
 xxxx
xxxxx

Aufgabe: Print Empty Square

Erstelle eine Methode welche ein Quader mit variabler Größe und mit angegebenem Zeichen ausgibt.

Aufruf:

printEmptySquare("x", 10);

Ausgabe:

xxxxxxxxxx
x        x
x        x
x        x        
x        x
x        x
x        x
x        x
x        x
xxxxxxxxxx

Aufruf:

printEmptySquare("A", 3);

Ausgabe:

AAA
A A
AAA

Aufgabe: Print Slash

Erstelle eine Methode welche eine Diagonale von variabler Größe und mit angegebene Zeichen ausgibt, weiters soll der Parameter backslash angegeben werden können. Wenn backslash wahr ist, soll die Diagonale von rechts Unten nach Links Oben gehen, ansonsten umgekehrt.

Aufruf:

printSlash("x", 3, true);

Ausgabe:

x
 x
  x

Aufruf:

printSlash("y", 4, false);

Ausgabe:  

#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
   y
  y
 y
y

Aufgabe: Print Triangle

Erstelle eine Methode welche ein Dreick von variabler Größe und mit angegebene Zeichen ausgibt. Dabei sollen die angegebene Größe die Höhe des Dreicks sein. Nimm an dass die Zahl immer Ungerade ist.

Aufruf:

printTriangle("x", 3);

Ausgabe:

#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
  x
 x x
xxxxx

Aufruf:

printTriangle("x", 5);

Ausgabe:

#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
    x
   x x
  x   x
 x     x
xxxxxxxxx

Aufruf:

printTriangle("x", 1);

Ausgabe:

x

Aufgabe: Print Rhombus

Erstelle eine Methode welche einen Rhombus von variabler Größe und mit angegebene Zeichen ausgibt. Die Größe soll dabei die Höhe des Rhombus sein.

  1. Löse das Problem wie es dir gefällt
  2. Löse das Problem mit nur zwei ineinander verschachtelten Schleifen

Aufruf: printRhombus("x", 7);

#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
   x
  x x
 x   x
x     x
 x   x
  x x
   x

Aufgabe: Print X

Erstelle eine Methode welche ein X von variabler Größe und mit angegebene Zeichen ausgibt.

  1. Löse das Problem wie es dir gefällt
  2. Löse das Problem mit nur zwei ineinander verschachtelten Schleifen

Aufruf:

printX('x', 5);

Ausgabe:

x   x
 x x
  x
 x x
x   x

Aufgabe: Print Christmastree

Erstelle eine Methode welche einen Christbaum von variabler Größe ausgibt.

Teile das Problem in kleinere Probleme auf!

Aufruf:

printChristmasTree(9);

Ausgabe:

#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
        *
       ***
      *****
     *******
    *********
   ***********
  *************
 ***************
*****************
O O O O O O O O O
      +++++
      +++++

Bonusaufgabe: Print circle Pythagoras

Erstelle eine Methode welche einen ausgefüllten Kreis von variabler Größe ausgibt. Der Radius des Kreises soll als Parameter übergeben werden können.

Verwende dazu den Satz des Pythagoras: a2 + b2 = c2

Aufruf:

printCirclePythagoras(10);

Ausgabe:

Eine Zeile des IntelliJ Terminals ist etwa 2.6 * höher als ein Zeichen breit ist, dadurch sieht die Ausgabe verzerrt aus.
#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
      XXXXXXXXX     
     XXXXXXXXXXX    
   XXXXXXXXXXXXXXX  
   XXXXXXXXXXXXXXX  
  XXXXXXXXXXXXXXXXX 
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXX
  XXXXXXXXXXXXXXXXX 
   XXXXXXXXXXXXXXX  
   XXXXXXXXXXXXXXX  
     XXXXXXXXXXX    
      XXXXXXXXX

Bonusaufgabe: Print circle Sinus + Cosinus

Erstelle eine Methode welche einen Kreis von variabler Größe ausgibt. Der Radius des Kreises soll als Parameter übergeben werden können.

Verwende dazu Math.sin(...) und Math.cos(...) um herauszufinden ob ein Punkt gezeichnet werden soll.

Aufruf:

printCircleSinCos(10);

Ausgabe:

Eine Zeile des IntelliJ Terminals ist etwa 2.6 * höher als ein Zeichen breit ist, dadurch sieht die Ausgabe verzerrt aus.
#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
     **********     
    **        **    
  **            **  
  *              *  
 *                * 
**                **
*                  *
*                  *
*                  *
*                  *
*                  *
*                  *
*                  *
*                  *
**                **
 *                * 
  *              *  
  **            **  
    **        **    
     **********

Native Datentypen

Im folgenden werden verschiedene Datentypen verwendet. Erstelle wo nötig Methoden um die Komplexität gering zu halten.

Aufgabe: Von 0 bis 100 Zählen mit 0.1 Schritt

Erstelle eine Funktion, die von 0 bis 100 mit 0.1 Schritte zählt, und alle werte Ausdrückt (Zwei Lösungsweg ist auch möglich)

Aufgabe: Divide et impera

Schreibe ein Program mit Ergebnis:

  • 4?
  • Ein drittel von 4?
  • Ein fünftel von 4?
  • Ein siebtel von 4?

Aufgabe: Kalkulation von Pi (Leibniz Reihe)

Rechne die Annäherung von Pi mit der Formel π = (4/1) - (4/3) + (4/5) - (4/7) + (4/9) - (4/11) + (4/13) - (4/15) ...

(Original aus: https://www.wikihow.com/Calculate-Pi)

Benutze double Datentypen.

Wie genau ist deine Lösung?

Aufgabe: Kalkulation von Pi (Nilakantha Reihe)

Rechne die Annäherung von Pi mit der Formel π = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6*7*8) - 4/(8*9*10) + 4/(10*11*12) - 4/(12*13*14)

(Original aus: https://www.wikihow.com/Calculate-Pi)

Benutze double Datentypen.

Wie genau ist deine Lösung?

Aufgabe: Geheime Reihe

Starte eine neue Reihe mit dem Wert 1.0

Für jede weitere WertN+1 = WertN/2 + 1/WertN

Wohin führt diese Reihe?

Aufgabe: Ratespiel

Schreibe eine Funktion die aus einer Positive Zahl (double) deren Wurzeln annähern kann.

Input: eine Zahl von 1 bis 10000 (double)

Beim jeden Zyklus nehmen wir die Mitte und versuchen wir als Wurzeln verwenden.

Wenn es größer als der Zielzahl ist, nehmen wir die Mitte als MAXIMUM, sonst als neue MINIMUM.

Lass eine gute Schätzung auf Wurzeln geben.

Input

Im folgenden werden verschiedene Aufgaben zum Lesen von Userinput gestellt. Erstelle wo nötig Methoden um die Komplexität gering zu halten.

Aufgabe: String einlesen

Lies mit Hilfe des berühmten Scanners einen String des Benutzers ein und gib diesen aus.

Aufgabe: Zahl einlesen

Lies mit Hilfe des berühmten Scanners einen int des Benutzers ein und gib diese aus.

  1. Wird keine Zahl eingegeben kann das Programm abstürzen
  2. Frag solange nach einer Zahl bis auch eine eingegeben wurde, das Programm darf bei Fehleingabe nicht abstürzen

Aufgabe: Ratespiel

Es soll eine beliebige Zahl zwischen 0 und 100 mittels new Random().nextInt(...) gewählt werden. Nun soll die Zahl durch Eingabe über die Konsole erraten werden. Ist die Zahl zu hoch oder zu niedrig, so soll diese Information ausgegeben werden. Wurde die Zahl getroffen, so ist das Spiel gewonnen und das Programm wird beendet.

Wird keine Zahl eingegeben so darf das Programm nicht abstürzen und es soll erneut nach einer Zahl gefragt werden.

Ausgabe

Willkommen beim super coolen Zahlen Ratespiel!
Errate die Zahl zwischen 0 und 100!
Gib die Zahl nun ein:
>>>4
Die Zahl ist zu niedrig!
>>>90
Die Zahl ist zu hoch!
>>>30
Die Zahl ist zu hoch!
>>>15
Du hast gewonnen!!!

Aufgabe: Erweitere die früheren Aufgaben um Benutzereingabe

Erweitere deine früheren Lösungen so, dass die Parameter über die Konsole eingegeben werden können.

Aufgabe: Menü

Erstelle ein Menü dass über die Konsole gesteuert werden kann. Durch dieses Menü können die verschiedenen geometrischen Programme ausgewählt und ausgeführt werden. Hierbei kann auf die Methode der vorhergehenden Aufgabe zurückgegriffen werden.

Ausgabe

Willkommen bei meinen Aufgaben!
Was möchten Sie zeichnen?
1) Christbaum
2) Quader
3) Rhombus
Bitte wählen Sie nun?
>>>2
Wie groß soll der Quader sein?
>>>4
Welches Zeichen soll verwendet werden?
>>>*
****
*  *
*  *
****
Möchten Sie noch etwas zeichnen? (j/n)
>>>n
Auf Wiedersehen!

}

Aufgabe: Taschenrechner

Erstelle einen Taschenrechner. Lies mit Hilfe berühmten Scanners vom Benutzer zuerst einen float ein, dann den Operator (+,-,*,^,/), dann wieder einen float ein. Nach dem einlesen führe die gewünschte Rechenoperation aus. Bei Fehleingaben egal ob bei den Zahlen oder beim Operator, soll erneut nachgefragt werden.

Aufgabe: Taschenrechner (Code Review)

Mach ein Code Review mit einem von deinen Kollegen, identifiziere Verbesserungspotentiale (z.B. Code-Duplikate zu eliminieren)

Aufgabe: Taschenrechner extended

Erweitere den Taschenrechner aus der vorhergehenden Aufgabe so, dass nach der Berechnung nachgefragt wird, ob eine neue Berechnung stattfinden soll, falls nicht, soll das Programm beendet werden.

Bonusaufgabe: Taschenrechner weiterrechnen

Erweiter deinen Taschenrechner mit der Funktion, um das Zwischenergebnis weiterverwenden zu können

Zum Beispiel:

3

+

2 (Ergebnis: 5)

*

4 (Ergebnis: 20)

/

40 (Ergebnis: 0.5)


Bonusaufgabe: Taschenrechner mit Memory Funktion

Erweiter deinen Taschenrechner mit der Memory Funktion.

Neue Operationen sind:

MC Memory Clear

M+ Memory Add

M- Memory Sub

MR Memory Read

Die erwartete Funktion ist identisch mit dem normalen Taschenrechner


Bonusaufgabe: Visitenkarte

Erstelle eine Applikation, die vom Benutzer seine Daten abfragt und die Daten schön (ASCII Graphisch) auf Konsole darstellt. Das Ziel ist, wie eine echte Visitenkarte aussehen lassen.

Anforderungen:

  • Stern als Zeichen für Kartenrand
  • Die Proportion der Karte entspricht dem Original (85mm x 55mm)
  • Design (in der Mitte zentriert) Siehe: das Bild

Bonusaufgabe: Das Spiel beginnt

Erstelle ein Spiel, welche der Spieler fordert heraus eine Zahl zwischen 0 und 9999 zu erraten.

Ablauf:

  • Der Computer denkt eine Zahl aus.
Random rand = new Random();
int value = rand.nextInt(10000);
  • Der Benutzer muss durch Konsole eine Zahl eingeben
  • Das Spiel antwortet
    • So viele Ziffern sind korrekt und auf dem richtigen Platz
    • So viele Ziffern sind vorhanden, aber stehen auf dem falschen Platz

Zum Beispiel:

( Der Computer hat die Zahl: 1234 )
Der Spieler wählt die 2354
Die Antwort lautet: 1 Ziffer ist korrekt, weitere 2 Ziffern sind vorhanden

Das Spiel endet, wenn:

  • der Spieler die richtige Zahl erraten hat
  • der Spieler hat nach 20 Versuchen immer noch kein Erfolg

Arrays

Im folgenden finden sich Aufgaben für Arrays und deren Sortierung.

Aufgabe: Number Array

Erstelle ein int[] mit der Dimension von Benutzerangabe und befülle mit 1, 2, 3, usw.

Erstelle ein zweites int[] und befülle mit Zahlen entsprechend der Größe ..., 3, 2, 1.


Aufgabe: Kopie

Erstelle eine Funktion, die aus dem Parameter Array eine Kopie erstellt.

public static int[] makeACopy(int[] original){
}


Aufgabe: Random Number Array

Erstelle ein int[] und befülle es mit Zufallszahlen von 0 bis 100.

Random random  new Random();
...
int randomNumber  random.nextInt([Upper bound]);
  1. Gib es mit Hilfe einer foreach-Schleife aus.
  2. Gib es mit Hilfe einer fori-Schleife aus. Das Ziel ist eine identische Ausgabe, wie beim Arrays.toString()
  3. Gib den zweiten, fünften und zehnten Wert des Arrays aus.
  4. Gib jeden zweiten Wert des int[] mit Hilfe einer Schleife aus aus.

Aufgabe: Random Number Array Crazy Range

Erstelle ein int[] und befülle es mit Zufallszahlen von -50 bis 50 und gib es mit Hilfe einer foreach-Schleife aus.


Aufgabe: Random Number Array Zählen

Erstelle ein int[] und befülle es mit Zufallszahlen von 1 bis 100.

Erstelle eine Funktion, die die Werte größer als 30 zählt.

Aufgabe: Random Number Array Summe

Erstelle ein int[] und befülle es mit Zufallszahlen von 1 bis 100.

Erstelle eine Funktion, die die Summe der Werte zurückgibt.

Aufgabe: Random Number Array Min/Max/Avg

Erstelle ein int[] und befülle es mit Zufallszahlen von 1 bis 100. Erstelle jeweils eine Methode für das Minimum, das Maximum und den Durchschnitt. Die Methoden sollen jeweils den Wert zurückgeben (nicht Ausgeben). In der main Methode Rufe die Methoden mit den Zufallszahlen auf und gib diese aus.


Aufgabe: Bubblesort mit Zahlen

Erstelle ein int[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode.

  1. Sortiere der Größe nach aufsteigend (Ascending)
  2. Sortiere der Größe nach absteigend (Descending)

Bonusaufgabe: 15 Differenz Sort Algorithmen

Implementiere 3 unterschiedliche Algorithmen (nach deinem Wahl) https://www.youtube.com/watch?v=kPRA0W1kECg


Aufgabe: Bubblesort mit Strings

Verwende das gegebene String[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode.

  1. Sortiere die Namen aufsteigend (Ascending)
  2. Sortiere die Namen absteigend (Descending)
Tip.: Strings können mit der Instanz Methode compareTo der String Klasse verglichen werden: "a".compareTo("b")
String[] names  new String[]{"Plamena", "Sadaaq", "Gyula", "Eray", "Gerri", "Stefan", "Lena", "Danny", "Ömer", "Stjepan", "Sandro", "Bartosz", "Ingo", "Rauan", "Mahir", "Lukas", "Niklas"};

Aufgabe: Bubblesort mit Strings Extended

Verwende das aus der vorhergehenden Aufgabe gegebene String[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode. Die Methode soll nun zusätzlich zum String[] Parameter einen weiteren boolean als Parameter erhalten. Dieser boolean entscheidet, ob das String[] aufsteigend, oder absteigend sortiert wird.

Aufgabe: Bubblesort mit Strings an Character Index

Verwende das aus der vorhergehenden Aufgabe gegebene String[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode. Die Methode soll nun zusätzlich zum String[] Parameter einen weiteren int als Parameter erhalten. Dieser int steht für den Index des char im String nach dem sortiert werden soll. Prüfe zuerst ob die Sortierung nach dem gegebenen Index erfolgen kann. Wenn der Index zu groß ist, mach eine entsprechende Ausgabe und sortiere nicht.

Kalender

Im folgenden sollen einige Funktionen der Calendar Api erlernt werden.

Aufgabe: Wann ist Sonntag?

Erstelle eine neue Calendar Instanz und gib das Datum des nächsten Sonntags aus.

Aufgabe: Wieviele Sonntage hat der Monat?

Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der Sonntage zurückgibt. Teste diese Methode in der main Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.

Aufruf:

System.out.println(getSundays(2021, 10));

Ausgabe:

5

Aufruf:

System.out.println(getWorkdays(2021, 9));

Ausgabe:

4

Aufgabe: Wieviele Arbeitstage?

Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der Arbeitstage zurückgibt (Mo-Fr). Teste diese Methode in der main Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.

Aufruf:

System.out.println(getWorkdays(2021, 6));

Ausgabe:

22

Aufruf:

System.out.println(getWorkdays(2021, 3));

Ausgabe:

23

Aufruf:

System.out.println(getWorkdays(2021, 2));

Ausgabe:

20

String Operationen

Im folgenden sollen die String Operationen replaceAll(...), matches(...), split(...) erarbeitet werden.

Aufgabe: Email Regex aka. Regbert

Erstelle einen regulären Ausdruck (Regular Expression) für Email Adressen.

String regex = "[richtiger Regex hier]";

Aufruf          System.out.println("alfons@drlue.at".matches(regex));          Ausgabe          true

Aufruf          System.out.println("rambina.alfons@drlue.at".matches(regex));          Ausgabe          true

Aufruf          System.out.println("rambina1.1alfons@drlue.at".matches(regex));          Ausgabe          true

Aufruf          System.out.println("1rambina1.alfons@drlue.at".matches(regex));          Ausgabe          false

Aufruf          System.out.println("@drlue.at".matches(regex));          Ausgabe          false

Aufruf          System.out.println("drlue.at".matches(regex));          Ausgabe          false

Aufruf          System.out.println("asdf@drlue".matches(regex));          Ausgabe          false

Aufruf          System.out.println("asdf@microsoft.c".matches(regex));          Ausgabe          false

Aufgabe: Replace all

Ersetze im String

"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"

wird durch war und ist und gib ihn aus.

Aufgabe: Replace all 2

Lösche im String

"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"

  1. Jeden Kleinbuchstaben und gib ihn aus
  2. Jeden Großbuchstaben und gib ihn aus
  3. Jedes Leerzeichen und gib ihn aus
  4. Jedes Ausrufezeichen ! und gib ihn aus

Aufgabe: Replace all 3

Lösche im String

"749813247132984712039487123049871204398712039487"

  1. Alle Zahlen von 0 bis 9 und gib ihn aus
  2. Alle Zahlen von 1 bis 9 und gib ihn aus
  3. Alle Zahlen von 2 bis 4 und gib ihn aus
  4. Alle Zahlen von 1 bis 3 und 6 bis 9 und gib ihn aus

Aufgabe: Split

Erstelle eine Methode welche den String

"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"

mit Hilfe eines gegebenen Strings zerlegt, welcher als Parameter mitgegeben wird und den das String[] zurückgibt. Füge das String[] mittels eines StringBuilder wieder zusammen füge jedoch nach jedem append auch einen System.lineSeparator() hinzu. Gib dann den String den du vom StringBuilder erhältst aus. Teste deine Methode in der main Methode mit einigen Beispielen.

Aufruf

String[] words = wordSplit(text, "Tag");
...

Ausgabe

Heute wird ein guter 
! Heute wird der beste 
 überhaupt! Heute wird ein spitzen super 
!

Aufgabe: Split & Sort

Erstelle eine Methode welche den String

"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"

in seine Worte zerlegt. Sortiere dann die Worte mit Bubblesort. Füge das String[] mittels eines StringBuilder wieder zusammen gib dann den String, den du von StringBuilder erhältst aus.

Datenströme

Im folgenden geht es um das einlesen und verarbeiten von Textdateien. Erstelle wo möglich und nötig für die einzelnen Schritte eine eigene Methode. Verwende dazu die Datei file.txt im assets Ordner.

String path = "assets/file.txt";

Aufgabe: File einlesen und Ausgeben

Lies das File mit hilfe von Scanner oder BufferedRead ein und gib es aus.

Aufgabe: Buchstaben zählen

Lies das File mit hilfe von Scanner oder BufferedRead ein.

  1. Gib die Anzahl der Buchstaben aus
  2. Erstelle eine Methode welche nur einen bestimmten Buchstaben des Texts zählt, welcher als Parameter mitgegeben wird.
  3. Erstelle eine Methode welche ein char[] von Bestimmten Buchstaben des Texts zählt. Das char[] soll als Parameter mitgegeben werden können. Es soll nur die Gesamtzahl aller Vorkommnisse der Buchstaben gezählt werden. Wie oft ein einzelner Buchstabe vorkommt ist hier uninteressant.

Tip zu 2)

System.out.println(countChar(text, 'a'));

Tip zu 3)

char[] charsToCount = new char[]{'a', 'z', 'e'};
System.out.println(countChars(text, charsToCount));

Aufgabe: Wörter zählen

Lies das File mit Hilfe von Scanner oder BufferedRead ein. Und gib die Anzahl der Wörter aus. Es muss nicht exakt sein.

Aufgabe: Dynamisches Wörter zählen

Lies das File mit Hilfe von Scanner oder BufferedRead ein. Frage den Benutzer nach einem bestimmten Wort und gib aus wie oft es vorkommt.

Aufgabe: Dynamisches Wörter ersetzen

Lies das File mit Hilfe von Scanner oder BufferedRead ein. Frage den Benutzer nach zwei Wörtern. Das erste Wort soll durch das zweite Wort im Text ersetzt werden. Gib dannach den Text aus.

Aufgabe: File schreiben

Lies solange eingaben vom Benutzer, bis eine Leerzeile eingegeben wird. Dann schreibe die Eingaben in eine Datei. Der Pfad soll lauten assets/tmp/output.txt.

Comma Separated Value

CSV Dateien sind strukturierte Textdateien, die durch einen Separator (z.B.: ,) getrennt sind.

Aufgabe: Read and Display

Lies die CSV Datei assets/sales_100.csv ein und speichere diese in einem String. Zerlege den String zuerst nach Zeilen, dann nach Spalten und erstelle somit ein String[][], ein zweidimensionales Array. Gib nun mit Hilfe des String[][], die Daten schön formatiert aus.

Aufgabe: Read and Display optimiert

Verarbeite die CSV Datei wie in der vorhergehenden Aufgabe. Für die Ausgabe finde zuerst die optimale Spaltenbreite für jede Spalte.

Aufgabe: Read and Display sortiert

Verarbeite die CSV Datei wie in den vorhergehenden Aufgaben. Weiters erfrage vom Benutzer nach welcher Spalte die Datei sortiert werden soll. Suche nach der Eingabe zuerst nach der gewünschten Spalte. Ist diese vorhanden, sortiere das String[][] lexikografisch und gib es aus.

Achtung der Header darf nicht sortiert werden!!! Achtung

Aufgabe: Read and Display sortiert extended

Verfahre wie in der vorhergehenden Aufgabe. Handelt es sich bei dem Inhalt einer Spalte um Zahlen so behandle diese auch als solche.

Tip: Float.parseFloat(...), Integer.parseInt(...)

Aufgabe: Read and Write

Lies und verarbeite die CSV Datei wie in vorhergehender Aufgabe ein. Schreib das String[][] als CSV nun in eine neue Datei. Verwende als Separator (Trennzeichen) ;.