Strukturierte Programmierung Uebungen: Unterschied zwischen den Versionen
Drlue (Diskussion | Beiträge) |
Drlue (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Im folgenden finden sich verschiedene Übungsaufgaben für den Bereich der Strukturierten Programmierung in Java. Es müssen nicht alle Aufgaben zur | 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:-)''' | ||
Befindet sich bei einer Aufgabe eine Nummerierung im Inhalt, so sind diese als unterschiedliche Varianten anzusehen. | '''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 = | = Schleifen = | ||
=== Aufgabe: Zählen === | === Aufgabe: Zählen === | ||
| Zeile 19: | Zeile 23: | ||
= Methoden & Schleifen = | = 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. Wenn | 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 === | === Aufgabe: Print Characters === | ||
Erstelle eine Methode die eine bestimmte Anzahl parameterisierbarer Zeichen einer Zeile ausgibt. | Erstelle eine Methode die eine bestimmte Anzahl parameterisierbarer Zeichen einer Zeile ausgibt. | ||
| Zeile 222: | Zeile 226: | ||
=== Aufgabe: Bubblesort mit Strings Extended === | === Aufgabe: Bubblesort mit Strings Extended === | ||
Verwende das aus der vorhergehenden Aufgabe gegebene {{JSL|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 {{JSL|main}} Methode. Die Methode soll nun zusätzlich zum {{JSL|String[]}} Parameter einen weiteren {{JSL|boolean}} als Parameter erhalten. Dieser {{JSL|boolean}} entscheidet, ob das {{JSL|String[]}} '''aufsteigend''', oder '''absteigend sortiert wird. | Verwende das aus der vorhergehenden Aufgabe gegebene {{JSL|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 {{JSL|main}} Methode. Die Methode soll nun zusätzlich zum {{JSL|String[]}} Parameter einen weiteren {{JSL|boolean}} als Parameter erhalten. Dieser {{JSL|boolean}} entscheidet, ob das {{JSL|String[]}} '''aufsteigend''', oder '''absteigend''' sortiert wird. | ||
=== Aufgabe: Bubblesort mit Strings | === Aufgabe: Bubblesort mit Strings an Character Index === | ||
Verwende das aus der vorhergehenden Aufgabe gegebene {{JSL|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 {{JSL|main}} Methode. Die Methode soll nun zusätzlich zum {{JSL|String[]}} Parameter einen weiteren {{JSL|int}} als Parameter erhalten. Dieser int steht für den Index des {{JSL|char}} im {{JSL|String}} nach dem sortiert werden soll. | Verwende das aus der vorhergehenden Aufgabe gegebene {{JSL|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 {{JSL|main}} Methode. Die Methode soll nun zusätzlich zum {{JSL|String[]}} Parameter einen weiteren {{JSL|int}} als Parameter erhalten. Dieser {{JSL|int}} steht für den Index des {{JSL|char}} im {{JSL|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. | 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 = | = Kalender = | ||
Im folgenden sollen einige | Im folgenden sollen einige Funktionen der {{JSL|Calendar}} Api erlernt werden. | ||
=== Aufgabe: Wann ist Sonntag? === | === Aufgabe: Wann ist Sonntag? === | ||
| Zeile 283: | Zeile 287: | ||
Im folgenden sollen die {{JSL|String}} Operationen {{JSL|replaceAll(...)}}, {{JSL|matches(...)}}, {{JSL|split(...)}} erarbeitet werden. | Im folgenden sollen die {{JSL|String}} Operationen {{JSL|replaceAll(...)}}, {{JSL|matches(...)}}, {{JSL|split(...)}} erarbeitet werden. | ||
=== Aufgabe: | === Aufgabe: Email Regex aka. Regbert === | ||
Erstelle einen '''regulären Ausdruck''' ('''Reg'''ular '''Ex'''pression) für Email Adressen. | |||
{{JML|code= | |||
String regex = "[richtiger Regex hier]"; | |||
}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("rambina.alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("rambina1.1alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("1rambina1.alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("asdf@drlue".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("asdf@microsoft.c".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
=== Aufgabe: Replace all === | === Aufgabe: Replace all === | ||
Ersetze im {{JSL|String}} | |||
{{JSL|"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 {{JSL|String}} | |||
{{JSL|"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"}} | |||
# Jeden '''Kleinbuchstaben''' und gib ihn aus | |||
# Jeden '''Großbuchstaben''' und gib ihn aus | |||
# Jedes '''Leerzeichen''' und gib ihn aus | |||
# Jedes '''Ausrufezeichen !''' und gib ihn aus | |||
=== Aufgabe: Replace all 3 === | |||
Lösche im {{JSL|String}} | |||
{{JSL|"749813247132984712039487123049871204398712039487"}} | |||
# Alle Zahlen von '''0 bis 9''' und gib ihn aus | |||
# Alle Zahlen von '''1 bis 9''' und gib ihn aus | |||
# Alle Zahlen von '''2 bis 4''' und gib ihn aus | |||
# Alle Zahlen von '''1 bis 3''' und '''6 bis 9''' und gib ihn aus | |||
=== Aufgabe: Split === | === Aufgabe: Split === | ||
Erstelle eine Methode welche den {{JSL|String}} | |||
{{JSL|"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 {{JSL|String[]}} zurückgibt. Füge das {{JSL|String[]}} mittels eines {{JSL|StringBuilder}} wieder zusammen füge jedoch nach jedem {{JSL|append}} auch einen {{JSL|System.lineSeparator()}} hinzu. Gib dann den {{JSL|String}} den du vom {{JSL|StringBuilder}} erhältst aus. Teste deine Methode in der {{JSL|main}} Methode mit einigen Beispielen. | |||
'''Aufruf''' | |||
{{JML|code= | |||
String[] words = wordSplit(text, "Tag"); | |||
... | |||
}} | |||
'''Ausgabe''' | |||
{{BML|code= | |||
Heute wird ein guter | |||
! Heute wird der beste | |||
überhaupt! Heute wird ein spitzen super | |||
! | |||
}} | |||
=== Aufgabe: Split & Sort === | |||
Erstelle eine Methode welche den {{JSL|String}} | |||
{{JSL|"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 {{JSL|String[]}} mittels eines {{JSL|StringBuilder}} wieder zusammen gib dann den {{JSL|String}}, den du von {{JSL|StringBuilder}} erhältst aus. | |||
= Datenströme = | = Datenströme = | ||
Im folgenden geht es um das einlesen und verarbeiten von Textdateien. | 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. | ||
{{JML|code= | |||
String path = "assets/file.txt"; | |||
}} | |||
=== Aufgabe: File einlesen und Ausgeben === | |||
Lies das '''File''' mit hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein und gib es aus. | |||
=== Aufgabe: Buchstaben zählen === | |||
Lies das '''File''' mit hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein. | |||
# Gib die Anzahl der Buchstaben aus | |||
# Erstelle eine Methode welche nur einen bestimmten Buchstaben des Texts zählt, welcher als Parameter mitgegeben wird. | |||
# Erstelle eine Methode welche ein {{JSL|char[]}} von Bestimmten Buchstaben des Texts zählt. Das {{JSL|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)''' | |||
{{JSL|System.out.println(countChar(text, 'a'));}} | |||
'''Tip zu 3)''' | |||
{{JML|code= | |||
char[] charsToCount = new char[]{'a', 'z', 'e'}; | |||
System.out.println(countChars(text, charsToCount)); | |||
}} | |||
=== Aufgabe: Wörter zählen === | |||
Lies das '''File''' mit Hilfe von {{JSL|Scanner}} oder {{JSL|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 {{JSL|Scanner}} oder {{JSL|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 {{JSL|Scanner}} oder {{JSL|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'''. | |||
= '''C'''omma '''S'''eparated '''V'''alue = | |||
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 {{JSL|String}}. Zerlege den {{JSL|String}} zuerst nach Zeilen, dann nach Spalten und erstelle somit ein {{JSL|String[][]}}, ein '''zweidimensionales Array'''. Gib nun mit Hilfe des {{JSL|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 {{JSL|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: {{JSL|Float.parseFloat(...)}}, {{JSL|Integer.parseInt(...)}} | |||
=== Aufgabe: Read and Write === | |||
Lies und verarbeite die CSV Datei wie in vorhergehender [[Strukturierte_Programmierung_Uebungen#Aufgabe:_Read_and_Display|Aufgabe]] ein. Schreib das {{JSL|String[][]}} als CSV nun in eine neue Datei. Verwende als Separator (Trennzeichen) {{BSL|;}}. | |||
Aktuelle Version vom 11. März 2022, 16:57 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.
- Verwende dazu eine for-Schleife
- 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.
- Verwende um zu prüfen ob es eine gerade Zahl ist den Modulo Operator
- 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(10, "x");
Ausgabe:
xxxxxxxxxx
x x
x x
x x
x x
x x
x x
x x
x x
xxxxxxxxxx
Aufruf:
printSquare(3, "A");
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.
- Löse das Problem wie es dir gefällt
- 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.
- Löse das Problem wie es dir gefällt
- Löse das Problem mit nur zwei ineinander verschachtelten Schleifen
Aufruf:
printX('x', 5);
Ausgabe:
x x
x x
x
x x
x x
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.
- Wird keine Zahl eingegeben kann das Programm abstürzen
- Frag solange nach einer Zahl bis auch eine eingegeben wurde, das Programm darf bei Fehleingabe nicht abstürzen
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 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.
Errays
Im folgenden finden sich Aufgaben für Arrays und deren Sortierung.
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]);
- Gib es mit Hilfe einer foreach-Schleife aus.
- Gib den zweiten, fünften und zehnten Wert des Arrays aus.
- 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 Min/Max/Avg
Erstelle ein int[] und befülle es mit Zufallszahlen von 0 bis 1000. 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.
- Sortiere der Größe nach aufsteigend (Ascending)
- Sortiere der Größe nach absteigend (Descending)
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.
- Sortiere die Namen aufsteigend (Ascending)
- Sortiere die Namen absteigend (Descending)
Tip.: Strings können mit der Instanz MethodecompareToderStringKlasse 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!"
- Jeden Kleinbuchstaben und gib ihn aus
- Jeden Großbuchstaben und gib ihn aus
- Jedes Leerzeichen und gib ihn aus
- Jedes Ausrufezeichen ! und gib ihn aus
Aufgabe: Replace all 3
Lösche im String
"749813247132984712039487123049871204398712039487"
- Alle Zahlen von 0 bis 9 und gib ihn aus
- Alle Zahlen von 1 bis 9 und gib ihn aus
- Alle Zahlen von 2 bis 4 und gib ihn aus
- 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.
- Gib die Anzahl der Buchstaben aus
- Erstelle eine Methode welche nur einen bestimmten Buchstaben des Texts zählt, welcher als Parameter mitgegeben wird.
- Erstelle eine Methode welche ein
char[]von Bestimmten Buchstaben des Texts zählt. Daschar[]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) ;.