Aufgaben
Hier sind alle Aufgaben des Kurses an einem Ort. Zuerst 50 eigenständige Aufgaben von „Hallo, Welt“ bis zum kürzesten Weg in einem Raster, jede mit einem Beispiel und einer Lösung in Java, geprüft mit einem echten Compiler. Danach die Aufgaben aus den Lektionen, nach Modulen: Jede führt zu der Lektion, die erklärt, was du brauchst.
50 Aufgaben zum Üben
1. Hello World
Gib den Text Hello, World! auf der Konsole aus. Das Programm hat keine Eingabe.
Keine Eingabe.
Ausgabe Hello, World!Was du brauchst, steht in der Lektion: Dein erstes Programm
Lösung
public class Main {public static void main(String[] args) {System.out.println("Hello, World!");}}2. Begrüße den Benutzer
Lies einen Namen aus einer Zeile und begrüße die Person mit ihrem Namen in der Form „Hallo, <Name>!“.
Eingabe MariaAusgabe Hallo, Maria!Was du brauchst, steht in der Lektion: Eingabe und Ausgabe
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String name = in.nextLine();System.out.println("Hallo, " + name + "!");}}3. Das Alter ausgeben
Lies das Alter des Benutzers (eine ganze Zahl), speichere es in einer Variablen und gib es in einem Satz aus.
Eingabe 17Ausgabe Du bist 17 Jahre alt.Was du brauchst, steht in der Lektion: Variablen und Typen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int age = Integer.parseInt(in.nextLine());System.out.println("Du bist " + age + " Jahre alt.");}}4. Einheitenumrechner
Lies eine Länge in Zoll (sie kann eine Dezimalzahl sein) und rechne sie in Zentimeter um: 1 Zoll = 2,54 cm. Gib das Ergebnis mit 2 Nachkommastellen aus.
Eingabe 12.5Ausgabe 31.75 cmWas du brauchst, steht in der Lektion: Operatoren und Arithmetik
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);double inches = Double.parseDouble(in.nextLine());System.out.printf("%.2f cm%n", inches * 2.54);}}5. Gerade oder ungerade
Lies eine ganze Zahl und gib aus, ob sie gerade oder ungerade ist.
Eingabe 7Ausgabe 7 ist ungerade.Was du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int number = Integer.parseInt(in.nextLine());if (number % 2 == 0) {System.out.println(number + " ist gerade.");} else {System.out.println(number + " ist ungerade.");}}}6. Summe zweier Zahlen
Lies zwei ganze Zahlen, jede in einer eigenen Zeile, und gib ihre Summe aus.
Eingabe 1230Ausgabe Die Summe ist 42.Was du brauchst, steht in der Lektion: Operatoren und Arithmetik
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int first = Integer.parseInt(in.nextLine());int second = Integer.parseInt(in.nextLine());System.out.println("Die Summe ist " + (first + second) + ".");}}7. Fläche eines Quadrats
Lies die Seitenlänge eines Quadrats (eine ganze Zahl) und gib seinen Flächeninhalt aus.
Eingabe 5Ausgabe Der Flächeninhalt ist 25.Was du brauchst, steht in der Lektion: Operatoren und Arithmetik
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int side = Integer.parseInt(in.nextLine());System.out.println("Der Flächeninhalt ist " + side * side + ".");}}8. Volumen einer Kugel
Lies den Radius r (er kann eine Dezimalzahl sein) und gib das Volumen der Kugel V = 4/3 · π · r³ mit 2 Nachkommastellen aus.
Eingabe 3Ausgabe Das Volumen ist 113.10.Was du brauchst, steht in der Lektion: Operatoren und Arithmetik
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);double r = Double.parseDouble(in.nextLine());double volume = 4.0 / 3 * Math.PI * r * r * r;System.out.printf("Das Volumen ist %.2f.%n", volume);}}9. Zwei Zahlen vergleichen
Lies zwei ganze Zahlen, jede in einer eigenen Zeile, und gib die größere aus (wenn sie gleich sind, egal welche).
Eingabe 815Ausgabe Die größere Zahl ist 15.Was du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a = Integer.parseInt(in.nextLine());int b = Integer.parseInt(in.nextLine());if (a > b) {System.out.println("Die größere Zahl ist " + a + ".");} else {System.out.println("Die größere Zahl ist " + b + ".");}}}10. Dreiecksprüfung
Lies drei ganze Zahlen, jede in einer eigenen Zeile, und prüfe, ob sie die Seiten eines Dreiecks sein können: Die Summe von je zwei muss größer sein als die dritte.
Eingabe 345Ausgabe Sie können ein Dreieck bilden.Was du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a = Integer.parseInt(in.nextLine());int b = Integer.parseInt(in.nextLine());int c = Integer.parseInt(in.nextLine());if (a + b > c && a + c > b && b + c > a) {System.out.println("Sie können ein Dreieck bilden.");} else {System.out.println("Sie können kein Dreieck bilden.");}}}11. Note in Worten
Lies eine Note von 2 bis 6 (6 ist die beste; die Note kann eine Dezimalzahl sein) und gib sie in Worten aus: ab 5,50 Ausgezeichnet, ab 4,50 Sehr gut, ab 3,50 Gut, ab 3,00 Ausreichend, unter 3,00 Ungenügend.
Eingabe 4.75Ausgabe Sehr gutWas du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);double grade = Double.parseDouble(in.nextLine());if (grade >= 5.5) {System.out.println("Ausgezeichnet");} else if (grade >= 4.5) {System.out.println("Sehr gut");} else if (grade >= 3.5) {System.out.println("Gut");} else if (grade >= 3) {System.out.println("Ausreichend");} else {System.out.println("Ungenügend");}}}12. Stunden in Sekunden
Lies eine Anzahl Stunden (eine ganze Zahl) und gib aus, wie viele Sekunden das sind.
Eingabe 2Ausgabe 7200 SekundenWas du brauchst, steht in der Lektion: Operatoren und Arithmetik
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int hours = Integer.parseInt(in.nextLine());System.out.println(hours * 3600 + " Sekunden");}}13. Zählen bis N
Lies eine ganze Zahl N und gib die Zahlen von 1 bis N aus, jede in einer neuen Zeile.
Eingabe 5Ausgabe 12345Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());for (int i = 1; i <= n; i++) {System.out.println(i);}}}14. ASCII-Wert
Lies ein Zeichen (das erste Zeichen der Zeile) und gib seinen ASCII-Code aus, also die Zahl, als die der Computer es speichert.
Eingabe AAusgabe Der Code von A ist 65.Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);char symbol = in.nextLine().charAt(0);System.out.println("Der Code von " + symbol + " ist " + (int) symbol + ".");}}15. Quadratische Gleichung
Lies a, b und c, jeweils in einer eigenen Zeile, und löse die Gleichung ax² + bx + c = 0. Bei zwei Lösungen gib „x1 = …, x2 = …“ aus (x1 ist die mit +√D), bei einer „x = …“, jeweils mit 2 Nachkommastellen; wenn es keine reellen Lösungen gibt oder a gleich 0 ist, sag es.
Eingabe 1-32Ausgabe x1 = 2.00, x2 = 1.00Was du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);double a = Double.parseDouble(in.nextLine());double b = Double.parseDouble(in.nextLine());double c = Double.parseDouble(in.nextLine());if (a == 0) {System.out.println("Das ist keine quadratische Gleichung");} else {double d = b * b - 4 * a * c;if (d > 0) {double x1 = (-b + Math.sqrt(d)) / (2 * a);double x2 = (-b - Math.sqrt(d)) / (2 * a);System.out.printf("x1 = %.2f, x2 = %.2f%n", x1, x2);} else if (d == 0) {System.out.printf("x = %.2f%n", -b / (2 * a));} else {System.out.println("Keine reellen Lösungen");}}}}16. Positiv oder negativ
Lies eine ganze Zahl und gib aus, ob sie positiv, negativ oder null ist.
Eingabe -4Ausgabe NegativWas du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int number = Integer.parseInt(in.nextLine());if (number > 0) {System.out.println("Positiv");} else if (number < 0) {System.out.println("Negativ");} else {System.out.println("Null");}}}17. Jahreszeiten
Lies die Nummer eines Monats (1–12) und gib die Jahreszeit aus: 12, 1, 2 Winter, 3–5 Frühling, 6–8 Sommer, 9–11 Herbst. Bei jeder anderen Zahl gib „Ungültiger Monat“ aus.
Eingabe 4Ausgabe FrühlingWas du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int month = Integer.parseInt(in.nextLine());if (month < 1 || month > 12) {System.out.println("Ungültiger Monat");} else if (month == 12 || month <= 2) {System.out.println("Winter");} else if (month <= 5) {System.out.println("Frühling");} else if (month <= 8) {System.out.println("Sommer");} else {System.out.println("Herbst");}}}18. Zahl umdrehen
Lies eine positive ganze Zahl und gib die Zahl mit ihren Ziffern in umgekehrter Reihenfolge aus: Aus 123 wird 321. Nullen, die dabei nach vorne kommen, verschwinden (aus 1200 wird 21). Nimm die letzte Ziffer mit % 10 und entferne sie, indem du durch 10 teilst.
Eingabe 9071Ausgabe 1709Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int reversed = 0;while (n > 0) {reversed = reversed * 10 + n % 10;n /= 10;}System.out.println(reversed);}}19. Temperaturumrechner
Lies eine Temperatur in Grad Celsius (sie kann eine Dezimalzahl mit Punkt sein) und gib sie in Fahrenheit mit zwei Nachkommastellen aus. Die Formel ist F = C * 9 / 5 + 32.
Eingabe 36.6Ausgabe 97.88 °FWas du brauchst, steht in der Lektion: Operatoren und Arithmetik
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);double celsius = Double.parseDouble(in.nextLine());double fahrenheit = celsius * 9 / 5 + 32;System.out.printf("%.2f °F%n", fahrenheit);}}20. Längster Name
In der ersten Zeile steht die Anzahl der Namen n, in den nächsten n Zeilen je ein Name. Gib den Namen mit den meisten Buchstaben und deren Anzahl in Klammern aus; sind zwei Namen gleich lang, gib den ersten davon aus.
Eingabe 4MiaAlexandraJonasCharlotteAusgabe Alexandra (9 Buchstaben)Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());String longest = "";for (int i = 0; i < n; i++) {String name = in.nextLine();if (name.length() > longest.length()) {longest = name;}}System.out.println(longest + " (" + longest.length() + " Buchstaben)");}}21. Wörter zählen
Lies eine Zeile Text und gib aus, wie viele Wörter sie hat. Die Wörter sind durch ein oder mehrere Leerzeichen getrennt, die leeren Stücke zwischen zwei Leerzeichen sind also keine Wörter.
Eingabe Ich schreibe jeden Tag Code und werde besserAusgabe 8Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String line = in.nextLine();String[] words = line.trim().split(" +");System.out.println(words.length);}}22. Primzahl
Lies eine ganze Zahl n und prüfe, ob sie eine Primzahl ist: größer als 1 und nur durch 1 und sich selbst teilbar. Es reicht, die Teiler i zu probieren, für die i * i <= n gilt.
Eingabe 91Ausgabe 91 ist keine PrimzahlWas du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();boolean prime = n > 1;for (int i = 2; i * i <= n; i++) {if (n % i == 0) {prime = false;break;}}if (prime) {System.out.println(n + " ist eine Primzahl");} else {System.out.println(n + " ist keine Primzahl");}}}23. Wochentag
Lies eine Zahl von 1 bis 7 und gib den Namen des Wochentags auf Deutsch aus, wobei 1 Montag ist. Halte die Namen in einem Array; bei jeder anderen Zahl gib „Diesen Tag gibt es nicht“ aus.
Eingabe 5Ausgabe FreitagWas du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int day = in.nextInt();String[] days = { "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag" };if (day >= 1 && day <= 7) {System.out.println(days[day - 1]);} else {System.out.println("Diesen Tag gibt es nicht");}}}24. Fakultät
Lies eine ganze Zahl n von 0 bis 15 und gib n! = 1 * 2 * … * n aus (0! ist 1). Schon 13! passt nicht in einen int, deshalb speicherst du das Produkt in Java und C# in einem long.
Eingabe 15Ausgabe 15! = 1307674368000Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();long factorial = 1;for (int i = 2; i <= n; i++) {factorial *= i;}System.out.println(n + "! = " + factorial);}}25. Gültiges Datum
Lies einen Tag, einen Monat und ein Jahr, jeweils in einer eigenen Zeile, und gib „Gültiges Datum“ oder „Ungültiges Datum“ aus. Das Jahr ist mindestens 1, der Monat liegt zwischen 1 und 12 und der Tag zwischen 1 und der Anzahl der Tage in diesem Monat; der Februar hat in einem Schaltjahr 29 Tage (durch 4 teilbar, aber nicht durch 100, außer es ist durch 400 teilbar).
Eingabe 2922100Ausgabe Ungültiges DatumWas du brauchst, steht in der Lektion: Bedingungen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int day = in.nextInt();int month = in.nextInt();int year = in.nextInt();boolean leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;int days;if (month == 2) {days = leap ? 29 : 28;} else if (month == 4 || month == 6 || month == 9 || month == 11) {days = 30;} else {days = 31;}if (year >= 1 && month >= 1 && month <= 12 && day >= 1 && day <= days) {System.out.println("Gültiges Datum");} else {System.out.println("Ungültiges Datum");}}}26. Buchstabenhäufigkeit
Lies eine Zeile Text und gib aus, wie oft jeder Buchstabe darin vorkommt, egal ob groß oder klein geschrieben. Gib die Buchstaben in alphabetischer Reihenfolge aus, einen pro Zeile, in der Form „a: 5“; Leerzeichen und Satzzeichen werden nicht gezählt.
Eingabe Banane und Ananas!Ausgabe a: 5b: 1d: 1e: 1n: 5s: 1u: 1Was du brauchst, steht in der Lektion: HashMap und HashSet
Lösung
import java.util.Map;import java.util.Scanner;import java.util.TreeMap;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String text = in.nextLine().toLowerCase();Map<Character, Integer> counts = new TreeMap<>();for (char c : text.toCharArray()) {if (Character.isLetter(c)) {counts.put(c, counts.getOrDefault(c, 0) + 1);}}for (char c : counts.keySet()) {System.out.println(c + ": " + counts.get(c));}}}27. Minimum und Maximum in einem Array
In der ersten Zeile steht die Anzahl n, in den nächsten n Zeilen je eine ganze Zahl. Lies sie in ein Array und gib die kleinste und die größte aus: Beginne beim ersten Element und vergleiche es mit den übrigen.
Eingabe 57-31204Ausgabe Kleinste Zahl: -3Größte Zahl: 12Was du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] numbers = new int[n];for (int i = 0; i < n; i++) {numbers[i] = in.nextInt();}int min = numbers[0];int max = numbers[0];for (int i = 1; i < n; i++) {if (numbers[i] < min) {min = numbers[i];}if (numbers[i] > max) {max = numbers[i];}}System.out.println("Kleinste Zahl: " + min);System.out.println("Größte Zahl: " + max);}}28. Array sortieren
In der ersten Zeile steht die Anzahl n, in den nächsten n Zeilen je eine ganze Zahl. Sortiere sie selbst aufsteigend mit Bubblesort (n - 1 Durchläufe, in jedem tauschst du Nachbarn, die in der falschen Reihenfolge stehen) und gib sie in einer Zeile aus, getrennt durch Leerzeichen.
Eingabe 6529156Ausgabe 1 2 5 5 6 9Was du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] numbers = new int[n];for (int i = 0; i < n; i++) {numbers[i] = in.nextInt();}for (int pass = 0; pass < n - 1; pass++) {for (int i = 0; i < n - 1 - pass; i++) {if (numbers[i] > numbers[i + 1]) {int temp = numbers[i];numbers[i] = numbers[i + 1];numbers[i + 1] = temp;}}}for (int i = 0; i < n; i++) {if (i > 0) {System.out.print(" ");}System.out.print(numbers[i]);}System.out.println();}}29. Vokale ersetzen
Lies eine Zeile Text und gib sie aus, wobei jeder Vokal, groß oder klein, durch das Zeichen * ersetzt ist. Die Vokale sind a, e, i, o, u, ä, ö, ü.
Eingabe Übung macht den MeisterAusgabe *b*ng m*cht d*n M**st*rWas du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String text = in.nextLine();String vowels = "aeiouäöü";String result = "";for (char c : text.toCharArray()) {if (vowels.indexOf(Character.toLowerCase(c)) >= 0) {result += "*";} else {result += c;}}System.out.println(result);}}30. Quersumme
Lies eine nicht negative ganze Zahl und gib die Summe ihrer Ziffern aus. Die letzte Ziffer ist n % 10, und n / 10 entfernt sie (in Python n // 10).
Eingabe 9875Ausgabe 29Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int sum = 0;while (n > 0) {sum += n % 10;n /= 10;}System.out.println(sum);}}31. Palindrom
Lies eine Zeile Text und prüfe, ob sie ein Palindrom ist, sich also rückwärts genauso liest. Groß- und Kleinbuchstaben gelten als gleich, Leerzeichen werden übersprungen. Gib „Palindrom“ oder „Kein Palindrom“ aus.
Eingabe LagerregalAusgabe PalindromWas du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String text = in.nextLine().toLowerCase().replace(" ", "");boolean palindrome = true;for (int i = 0; i < text.length() / 2; i++) {if (text.charAt(i) != text.charAt(text.length() - 1 - i)) {palindrome = false;break;}}if (palindrome) {System.out.println("Palindrom");} else {System.out.println("Kein Palindrom");}}}32. Sicheres Passwort
Lies Passwörter, eines pro Zeile, bis ein sicheres kommt: mindestens 8 Zeichen, mindestens eine Ziffer, ein Großbuchstabe und ein Kleinbuchstabe. Gib für jedes schwache die erste nicht erfüllte Regel in dieser Reihenfolge aus („Zu kurz“, „Keine Ziffer“, „Kein Großbuchstabe“, „Kein Kleinbuchstabe“), für das sichere „Passwort akzeptiert“, und hör dann auf.
Eingabe katzekatzemiaukatzemiau7Katzemiau7Ausgabe Zu kurzKeine ZifferKein GroßbuchstabePasswort akzeptiertWas du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (true) {String password = in.nextLine();boolean digit = false;boolean upper = false;boolean lower = false;for (char c : password.toCharArray()) {if (Character.isDigit(c)) {digit = true;} else if (Character.isUpperCase(c)) {upper = true;} else if (Character.isLowerCase(c)) {lower = true;}}if (password.length() < 8) {System.out.println("Zu kurz");} else if (!digit) {System.out.println("Keine Ziffer");} else if (!upper) {System.out.println("Kein Großbuchstabe");} else if (!lower) {System.out.println("Kein Kleinbuchstabe");} else {System.out.println("Passwort akzeptiert");break;}}}}33. Array umdrehen
In der ersten Zeile steht die Anzahl n, in den nächsten n Zeilen je eine ganze Zahl. Lies sie in ein Array und gib sie in umgekehrter Reihenfolge in einer Zeile aus, getrennt durch Leerzeichen: Durchlaufe das Array vom letzten Index bis zum Index 0.
Eingabe 410-273Ausgabe 3 7 -2 10Was du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] numbers = new int[n];for (int i = 0; i < n; i++) {numbers[i] = in.nextInt();}for (int i = n - 1; i >= 0; i--) {System.out.print(numbers[i]);if (i > 0) {System.out.print(" ");}}System.out.println();}}34. Elemente zählen
Lies eine Zeile mit Wörtern, getrennt durch je ein Leerzeichen, und gib aus, wie oft jedes Wort vorkommt, in der Form „Wort: Anzahl“. Die Wörter erscheinen in der Reihenfolge, in der sie zum ersten Mal vorkamen.
Eingabe Apfel Birne Apfel Pflaume Birne ApfelAusgabe Apfel: 3Birne: 2Pflaume: 1Was du brauchst, steht in der Lektion: HashMap und HashSet
Lösung
import java.util.LinkedHashMap;import java.util.Map;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String line = in.nextLine();Map<String, Integer> counts = new LinkedHashMap<>();for (String word : line.split(" ")) {counts.put(word, counts.getOrDefault(word, 0) + 1);}for (String word : counts.keySet()) {System.out.println(word + ": " + counts.get(word));}}}35. Primzahlen
Lies eine Zahl N und gib alle Primzahlen von 2 bis N in einer Zeile aus, getrennt durch Leerzeichen.
Eingabe 30Ausgabe 2 3 5 7 11 13 17 19 23 29Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());String result = "";for (int i = 2; i <= n; i++) {boolean prime = true;for (int d = 2; d * d <= i; d++) {if (i % d == 0) {prime = false;break;}}if (prime) {result += i + " ";}}System.out.println(result.trim());}}36. Durchschnitt
In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Gib ihren Durchschnitt mit zwei Nachkommastellen aus.
Eingabe 5 8 12 6Ausgabe Durchschnitt: 7.75Was du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] parts = in.nextLine().split(" ");int sum = 0;for (int i = 0; i < parts.length; i++) {sum += Integer.parseInt(parts[i]);}double average = (double) sum / parts.length;System.out.printf("Durchschnitt: %.2f%n", average);}}37. Nach Länge sortieren
In einer Zeile stehen Wörter, getrennt durch Leerzeichen. Sortiere sie nach Länge vom kürzesten zum längsten (Wörter gleicher Länge behalten ihre Reihenfolge aus der Eingabe) und gib sie in einer Zeile aus.
Eingabe Kirsche Feige Banane Kiwi PflaumeAusgabe Kiwi Feige Banane Kirsche PflaumeWas du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] words = in.nextLine().split(" ");for (int i = 0; i < words.length - 1; i++) {for (int j = 0; j < words.length - 1 - i; j++) {if (words[j].length() > words[j + 1].length()) {String temp = words[j];words[j] = words[j + 1];words[j + 1] = temp;}}}System.out.println(String.join(" ", words));}}38. Sätze zählen
Lies eine Zeile Text und gib aus, wie viele Sätze sie hat. Ein Satz endet mit einem Punkt, einem Ausrufezeichen oder einem Fragezeichen; eine Folge solcher Zeichen (wie „...“ oder „?!“) ist ein einziges Ende.
Eingabe Hallo! Wie geht es dir? Mir geht es gut... Und dir?!Ausgabe Sätze: 4Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String text = in.nextLine();String ends = ".!?";int count = 0;for (int i = 0; i < text.length(); i++) {boolean isEnd = ends.indexOf(text.charAt(i)) >= 0;boolean nextIsEnd = i + 1 < text.length() && ends.indexOf(text.charAt(i + 1)) >= 0;if (isEnd && !nextIsEnd) {count++;}}System.out.println("Sätze: " + count);}}39. Fibonacci-Zahlen
Die Fibonacci-Folge beginnt mit 1, 1, und jede weitere Zahl ist die Summe der beiden vorherigen. Lies N (von 1 bis 50) und gib die N-te Zahl der Folge aus.
Eingabe 40Ausgabe 102334155Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());long previous = 0;long current = 1;for (int i = 1; i < n; i++) {long next = previous + current;previous = current;current = next;}System.out.println(current);}}40. Den Median finden
In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Gib ihren Median mit einer Nachkommastelle aus: die mittlere Zahl nach dem Sortieren oder, bei einer geraden Anzahl, den Mittelwert der beiden mittleren.
Eingabe 12 3 7 9 1 8Ausgabe Median: 7.5Was du brauchst, steht in der Lektion: Listen
Lösung
import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);List<Integer> numbers = new ArrayList<>();for (String part : in.nextLine().split(" ")) {numbers.add(Integer.parseInt(part));}Collections.sort(numbers);int n = numbers.size();double median;if (n % 2 == 1) {median = numbers.get(n / 2);} else {median = (numbers.get(n / 2 - 1) + numbers.get(n / 2)) / 2.0;}System.out.printf("Median: %.1f%n", median);}}41. Zeichendiagramm
Lies eine Zeile Text. Gib für jedes Zeichen außer dem Leerzeichen, in der Reihenfolge seines ersten Auftretens, eine Zeile „Zeichen | Sternchen“ aus, mit einem Sternchen für jedes Vorkommen im Text.
Eingabe Banane BrotAusgabe B | **a | **n | **e | *r | *o | *t | *Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String text = in.nextLine();for (int i = 0; i < text.length(); i++) {char c = text.charAt(i);if (c != ' ' && text.indexOf(c) == i) {int count = 0;for (int j = 0; j < text.length(); j++) {if (text.charAt(j) == c) {count++;}}System.out.println(c + " | " + "*".repeat(count));}}}}42. Matrix transponieren
In der ersten Zeile stehen die Anzahl der Zeilen R und die Anzahl der Spalten C, danach folgen R Zeilen mit je C Zahlen, getrennt durch Leerzeichen. Gib die transponierte Matrix aus: C Zeilen mit je R Zahlen, wobei die Zeilen zu Spalten werden.
Eingabe 2 31 2 34 5 6Ausgabe 1 42 53 6Was du brauchst, steht in der Lektion: Zweidimensionale Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] size = in.nextLine().split(" ");int rows = Integer.parseInt(size[0]);int cols = Integer.parseInt(size[1]);int[][] matrix = new int[rows][cols];for (int r = 0; r < rows; r++) {String[] parts = in.nextLine().split(" ");for (int c = 0; c < cols; c++) {matrix[r][c] = Integer.parseInt(parts[c]);}}for (int c = 0; c < cols; c++) {String line = "";for (int r = 0; r < rows; r++) {line += matrix[r][c] + " ";}System.out.println(line.trim());}}}43. Wege im Labyrinth
In der ersten Zeile stehen R und C, danach folgen R Zeilen mit je C Zeichen: „.“ ist eine freie Zelle, „#“ eine Wand. Du gehst nur nach rechts oder nach unten und trittst nie auf eine Wand. Gib die Anzahl aller Wege von der oberen linken zur unteren rechten Ecke aus.
Eingabe 4 5......#.#....#.#....Ausgabe Wege: 4Was du brauchst, steht in der Lektion: Rekursion
Lösung
import java.util.Scanner;public class Main {static int countPaths(String[] maze, int r, int c) {if (r >= maze.length || c >= maze[0].length() || maze[r].charAt(c) == '#') {return 0;}if (r == maze.length - 1 && c == maze[0].length() - 1) {return 1;}return countPaths(maze, r + 1, c) + countPaths(maze, r, c + 1);}public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] size = in.nextLine().split(" ");int rows = Integer.parseInt(size[0]);String[] maze = new String[rows];for (int r = 0; r < rows; r++) {maze[r] = in.nextLine();}System.out.println("Wege: " + countPaths(maze, 0, 0));}}44. Notenstatistik
In einer Zeile stehen Noten von 2 bis 6 (6 ist die beste), getrennt durch Leerzeichen. Gib aus, wie viele davon Ausgezeichnet, Sehr gut, Gut, Ausreichend und Ungenügend sind, jede Kategorie in einer eigenen Zeile.
Eingabe 6 4 5 6 3 5 2 6 5 4Ausgabe Ausgezeichnet (6): 3Sehr gut (5): 3Gut (4): 2Ausreichend (3): 1Ungenügend (2): 1Was du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] names = { "", "", "Ungenügend", "Ausreichend", "Gut", "Sehr gut", "Ausgezeichnet" };int[] counts = new int[7];String[] parts = in.nextLine().split(" ");for (int i = 0; i < parts.length; i++) {counts[Integer.parseInt(parts[i])]++;}for (int grade = 6; grade >= 2; grade--) {System.out.println(names[grade] + " (" + grade + "): " + counts[grade]);}}}45. Römische Zahlen
Lies eine ganze Zahl von 1 bis 3999 und gib sie in römischen Zahlen aus (I, V, X, L, C, D, M, wobei 4 IV ist, 9 IX, 40 XL und so weiter).
Eingabe 1994Ausgabe MCMXCIVWas du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int number = Integer.parseInt(in.nextLine());int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };String[] symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };String roman = "";for (int i = 0; i < values.length; i++) {while (number >= values[i]) {roman += symbols[i];number -= values[i];}}System.out.println(roman);}}46. Münzwurf-Simulation
Lies einen Startwert (Seed) x (von 1 bis 2147483646) und eine Anzahl Würfe N, jeweils in einer eigenen Zeile. Setze bei jedem Wurf x = x * 16807 % 2147483647; ein gerades x ist Kopf (K), ein ungerades Zahl (Z). Gib die Würfe in einer Zeile aus, danach, wie oft Kopf und wie oft Zahl gefallen ist.
Eingabe 4210Ausgabe KZZZKZZKKZKopf: 4Zahl: 6Was du brauchst, steht in der Lektion: Schleifen
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);long x = Long.parseLong(in.nextLine());int n = Integer.parseInt(in.nextLine());String tosses = "";int heads = 0;for (int i = 0; i < n; i++) {x = x * 16807 % 2147483647;if (x % 2 == 0) {tosses += "K";heads++;} else {tosses += "Z";}}System.out.println(tosses);System.out.println("Kopf: " + heads);System.out.println("Zahl: " + (n - heads));}}47. Symmetrisches Array
In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Prüfe, ob das Array symmetrisch ist, sich also von links nach rechts und von rechts nach links gleich liest.
Eingabe 1 2 3 2 1Ausgabe SymmetrischWas du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] parts = in.nextLine().split(" ");int[] numbers = new int[parts.length];for (int i = 0; i < parts.length; i++) {numbers[i] = Integer.parseInt(parts[i]);}boolean symmetric = true;for (int i = 0; i < numbers.length / 2; i++) {if (numbers[i] != numbers[numbers.length - 1 - i]) {symmetric = false;break;}}System.out.println(symmetric ? "Symmetrisch" : "Nicht symmetrisch");}}48. Balancierte Klammern
Lies eine Zeile Text und prüfe, ob die Klammern (), [] und {} darin balanciert sind: Jede öffnende Klammer hat ihre schließende derselben Art, und die Paare überkreuzen sich nicht. Andere Zeichen zählen nicht.
Eingabe (a + [b) * c]Ausgabe Nicht balanciertWas du brauchst, steht in der Lektion: Stack, Queue und verkettete Liste
Lösung
import java.util.ArrayDeque;import java.util.Deque;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String text = in.nextLine();String opening = "([{";String closing = ")]}";Deque<Character> stack = new ArrayDeque<>();boolean balanced = true;for (int i = 0; i < text.length(); i++) {char c = text.charAt(i);if (opening.indexOf(c) >= 0) {stack.push(c);} else if (closing.indexOf(c) >= 0) {if (stack.isEmpty() || opening.indexOf(stack.pop()) != closing.indexOf(c)) {balanced = false;break;}}}if (balanced && stack.isEmpty()) {System.out.println("Balanciert");} else {System.out.println("Nicht balanciert");}}}49. Folge gleicher Elemente
In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Finde die längste Folge gleicher benachbarter Zahlen und gib sie in einer Zeile aus; gibt es mehrere gleich lange, gib die erste aus.
Eingabe 2 1 1 3 3 3 2 2 2 5Ausgabe 3 3 3Was du brauchst, steht in der Lektion: Arrays
Lösung
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] parts = in.nextLine().split(" ");int[] numbers = new int[parts.length];for (int i = 0; i < parts.length; i++) {numbers[i] = Integer.parseInt(parts[i]);}int bestValue = numbers[0];int bestLength = 1;int length = 1;for (int i = 1; i < numbers.length; i++) {if (numbers[i] == numbers[i - 1]) {length++;} else {length = 1;}if (length > bestLength) {bestLength = length;bestValue = numbers[i];}}String result = "";for (int i = 0; i < bestLength; i++) {result += bestValue + " ";}System.out.println(result.trim());}}50. Kürzester Weg in einer Matrix
In der ersten Zeile stehen R und C, danach folgen R Zeilen mit je C Zeichen: „.“ ist eine freie Zelle, „#“ eine Wand, „S“ der Start und „E“ das Ziel. Du darfst nach oben, unten, links und rechts gehen. Gib die kleinste Anzahl Schritte von S nach E aus oder „Kein Weg“, wenn E nicht erreichbar ist.
Eingabe 5 6S.#....##.#....#..#.#..#...E.#Ausgabe 7Was du brauchst, steht in der Lektion: Stack, Queue und verkettete Liste
Lösung
import java.util.ArrayDeque;import java.util.Queue;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] size = in.nextLine().split(" ");int rows = Integer.parseInt(size[0]);int cols = Integer.parseInt(size[1]);String[] grid = new String[rows];for (int r = 0; r < rows; r++) {grid[r] = in.nextLine();}int[][] dist = new int[rows][cols];Queue<int[]> queue = new ArrayDeque<>();for (int r = 0; r < rows; r++) {for (int c = 0; c < cols; c++) {dist[r][c] = -1;if (grid[r].charAt(c) == 'S') {dist[r][c] = 0;queue.add(new int[] { r, c });}}}int[] dr = { -1, 1, 0, 0 };int[] dc = { 0, 0, -1, 1 };String answer = "Kein Weg";while (!queue.isEmpty()) {int[] cell = queue.poll();int r = cell[0];int c = cell[1];if (grid[r].charAt(c) == 'E') {answer = String.valueOf(dist[r][c]);break;}for (int d = 0; d < 4; d++) {int nr = r + dr[d];int nc = c + dc[d];if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && grid[nr].charAt(nc) != '#' && dist[nr][nc] == -1) {dist[nr][nc] = dist[r][c] + 1;queue.add(new int[] { nr, nc });}}}System.out.println(answer);}}
Aufgaben aus den Lektionen
Abschnitt „Aufgaben aus den Lektionen“Sprachgrundlagen
- Dein erstes Programm: Hello World · Visitenkarte · Rahmen
- Variablen und Typen: Tausch · Alter · Eine Hotelkarte
- Eingabe und Ausgabe: Begrüßung mit Namen · Summe zweier Zahlen · Zwei Texte in einem · π mit zwei Stellen
- Operatoren und Arithmetik: Durchschnitt von drei Zahlen · Sekunden in Stunden · Volumen einer Kugel · Celsius in Fahrenheit
- Bedingungen: Eine Kinokarte · Ein Mini-Taschenrechner · Eine quadratische Gleichung · Ein gültiges Datum
- Schleifen: Einmaleins · Primzahl · Die Ziffern einer Zahl · Zahlenraten
- Arrays: Summe, gerade, ungerade · Umgekehrt · Kleinste, größte, Durchschnitt
- Arrays: Sortieren · Längste Folge · Notenstatistik
- Zweidimensionale Arrays: Diagonalen und Zeilen · Dreh die Tabelle um
- Zweidimensionale Arrays: Wie viele Wege gibt es? · Der kürzeste Weg
- Strings: mit Text arbeiten: Der Name rückwärts · Anzahl der Wörter · Palindrom
- Strings: mit Text arbeiten: Sicheres Passwort
Methoden
- Methoden: Kassenbon · Dreieck
- Parameter und return: Durchschnitt · Primzahl · Temperaturen · Taschenrechner · Ein Dreieck mit Parameter
- Parameter und return
- Überladen: Die größte · Notendurchschnitt · Eine Zeile auf dem Bon
- Rekursion: Fakultät auf zwei Arten · Quersumme · Fibonacci · Palindrom
Klassen und Objekte
- Klassen und Objekte: Buch · Auto · Der Warenkorb · Das Teuerste zuerst
- Konstruktoren und this: Person · Tier · Tanzschritt
- Instanzmethoden
- Instanzmethoden
- Kapselung: Person · Ein Konto ohne Minus · Tier
- static: was alle Objekte teilen: Bestellungen · Taschenrechner · Wechselstube
Vererbung und Polymorphie
- Vererbung: Familienauto · Studentin · Breakdance · Elektroauto
- Polymorphie: Tierheim · Die Studentin stellt sich vor · Party
- Abstrakte Klassen: Fläche und Umfang · Tiere
- Abstrakte Klassen: Fahrzeuge · Auftritte
- Interfaces: Hupe · Angaben · Tanz · DJ · Der Teich
- Typprüfungen: Parkplatz · Tänze · Fuhrpark · Zoo
- OOP-Prinzipien
- OOP-Prinzipien: Ein freier Mitarbeiter · Die Terrasse ohne if
Fehler und Exceptions
- Exceptions: Text zu Zahl · Kein solches Produkt · Durchschnittliche Bestellung
- try, catch und finally: Preis pro Person · Taschenrechner
- Werfen und eigene Exceptions: Musikgeschäft · Ein Konto mit Regeln · Ungültiges Alter
Text und Dateien
- Strings: Palindrom · Ein Kassenbon mit Spalten · Wörter rückwärts
- Reguläre Ausdrücke: Datum · Handynummer · E-Mail · Einkaufsliste
- Reguläre Ausdrücke: Gruppen und Ersetzen: Suchen und ersetzen · Wörter mit einem Präfix · Adressen im Text · Daten nach ISO
- Dateien: Eine Konfigurationsdatei · Ein Filter für eine Logdatei · Der Inhalt eines Ordners · Eine Indexdatei
- Daten in Dateien: CSV-Auswertung · Den Helden speichern · Doppelter Text
Collections
- Listen: Ein Bücherregal · Ein Ereignisprotokoll · Ein Notizbuch · Kopfrechnen
- Stack, Queue und verkettete Liste: Ein Spielzeugzug · Eine Buslinie · Ein Börsenticker · Ausgeglichene Klammern · Deine eigene verkettete Liste
- HashMap und HashSet: Eine Benutzertabelle · Worthäufigkeit · Dokumente nach Stichwort · Ein Kontaktnetz
- Hashcodes und Hashfunktionen: Ein Hashcode für eine Person · Der Roboter im Lager · Ein Hash einer Datei
- Klassen in Klassen: Warenkorb · Monitor für einen Webserver · Hausverwaltung · Rangliste
Modernes Java
- Lambdas: Sortieren nach mehreren Feldern · Bestellungen filtern · Rabatte nacheinander
- Streams: Verkäufe nach Kategorie · Die Top 3 der Produkte · Die Durchschnittsnote · Die Wörter in einem Text
- record, switch und Muster: Formen · Lieferpreis · Ein Punkt als Schlüssel
- Entwurfsmuster: Rabatte als Strategien · „Benachrichtige mich, wenn es wieder da ist“ · Eine Fabrik für Benachrichtigungen · Ein altes Thermometer
Programme in der echten Welt
- Tests mit JUnit: Der Rabattrechner · Das Konto · Der Fehler im Notendurchschnitt
- Threads: Parallele Summe · Herunterladen mit einem Pool · Ein Zähler ohne Verluste
- Netzwerkprogrammierung: Echo-Server · Ein Server mit Befehlen · Ein Chat für zwei
- Datenbanken: Katalog · Suche nach einem Teil des Namens · Eine Überweisung, die mittendrin fehlschlägt
- Reflection und Annotationen: Alle Felder · Mini-JSON · Dein eigener Test-Runner
Wir bauen ein Spiel
- Wie du über ein Spiel nachdenkst: Ein Rennen für zwei · Zahl raten · Wer hat Tic-Tac-Toe gewonnen?
- RPG 1: die Helden: Ein sechster Held · Die Liste der Gruppe · Wer ist der Stärkste?
- RPG 2: die Schlacht: Ein neues Monster · Ein Heiltrank · Ein Kampfbericht
- RPG 3: das ganze Spiel: Ein Menü · Fortschritt · Ein Boss
- Epic Cosmos 1: die Objekte im All: Das Sonnensystem · Abstand · Der ganze Baum
- Epic Cosmos 2: Ressourcen, Gebäude, Schiffe: 100 Metall so schnell wie möglich · Ein Frachter · Eine Simulation über 10 Züge
- Das verschlossene Labor 1: Räume und Befehle: Inventar · Ein neuer Raum · Synonyme
- Das verschlossene Labor 2: Rätsel und der Ausweg: Der dunkle Keller · Ein Timer · Ein Hinweis für einen Zug
Die Chroniken von Arkanum
- Die Spielschleife
- Ein Stapel von Bildschirmen
- Bildschirme, die eine Antwort zurückgeben
- In der Konsole zeichnen
- Die Karte und das Sichtfeld
- Helden, Feinde, Werte
- Das Kampfsystem
- Blut, Wunden und Effekte
- Fähigkeiten und Aktionen als Befehle
- Gegner, die denken
- Gegenstände, Inventar, Beute
- Stufen, Dialoge und Quests
- Speichern und Laden
- Das ganze Spiel und die Balance
Epic Cosmos: das Imperium
- Die Galaxie aus einem Startwert
- Der Technologiebaum
- Flotten und die Weltraumschlacht
- Die Rivalen
- Der Zug der Galaxie
- Die ganze Strategie
Projekt
- Hotelbuchungen: Zimmerwechsel