From 81ee8d31527a41f7a115a9b4e2e9be889cc4e5e7 Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Thu, 27 Apr 2023 12:38:49 +0200 Subject: [PATCH] u13 --- u13/.classpath | 11 ++++ u13/.gitignore | 1 + u13/.project | 17 ++++++ u13/.settings/org.eclipse.jdt.core.prefs | 14 +++++ u13/src/de/hsh/zahlenarraytest/Main.java | 18 ++++++ .../hsh/zahlenarraytest/MeinZahlenarray.java | 58 +++++++++++++++++++ .../de/hsh/zahlenarraytest/Zeitmesser.java | 43 ++++++++++++++ 7 files changed, 162 insertions(+) create mode 100644 u13/.classpath create mode 100644 u13/.gitignore create mode 100644 u13/.project create mode 100644 u13/.settings/org.eclipse.jdt.core.prefs create mode 100644 u13/src/de/hsh/zahlenarraytest/Main.java create mode 100644 u13/src/de/hsh/zahlenarraytest/MeinZahlenarray.java create mode 100644 u13/src/de/hsh/zahlenarraytest/Zeitmesser.java diff --git a/u13/.classpath b/u13/.classpath new file mode 100644 index 0000000..78913f0 --- /dev/null +++ b/u13/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/u13/.gitignore b/u13/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/u13/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/u13/.project b/u13/.project new file mode 100644 index 0000000..ce00cdb --- /dev/null +++ b/u13/.project @@ -0,0 +1,17 @@ + + + u13 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/u13/.settings/org.eclipse.jdt.core.prefs b/u13/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d --- /dev/null +++ b/u13/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/u13/src/de/hsh/zahlenarraytest/Main.java b/u13/src/de/hsh/zahlenarraytest/Main.java new file mode 100644 index 0000000..efb9e97 --- /dev/null +++ b/u13/src/de/hsh/zahlenarraytest/Main.java @@ -0,0 +1,18 @@ +package de.hsh.zahlenarraytest; + +import de.hsh.prog.zahlenarray.ZahlenPruefer; + +/** + * Main-Klasse zum Testen der zarr Klassen + * @author p8q-yhw-u1 + * + */ +public class Main { + public static void main(String[] args) { + MeinZahlenarray array= new MeinZahlenarray(10000, 500000); + int anzahl= ZahlenPruefer.anzahlVerschiedene(array); + System.out.println("Anzahl: "+anzahl); + System.out.println("istEnthalten verbraucht durchschnittlich " + +1000*array.getDurchschnittlicheAbfragezeit()+" µs"); + } +} \ No newline at end of file diff --git a/u13/src/de/hsh/zahlenarraytest/MeinZahlenarray.java b/u13/src/de/hsh/zahlenarraytest/MeinZahlenarray.java new file mode 100644 index 0000000..077ec1a --- /dev/null +++ b/u13/src/de/hsh/zahlenarraytest/MeinZahlenarray.java @@ -0,0 +1,58 @@ +package de.hsh.zahlenarraytest; + +import java.util.Arrays; + +import de.hsh.prog.zahlenarray.Zahlenarray; + +/** + * Verbesserung der Zahlenarray Klasse für Zeitmessung und Optimierung + * @author p8q-yhw-u1 + * + */ +public class MeinZahlenarray extends Zahlenarray { + + private Zeitmesser zm; + private int[] zahlen; + + private int abfragen; + + /** + * Initialisiert ein sortiertes Zahlenarray + * @param anzahl Größe des Arrays + * @param max Obergrenze der Zufallszahlen mit denen das Array gefüllt wird + */ + public MeinZahlenarray(int anzahl, int max) { + super(anzahl, max); + + this.zm = new Zeitmesser(); + + this.zahlen = super.getZahlenArray(); + + zm.start(); + Arrays.sort(zahlen); + zm.stop(); + } + + /** + * Gibt zurück, ob eine Zahl i mindestens einmal im Array vorhanden ist + */ + @Override + public boolean istEnthalten(int i) { + this.zm.start(); + boolean result = Arrays.binarySearch(zahlen, i) >= 0; + this.zm.stop(); + + this.abfragen++; + + return result; + } + + /** + * Gibt die durchschnittliche Abfragezeit der istEnthalten Funktion zurück + * @return + */ + public double getDurchschnittlicheAbfragezeit() { + return (double) this.zm.getGemesseneGesamtzeit() / this.abfragen; + } + +} diff --git a/u13/src/de/hsh/zahlenarraytest/Zeitmesser.java b/u13/src/de/hsh/zahlenarraytest/Zeitmesser.java new file mode 100644 index 0000000..09a28c9 --- /dev/null +++ b/u13/src/de/hsh/zahlenarraytest/Zeitmesser.java @@ -0,0 +1,43 @@ +package de.hsh.zahlenarraytest; + +/** + * Klasse zum Messen von Zeit in Milisekunden + * @author p8q-yhw-u1 + * + */ +public class Zeitmesser { + + private boolean running = false; + + private long startTime; + private long sumTime = 0; + + /** + * Startet eine Zeitmessung + */ + public void start() { + if (this.running) throw new IllegalStateException("Zeitmessung läuft bereits."); + + this.running = true; + this.startTime = System.currentTimeMillis(); + } + + /** + * Beendet eine Zeitmessung + */ + public void stop() { + if (! this.running) throw new IllegalStateException("Zeitmessung bereits gestoppt."); + + this.running = false; + this.sumTime += System.currentTimeMillis() - this.startTime; + } + + /** + * Liefert die Summe aller beendeten Zeitmessungen + * @return Summe aller beendeten Zeitmessungen + */ + public long getGemesseneGesamtzeit() { + if (this.running) throw new IllegalStateException("Zeitmessung läuft noch."); + return this.sumTime; + } +}