From 94b00488ca0887659dffdd734bf94823f46d2126 Mon Sep 17 00:00:00 2001 From: leonl Date: Tue, 19 Dec 2023 14:21:25 +0100 Subject: [PATCH] Stand 19.12.2023 --- Programmieren/.classpath | 2 + Programmieren/src/Lernen/BinSuche.java | 2 +- Programmieren/src/Lernen/BubbleSort.java | 59 +++-- Programmieren/src/Lernen/Testat1.java | 64 ++--- Programmieren/src/Lernen/VierGewinnt.java | 264 +++++++++++--------- Programmieren/src/Lernen/ZaehlSchleife.java | 2 +- 6 files changed, 212 insertions(+), 181 deletions(-) diff --git a/Programmieren/.classpath b/Programmieren/.classpath index ac9ce57..8854d8d 100644 --- a/Programmieren/.classpath +++ b/Programmieren/.classpath @@ -6,5 +6,7 @@ + + diff --git a/Programmieren/src/Lernen/BinSuche.java b/Programmieren/src/Lernen/BinSuche.java index 808e711..f58679d 100644 --- a/Programmieren/src/Lernen/BinSuche.java +++ b/Programmieren/src/Lernen/BinSuche.java @@ -5,7 +5,7 @@ public class BinSuche { public static void main(String[] args) { int[] arr = {17, 4, 3, 8, 7, 2, 5, 9, 12, 25, 0, 6, 19, 16, 42, 21}; - BubbleSort.bubblesort(arr); + BubbleSort.bubbleSort(arr); int ergebnis = binaereSuche(arr, 42); if (ergebnis != -1) { diff --git a/Programmieren/src/Lernen/BubbleSort.java b/Programmieren/src/Lernen/BubbleSort.java index a173a62..b8f9c4e 100644 --- a/Programmieren/src/Lernen/BubbleSort.java +++ b/Programmieren/src/Lernen/BubbleSort.java @@ -1,3 +1,5 @@ +package Lernen; + import java.util.Arrays; public class BubbleSort { @@ -18,36 +20,41 @@ public class BubbleSort { public static void main(String[] args) { -// int[] arr = {1,2,3,4,5,6,7,8}; // best case - int[] arr = {17, 4, 3, 8, 7, 2, 5, 9, 12}; // *some* average case -// int[] arr = {17, 8, 6, 5, 4, 3, 2, 1}; // worst case - int zähler = 0; + + // int[] arr = {1,2,3,4,5,6,7,8}; // best case + int[] arr = {17, 4, 3, 8, 7, 2, 5, 9, 12}; // *some* average case + // int[] arr = {17, 8, 6, 5, 4, 3, 2, 1}; // worst case - boolean sortiert; - do { - sortiert = true; - - for (int x = 0; x < arr.length-1; x++) { - if (arr[x] > arr[x+1]) { - swap(arr, x, x+1); - sortiert = false; - } + bubbleSort(arr); - zähler++; - } // for - - } while(!sortiert); + System.out.println(Arrays.toString(arr)); + } + public static void bubbleSort(int[] arr) { + int zähler = 0; + boolean sortiert; - System.out.println(Arrays.toString(arr)); - System.out.println(zähler); - } + do { + sortiert = true; - public static void swap(int[] brr, int ei, int zi ) { - int merker = brr[ei]; - brr[ei] = brr[zi]; - brr[zi] = merker; - } + for (int x = 0; x < arr.length - 1; x++) { + if (arr[x] > arr[x + 1]) { + swap(arr, x, x + 1); + sortiert = false; + } -} \ No newline at end of file + zähler++; + } // for + + } while (!sortiert); + + System.out.println("Anzahl der Vergleiche: " + zähler); + } + + public static void swap(int[] brr, int ei, int zi) { + int merker = brr[ei]; + brr[ei] = brr[zi]; + brr[zi] = merker; + } + } \ No newline at end of file diff --git a/Programmieren/src/Lernen/Testat1.java b/Programmieren/src/Lernen/Testat1.java index 82096b2..917e00b 100644 --- a/Programmieren/src/Lernen/Testat1.java +++ b/Programmieren/src/Lernen/Testat1.java @@ -18,41 +18,41 @@ public class Testat1 { System.out.println("Geben Sie das Initialpasswort ein:"); String passwort1 = scanner.nextLine(); while(fehlversuche <=2) { - if(passwort1.equals(initialpasswort)) { - System.out.println("Wie soll Ihr neues Passwort aussehen?"); - String passwort2 = scanner.nextLine(); - if(passwort2.length()>=8 && passwort2.length() <= 16 ) { - System.out.println("Das Passwort erfüllt die Längenvorgaben"); - System.out.println("Bitte geben Sie zur Sicherheit das neue Passwort erneut ein"); - String passwort3 = scanner.nextLine(); - if(passwort3.equals(passwort2)) { - System.out.println("Ihr neues Passwort wurde gesetzt"); - initialpasswort = passwort2; - System.out.println("Wollen Sie erneut ein neues passwort setzen?"); - bereit = scanner.nextLine(); - }//schließt if abfrage ob neues passwort 2te eingabe ist erste eingabe + if(passwort1.equals(initialpasswort)) { + System.out.println("Wie soll Ihr neues Passwort aussehen?"); + String passwort2 = scanner.nextLine(); + if(passwort2.length()>=8 && passwort2.length() <= 16 ) { + System.out.println("Das Passwort erfüllt die Längenvorgaben"); + System.out.println("Bitte geben Sie zur Sicherheit das neue Passwort erneut ein"); + String passwort3 = scanner.nextLine(); + if(passwort3.equals(passwort2)) { + System.out.println("Ihr neues Passwort wurde gesetzt"); + initialpasswort = passwort2; + System.out.println("Wollen Sie erneut ein neues passwort setzen?"); + bereit = scanner.nextLine(); + }//schließt if abfrage ob neues passwort 2te eingabe ist erste eingabe + else { + System.out.println("Ihr neues Passwort stimmt nicht überein."); + System.out.println("Bitte versuchen sie das neu gesetzte Passwort erneut"); + passwort3 = scanner.nextLine(); + }//schließt passwort neu eingabe 2 und 1 sind nicht klein + }//schließt if passwort is größer 8 kleiner 16 else { - System.out.println("Ihr neues Passwort stimmt nicht überein."); - System.out.println("Bitte versuchen sie das neu gesetzte Passwort erneut"); - passwort3 = scanner.nextLine(); - }//schließt passwort neu eingabe 2 und 1 sind nicht klein - }//schließt if passwort is größer 8 kleiner 16 - else { - System.out.println("Das Passwort erfüllt leider nicht die Längenvorgaben"); - System.out.println("Bitte versuchen Sie es nocheinmal"); - passwort2 = scanner.nextLine(); - }//schließst else falsche länge - }//schließt die if abfrage ob passwort1 initialpasswort + System.out.println("Das Passwort erfüllt leider nicht die Längenvorgaben"); + System.out.println("Bitte versuchen Sie es nocheinmal"); + passwort2 = scanner.nextLine(); + }//schließst else falsche länge + }//schließt die if abfrage ob passwort1 initialpasswort - else { - fehlversuche = fehlversuche +1; - System.out.println("Das Passwort ist leider nicht korrekt."); - System.out.println("Bitte versuchen Sie es noch einmal"); - passwort1 = scanner.nextLine(); - }//schließt die falsche Passwort else + else { + fehlversuche = fehlversuche +1; + System.out.println("Das Passwort ist leider nicht korrekt."); + System.out.println("Bitte versuchen Sie es noch einmal"); + passwort1 = scanner.nextLine(); + }//schließt die falsche Passwort else } - - + + { System.out.println("Sie haben zu viele Falsche eingaben gemacht."); System.out.println("Bitte Kontaktieren Sie den Support."); diff --git a/Programmieren/src/Lernen/VierGewinnt.java b/Programmieren/src/Lernen/VierGewinnt.java index 393c45a..998cb41 100644 --- a/Programmieren/src/Lernen/VierGewinnt.java +++ b/Programmieren/src/Lernen/VierGewinnt.java @@ -1,132 +1,154 @@ +package Lernen; + import java.util.Scanner; public class VierGewinnt { - public static char[][] spielfeldInitialisieren() { - char[][] spielfeld = new char[6][7]; - return spielfeld; - } + + public static void main(String[] args) { + System.out.println("Willkommen zu 4 Gewinnt!"); + + // Game Loop + Scanner kb = new Scanner(System.in); + + boolean weiter = false; + char spieler = 'x'; + do { + char[][] spielfeld = spielfeldInitialisieren(); + int steineZähler = 0; + + spielfeldAusgeben(spielfeld); + + // Gewinner Loop + boolean gewonnen = false; + do { + if (spieler == 'o') + spieler = 'x'; + else + spieler = 'o'; + + // Spielstein einwerfen + int spalte, zeile; + do { + System.out.print("Spieler " + spieler + ", bitte wählen Sie eine Spalte aus: "); + spalte = kb.nextInt() - 1; // da Spalte eins verschoben + + if ((zeile = einwurfVerarbeiten(spielfeld, spalte, spieler)) == -1) + System.err.println("Ungültige Auswahl!"); + else + break; + } while(true); + steineZähler++; + + spielfeldAusgeben(spielfeld); - public static void spielfeldAusgeben(char[][] spielfeld) { - for (int z = 0; z < spielfeld.length; z++) { - for (int s = 0; s < spielfeld[z].length; s++) { - System.out.print(spielfeld[z][s] + " "); - } - System.out.println(); - } - } + gewonnen = gewinnerPrüfung(spielfeld, zeile, spalte); + } while(!gewonnen && steineZähler < 42); + + if (!gewonnen && steineZähler == 42) { + System.out.println("Das Spiel endet unentschieden."); + } else { + System.out.println("Es gewinnt Spieler " + spieler); + } + + } while (weiter); + + System.out.println("Auf Wiedersehen!"); + } // main - public static boolean gewinnpruefung(char[][] spielfeld, char spieler) { - // Check for horizontal win - for (int z = 0; z < spielfeld.length; z++) { - for (int s = 0; s <= spielfeld[z].length - 4; s++) { - if (spielfeld[z][s] == spieler && - spielfeld[z][s + 1] == spieler && - spielfeld[z][s + 2] == spieler && - spielfeld[z][s + 3] == spieler) { - return true; - } - } - } + public static char[][] spielfeldInitialisieren() { + char[][] spielfeld = new char[6][7]; + + for (int z = 0; z < spielfeld.length; z++) { + for (int s = 0; s < spielfeld[z].length; s++) { + spielfeld[z][s] = '_'; + } + } + + return spielfeld; + } + + public static void spielfeldAusgeben(char[][] spielfeld) { + System.out.println(); + + // Alle Zeilen ausgeben + for (int z = 0; z < spielfeld.length; z++) { + + // Alle Spalten der z-ten Zeile ausgeben + for (int s = 0; s < spielfeld[z].length; s++) { + System.out.print("| " + spielfeld[z][s] + " " ); + } + System.out.println("|"); + } + + System.out.println(); + + for (int s = 0; s < spielfeld[0].length; s++) { + System.out.print("| " + (s+1) + " " ); + } + + System.out.println("|"); + System.out.println(); + } - // Check for vertical win - for (int s = 0; s < spielfeld[0].length; s++) { - for (int z = 0; z <= spielfeld.length - 4; z++) { - if (spielfeld[z][s] == spieler && - spielfeld[z + 1][s] == spieler && - spielfeld[z + 2][s] == spieler && - spielfeld[z + 3][s] == spieler) { - return true; - } - } - } + public static int einwurfVerarbeiten(char[][] spielfeld, int spalte, char stein) { + if (spalte < 0 || spalte > 6) + return -1; + + for (int z = spielfeld.length - 1; z >= 0 ; z--) { + if (spielfeld[z][spalte] != '_' && z == 0) // Spalte voll? + return -1; + + if (spielfeld[z][spalte] == '_') { + spielfeld[z][spalte] = stein; + return z; + } + } + + return -1; + } - // Check for diagonal win (from top-left to bottom-right) - for (int z = 0; z <= spielfeld.length - 4; z++) { - for (int s = 0; s <= spielfeld[z].length - 4; s++) { - if (spielfeld[z][s] == spieler && - spielfeld[z + 1][s + 1] == spieler && - spielfeld[z + 2][s + 2] == spieler && - spielfeld[z + 3][s + 3] == spieler) { - return true; - } - } - } + public static boolean gewinnerPrüfung(char[][] spielfeld, int zeile, int spalte) { + + // vertikale Prüfung + for (int i = 0; i < 3; i++) { + if (spielfeld[0 + i][spalte] == spielfeld[1 + i][spalte] + && spielfeld[0 + i][spalte] == spielfeld[2 + i][spalte] + && spielfeld[0 + i][spalte] == spielfeld[3 + i][spalte] + && spielfeld[0 + i][spalte] != '_') + return true; + } + + // horizontale Prüfung + for (int i = 0; i < 4; i++) { + if (spielfeld[zeile][0 + i] == spielfeld[zeile][1 + i] + && spielfeld[zeile][0 + i] == spielfeld[zeile][2 + i] + && spielfeld[zeile][0 + i] == spielfeld[zeile][3 + i] + && spielfeld[zeile][0 + i] != '_') + return true; + } - // Check for diagonal win (from top-right to bottom-left) - for (int z = 0; z <= spielfeld.length - 4; z++) { - for (int s = 3; s < spielfeld[z].length; s++) { - if (spielfeld[z][s] == spieler && - spielfeld[z + 1][s - 1] == spieler && - spielfeld[z + 2][s - 2] == spieler && - spielfeld[z + 3][s - 3] == spieler) { - return true; - } - } - } + // diagonale Prüfung 1: "Plusplus-Fall", z.B. spielfeld[z+1][s+1] + for (int z = 0; z < 3; z++) { + for (int s = 0; s < 4; s++) { + if (spielfeld[z][s] == spielfeld[z+1][s+1] + && spielfeld[z][s] == spielfeld[z+2][s+2] + && spielfeld[z][s] == spielfeld[z+3][s+3] + && spielfeld[z][s] != '_') + return true; + } + } - // No winning condition found - return false; - } + // diagonale Prüfung 2: "Minusplus-Fall", z.B. spielfeld[z-1][s+1] + for (int z = spielfeld.length-1; z > spielfeld.length-4; z--) { + for (int s = 0; s < 4; s++) { + if (spielfeld[z][s] == spielfeld[z-1][s+1] + && spielfeld[z][s] == spielfeld[z-2][s+2] + && spielfeld[z][s] == spielfeld[z-3][s+3] + && spielfeld[z][s] != '_') + return true; + } + } - - public static void main(String[] args) { - System.out.println("Willkommen beim 4 Gewinnt der PR1"); - - boolean weiter = true; - Scanner scanner = new Scanner(System.in); - - // Game loop - do { - char[][] spielfeld = spielfeldInitialisieren(); - - // Gewinner loop - boolean gewonnen = false; - char aktuellerSpieler = 'X'; - - // Game loop - do { - // Spielfeld ausgeben - spielfeldAusgeben(spielfeld); - - // Spielstein einwurf - System.out.println("Spieler " + aktuellerSpieler + " ist am Zug. Bitte Spalte wählen (1-7): "); - int spalte = scanner.nextInt() - 1; - - // Überprüfen, ob die gewählte Spalte gültig ist - if (spalte < 0 || spalte >= spielfeld[0].length || spielfeld[0][spalte] != ' ') { - System.out.println("Ungültige Eingabe. Bitte erneut versuchen."); - continue; - } - - // Spielstein setzen - for (int z = spielfeld.length - 1; z >= 0; z--) { - if (spielfeld[z][spalte] == ' ') { - spielfeld[z][spalte] = aktuellerSpieler; - break; - } - } - - // Gewinnprüfung - gewonnen = gewinnpruefung(spielfeld, aktuellerSpieler); - - // Wechsel zum anderen Spieler - aktuellerSpieler = (aktuellerSpieler == 'X') ? 'O' : 'X'; - - } while (!gewonnen); - - // Spielfeld am Ende nochmal ausgeben - spielfeldAusgeben(spielfeld); - - // Gewinner ausgabe bzw. Unentschieden - System.out.println("Spieler " + aktuellerSpieler + " hat gewonnen!"); - - // Spiel nochmal spielen? - System.out.println("Möchten Sie nochmal spielen? (ja/nein): "); - String wiederholen = scanner.next(); - weiter = wiederholen.equalsIgnoreCase("ja"); - - } while (weiter); - - scanner.close(); - } + return false; + } } diff --git a/Programmieren/src/Lernen/ZaehlSchleife.java b/Programmieren/src/Lernen/ZaehlSchleife.java index 573cfb1..f29b97f 100644 --- a/Programmieren/src/Lernen/ZaehlSchleife.java +++ b/Programmieren/src/Lernen/ZaehlSchleife.java @@ -3,7 +3,7 @@ package Lernen; public class ZaehlSchleife { public static void main (String[]args) { for(int i=1; i<10; i++) { - System.out.println("%2d%n",i); + System.out.printf("%2d%n",i); } } }