Hallo gemeinsam,
ich versuche folgende aufgabe zu lösen, aber weiss nicht wie. Ich habe die Klasse Zufallszahl geschrieben, wo im Konstruktor für jedes Object ein Random zahl erzeugt wird. Diese Klasse Zufallszahl und ihre funktionalitat findet ihr hier http://www.java-forum.org/thema/zufallszahl-statische-attribute-und-methoden.176009/
Nun gibt es eine fortsetzung dieser aufgabe und da heisst es:
Erweitern Sie Ihre Klasse Zufallszahl aus Aufgabe 2 um die Unterstützung für verschiedene Zufallszahl-Generatoren. Erstellen Sie dazu eine Schnittstelle ZufallszahlGenerator, die eine Methode zur Berechnung einer Zufallszahl definiert. Erstellen Sie anschließend mindestens zwei verschiedene Klassen, die diese Schnittstelle implementieren und auf jeweils unterschiedliche Weise eine Zufallszahl erzeugen. Eine mögliche Implementierung können Sie aus Aufgabe 2 übernehmen, die Zufälligkeit der erzeugten Zahlen steht aber bei dieser Aufgabe nicht im Vordergrund (beispielsweise könnte Ihre Implementierung auch stets die gleiche „Zufallszahl“ 42 zurückliefern). Ändern Sie nun die Klasse Zufallszahl so ab, das sie die Berechnung der Zufallszahl an eine beliebige, die Schnittstelle ZufallszahlGenerator implementierende Klasse delegiert. Welche konkrete Implementierung zum Einsatz kommt, soll dabei zur Laufzeit festgelegt und geändert werden können.
Ich weiss nicht wie ich nun die klasse zur zufallszahlen rufen soll und wo ich es rufen soll? Ich verstehe einfach diesen Satz nicht "..das sie die Berechnung der Zufallszahl an eine beliebige, die Schnittstelle ZufallszahlGenerator implementierende Klasse delegiert. " Kann mir das jemand erklaren, was hier gemeint ist.
Das was ich gemacht habe hange ich unten ran.
Schnittstelle ZufallszahlGenerator
Klasse ImplementZahlOne
Klasse ImplementZahlTwo
Klasse Zufallszahl
ich versuche folgende aufgabe zu lösen, aber weiss nicht wie. Ich habe die Klasse Zufallszahl geschrieben, wo im Konstruktor für jedes Object ein Random zahl erzeugt wird. Diese Klasse Zufallszahl und ihre funktionalitat findet ihr hier http://www.java-forum.org/thema/zufallszahl-statische-attribute-und-methoden.176009/
Nun gibt es eine fortsetzung dieser aufgabe und da heisst es:
Erweitern Sie Ihre Klasse Zufallszahl aus Aufgabe 2 um die Unterstützung für verschiedene Zufallszahl-Generatoren. Erstellen Sie dazu eine Schnittstelle ZufallszahlGenerator, die eine Methode zur Berechnung einer Zufallszahl definiert. Erstellen Sie anschließend mindestens zwei verschiedene Klassen, die diese Schnittstelle implementieren und auf jeweils unterschiedliche Weise eine Zufallszahl erzeugen. Eine mögliche Implementierung können Sie aus Aufgabe 2 übernehmen, die Zufälligkeit der erzeugten Zahlen steht aber bei dieser Aufgabe nicht im Vordergrund (beispielsweise könnte Ihre Implementierung auch stets die gleiche „Zufallszahl“ 42 zurückliefern). Ändern Sie nun die Klasse Zufallszahl so ab, das sie die Berechnung der Zufallszahl an eine beliebige, die Schnittstelle ZufallszahlGenerator implementierende Klasse delegiert. Welche konkrete Implementierung zum Einsatz kommt, soll dabei zur Laufzeit festgelegt und geändert werden können.
Ich weiss nicht wie ich nun die klasse zur zufallszahlen rufen soll und wo ich es rufen soll? Ich verstehe einfach diesen Satz nicht "..das sie die Berechnung der Zufallszahl an eine beliebige, die Schnittstelle ZufallszahlGenerator implementierende Klasse delegiert. " Kann mir das jemand erklaren, was hier gemeint ist.
Das was ich gemacht habe hange ich unten ran.
Schnittstelle ZufallszahlGenerator
Java:
package ubungsblatt;
public interface ZufallszahlGenerator {
public int zufallszahl();
}
Java:
package ubungsblatt;
import java.util.Random;
public class ImplementZahlOne implements ZufallszahlGenerator{
@Override
public int zufallszahl() {
Random random = new Random();
int randomNumber = random.nextInt(100);
System.out.println("In der Klasse ImplementZahlOne");
return randomNumber;
}
}
Java:
package ubungsblatt;
import java.util.ArrayList;
import java.util.Random;
public class ImplementZahlTwo implements ZufallszahlGenerator {
@Override
public int zufallszahl() {
int size = 100;
ArrayList<Integer> list = new ArrayList<Integer>(size);
for (int i = 1; i <= size; i++) {
list.add(i);
}
Random rand = new Random();
int index = rand.nextInt(list.size());
int x = list.get(index);
System.out.println("In der Klasse ImplementZahlTwo");
return x;
}
}
Klasse Zufallszahl
Java:
package ubungsblatt;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Zufallszahl{
public final int nummer;
public final int randomNumber;
private static int count = 0;
public Zufallszahl() {
count++;
this.nummer = count;
Random random = new Random();
int randomNumber = random.nextInt(100);
this.randomNumber = randomNumber;
}
public int getRandomNumber() {
return randomNumber;
}
public static int getCount() {
return count;
}
public static int groesteZahl(Zufallszahl... params) {
int max = 0;
for (Zufallszahl o : params) {
if (max < o.getRandomNumber()) {
max = o.getRandomNumber();
}
}
return max;
}
public static Zufallszahl groesteZufallsObjekt(int max, Zufallszahl... params) {
Zufallszahl p = null;
for (Zufallszahl o : params) {
if (max == o.getRandomNumber()) {
p = o;
}
}
return p;
}
public static int grosteZahl(List<Integer> list) {
int x = Collections.max(list);
return x;
}
public static void main(String[] args) {
Zufallszahl z = null;
int max = 0;
Zufallszahl z1 = new Zufallszahl();
Zufallszahl z2 = new Zufallszahl();
Zufallszahl z3 = new Zufallszahl();
Zufallszahl z4 = new Zufallszahl();
Zufallszahl z5 = new Zufallszahl();
Zufallszahl z6 = new Zufallszahl();
List<Integer> list = new ArrayList<>();
list.add(z1.getRandomNumber());
list.add(z2.getRandomNumber());
list.add(z3.getRandomNumber());
list.add(z4.getRandomNumber());
list.add(z5.getRandomNumber());
list.add(z6.getRandomNumber());
System.out.println("Zufalszahl:\t" + z1.getRandomNumber());
System.out.println("Zufalszahl:\t" + z2.getRandomNumber());
System.out.println("Zufalszahl:\t" + z3.getRandomNumber());
System.out.println("Zufalszahl:\t" + z4.getRandomNumber());
System.out.println("Zufalszahl:\t" + z5.getRandomNumber());
System.out.println("Zufalszahl:\t" + z6.getRandomNumber());
System.out.println();
System.out.println("Zufalszahl:\t" + z1.nummer);
System.out.println("Zufalszahl:\t" + z2.nummer);
System.out.println("Zufalszahl:\t" + z3.nummer);
System.out.println("Zufalszahl:\t" + z4.nummer);
System.out.println("Zufalszahl:\t" + z5.nummer);
System.out.println("Zufalszahl:\t" + z6.nummer);
System.out.println();
System.out.println("Anzahl der erzeugten objecte:\t" + getCount());
max = groesteZahl(z1, z2, z3, z4, z5, z6);
System.out.println("Grösste Zufallszahl:\t" + max);
z = groesteZufallsObjekt(max, z1, z2, z3, z4, z5, z6);
System.out.println("Nummer des Objects mit dem grössten Zufallszahl:\t" + z.nummer);
System.out.println("Grösste Zufallszahl:\t" + grosteZahl(list));
ZufallszahlGenerator one = new ImplementZahlOne();
ZufallszahlGenerator two = new ImplementZahlTwo();
System.out.println();
System.out.println(one.zufallszahl());
System.out.println(two.zufallszahl());
}
}