diff --git a/.$PUE3_A1.1_Aktivitaetsdiagram.drawio.bkp b/.$PUE3_A1.1_Aktivitaetsdiagram.drawio.bkp new file mode 100644 index 0000000..36f4394 --- /dev/null +++ b/.$PUE3_A1.1_Aktivitaetsdiagram.drawio.bkp @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.$PUE3_A1.4_Aktivitaetsdiagram.drawio.bkp b/.$PUE3_A1.4_Aktivitaetsdiagram.drawio.bkp new file mode 100644 index 0000000..4327711 --- /dev/null +++ b/.$PUE3_A1.4_Aktivitaetsdiagram.drawio.bkp @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PUE3_A1.1_Aktivitaetsdiagram.drawio b/PUE3_A1.1_Aktivitaetsdiagram.drawio new file mode 100644 index 0000000..7392d88 --- /dev/null +++ b/PUE3_A1.1_Aktivitaetsdiagram.drawio @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PUE3_A1.4_Aktivitaetsdiagram.drawio b/PUE3_A1.4_Aktivitaetsdiagram.drawio index 4327711..0758c20 100644 --- a/PUE3_A1.4_Aktivitaetsdiagram.drawio +++ b/PUE3_A1.4_Aktivitaetsdiagram.drawio @@ -1,172 +1,170 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + + - + - + - + - + - + - + - + - + - - + + + + - - - - - - - + @@ -174,21 +172,30 @@ - + - + - + - + + + + - + + + + + + + diff --git a/Time.java b/Time.java index 9c5b7a5..1fa21eb 100644 --- a/Time.java +++ b/Time.java @@ -1,21 +1,24 @@ - +// Die Klasse Time überprüfft eine beliebigen String, ob es das erlaubte +// Zeitformat "SS:MM" hat. public class Time { public static boolean timeCheck(String time) { - + // Initialsisieren der Reglularexpression für das erlaubte Format String regex = "([01]\\d|2[0-3]):([0-5]\\d)"; boolean formatRichtig = false; - + // Überprüfung, ob der String dem Format enspricht if (time == null) { formatRichtig = false; + // schnelle Überprüfung der "Grundformats" } else if (time.length() != 5 || time.charAt(2) != ':') { formatRichtig = false; } else if (time.matches(regex)) { formatRichtig = true; } - + // Rückgabe des Ergebnis return formatRichtig; } - + // Für eine schnellere Überprüfung des Codes, ausführlichen Untersuchung + // erfolgt via eigene JUnit public static void main(String[] args) { System.out.println(timeCheck("23:56")); System.out.println(timeCheck("00:00")); diff --git a/TimeTest.java b/TimeTest.java index fa73c40..1965107 100644 --- a/TimeTest.java +++ b/TimeTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.*; public class TimeTest { - + // Test für richtige Zeitformate @Test public void testValidTimes() { assertTrue(Time.timeCheck("00:00")); @@ -12,7 +12,7 @@ public class TimeTest { assertTrue(Time.timeCheck("23:59")); assertTrue(Time.timeCheck("19:00")); } - + // Test für minimale Fehler der Zeitformate @Test public void testInvalidTimes() { assertFalse(Time.timeCheck("24:00")); // Stunde zu groß @@ -22,7 +22,7 @@ public class TimeTest { assertFalse(Time.timeCheck("09:5")); // unvollständige Minuten assertFalse(Time.timeCheck("09-15")); // falsches Trennzeichen } - + // Test beliebe Strings @Test public void testCompletelyInvalidStrings() { assertFalse(Time.timeCheck("Hello World")); // Klar kein Zeitformat @@ -30,6 +30,5 @@ public class TimeTest { assertFalse(Time.timeCheck("time: 12:30")); // Präfix vor der Zeit assertFalse(Time.timeCheck("")); // Leerer String assertFalse(Time.timeCheck(null)); // Nullprüfung - assertFalse(Time.timeCheck("23:56 \n abc")); } } \ No newline at end of file diff --git a/Vector.java b/Vector.java index bab2b7f..e35c37e 100644 --- a/Vector.java +++ b/Vector.java @@ -1,72 +1,93 @@ +// Die nachfolgede Klasse eines Vektor besitzt folgende Methoden: +// Scalaremultiplikation +// 2D und 3D Kreuzprodukt +// Vektorbetrag +// Scalarmatrixmultiplikation + public class Vector { - + // Scalaremultiplikation public static void scalarMultiplication(int[] vector, int scalar) { + // Falls ein null vector übergeben wird, soll nichts gemacht werden, + // sonst würde .length ein Fehler melden if (vector != null) { + // Jede Position wird mit dem Scalar multipliziert for (int position = 0; position < vector.length; position++) { vector[position] *= scalar; } } } - + // 2D und 3D kreuzprodukt public static void vectorProduct(int[] vector1, int[] vector2) { - + // Sollte eine der beiden Vektoren null sein: Nachricht an die Konsole if (vector1 == null || vector2 == null) { System.out.println("Wegen unterschiedlichen Dimensionen ist das Kreuzprodukt nicht erlaubt"); + // Für 3D Kreuzprodukt müssen beide Vektoren die Dimension 3 haben } else if (vector1.length == vector2.length && vector2.length == 3) { int[] kreuzVektor3D = new int[3]; + // Berechnung des 3D Kreuzprodukts kreuzVektor3D[0] = (vector1[1] * vector2[2]) - (vector1[2] * vector2[1]); kreuzVektor3D[1] = (vector1[2] * vector2[0]) - (vector1[0] * vector2[2]); kreuzVektor3D[2] = (vector1[0] * vector2[1]) - (vector1[1] * vector2[0]); - System.out.println("Ergebnis des Kreuzproduktes: [" + kreuzVektor3D[0] + ", " + kreuzVektor3D[1] + ", " + System.out.println("Ergebnis des 3D Kreuzproduktes: [" + kreuzVektor3D[0] + ", " + kreuzVektor3D[1] + ", " + kreuzVektor3D[2] + "]"); } - + // Für 2D Kreuzprodukt müssen beide Vektoren die Dimension 2 haben else if (vector1.length == vector2.length && vector2.length == 2) { int kreuzVektor2D = 0; + // Berechnung des 2D Kreuzprodukts. Ergebnis ist ein Scalar kreuzVektor2D = (vector1[0] * vector2[1]) - (vector1[1] * vector2[0]); - System.out.println("Ergebnis des Kreuzproduktes: " + kreuzVektor2D); + System.out.println("Ergebnis des 2D Kreuzproduktes: " + kreuzVektor2D); } - + // Bei unterschiedlichen Dimension oder nicht 2D bzw. 3D. Meldung an die Konsole else { System.out.println("Wegen unterschiedlichen Dimensionen ist das Kreuzprodukt nicht erlaubt"); } } - + // Vektorbetragsbrechnung public static double vectorLength(int[] vector) { + // Initialiserung von Quadradsumme und Betrag double qSumme = 0.0; double betrag = 0.0; + // Falls der Vektor null ist geht .length nicht if (vector != null) { + // Brechnung der Quadratsumme for (int i = 0; i < vector.length; i++) { qSumme = qSumme + (vector[i] * vector[i]); } + // Berechnung der Wurzel, um Betrag zu erhalten betrag = Math.sqrt(qSumme); } return betrag; } - + // Scalarmatrixmultiplikation public static int[][] matrixMultiplication(int[][] matrix, int scalar) { + // Initialiserung der Ausgabe int[][] ausgabe; - + // Falls die Matrix null ist wird null ausgegeben if (matrix == null) { ausgabe = null; + // Falls die Matrix 3x3 ist darf das Sclar multipliziert werden } else if (matrix.length == 3 && matrix[0].length == 3 && matrix[1].length == 3 && matrix[2].length == 3) { ausgabe = new int[3][3]; + // Alle 9 Kombinationsmöglichkeiten von inneren und äußeren Position wird durchgegangen for (int außenPos = 0; außenPos < matrix.length; außenPos++) { for (int innenPos = 0; innenPos < matrix[außenPos].length; innenPos++) { ausgabe[außenPos][innenPos] = matrix[außenPos][innenPos] * scalar; } } - } else { + } else { // Sollte keine 3x3 Matrix vorliegen, wird null ausgegeben ausgabe = null; } return ausgabe; } + // Für eine schnellere Überprüfung des Codes, ausführlichen Untersuchung + // erfolgt via eigene JUnit public static void main(String[] args) { int[] vector = { 2, 4, 7 }; int scalar = 3; diff --git a/VectorTest.java b/VectorTest.java index bff0832..cd659ce 100644 --- a/VectorTest.java +++ b/VectorTest.java @@ -1,10 +1,11 @@ -import org.junit.jupiter.api.Test; +// Dieser Test ist eine ausführliche Testung der Vektorklasse +import org.junit.jupiter.api.Test; import static org.junit.Assert.assertNull; import static org.junit.jupiter.api.Assertions.*; public class VectorTest { - + // Testteil für die überprüfung der Scalarenmultiplikation @Test void testScalarMultiplicationVariants() { int[] vector1 = { 1, -2, 3 }; @@ -27,7 +28,7 @@ public class VectorTest { Vector.scalarMultiplication(vector5, 5); assertArrayEquals(null, vector5); } - + // Test für den Kreuzprodukt in 2D @Test void testVectorProduct2DVariants() { int ergebnis1 = -2; @@ -39,7 +40,7 @@ public class VectorTest { Vector.vectorProduct(new int[] { 0, 1 }, new int[] { 1, 0 }); } - + // Test für den Kreuzprodukt in 3D @Test void testVectorProduct3DVariants() { int[] ergebnis1 = { -3, 6, -3 }; @@ -51,20 +52,20 @@ public class VectorTest { Vector.vectorProduct(new int[] { 0, 0, 1 }, new int[] { 0, 1, 0 }); } - + // Test für den Kreuzprodukt bei unterschiedlichen Dimensionen @Test void testVectorProductInvalidDimensions() { System.out.println("Erwartet: illegale Dimension"); Vector.vectorProduct(new int[] { 1, 0 }, new int[] { 0, 1, 0 }); } - + // Test für den Vektorbetrag @Test void testVectorLengthVariants() { assertEquals(5.0, Vector.vectorLength(new int[] { 3, 4 }), 0.001); assertEquals(3.0, Vector.vectorLength(new int[] { 1, 2, 2 }), 0.001); assertEquals(0.0, Vector.vectorLength(new int[] { 0, 0, 0 }), 0.001); } - + // Test für die scalare Matrixmultiplikation @Test void testMatrixMultiplicationVariants() { int[][] matrix = { @@ -91,7 +92,7 @@ public class VectorTest { }; assertArrayEquals(expectedZero, Vector.matrixMultiplication(zeroMatrix, 0)); } - + // Test von fehlerhafte Matrixen für die scalare Matrixmultiplikation @Test void testMatrixMultiplicationInvalidCases() { int[][] non3DSquare = {