Hi hier mal der Code von der Methode:
Und hier mal die Aufgabenstellung:
Die Funktionsweise des zugrundeliegenden Algorithmus wird in der Dokumentation
aber nur unvollständig erklärt.
Analysieren Sie den Algorithmus und erklären Sie seine Funktionsweise im Detail
(Anweisung für Anweisung). Beantworten Sie dabei unter anderem folgende Fragen:
• Warum kann man in Java mit der Bedingung (n&-n)==n prüfen, ob ein, wenn n eine Zweierpotenz ist?
• Was wird zurückgegeben, wenn n eine Zweierpotenz ist? Wie funktioniert die Berechnung in der return-Anweisung genau?
• Warum kann zum Berechnen der Zufallszahl im gewünschten Wertebereich in der Schleife eine Modulo-Operation verwendet werden?
• Wie wird sichergestellt, dass die Zufallszahlen gleichverteilt sind? Gehen Sie dabei insbesondere auf die Bedingung der do-while-Schleife ein.
Die Darstellung von negativen Zahlen in Java (Zweierkomplement-Darstellung) spielt eine wichtige Rolle.
Was mir mal klar ist dass bei der ersten if anweisung wo n=0 steht eine Exception gworfen wird. Dass n positiv sein muss.
Bei der nächsten if Anweisung steht wenn n&-n = n ist (was glaub ich nur sein kann bei 2^n zahlen oder?)
Soll er einen Int Wert zurückgeben aber welchen genau was das genau bedeutet weiß ich nicht verschiebe operator ist noch drinnen und so....?
Danach Deklaration von zwei int werten.
Danach eine do while schleife wo zwei zuweisungen sind eine mit einen modulo operator aber was die genau bedeuten weiß ich nicht und wie lange die schleife erfüllt ist die abbruchbedingung versteh ich auch nicht ganz.
Was heißt das next(31) versteh ich nicht?
Auf die Zusatzfragen hab ich auch nicht wirklich eine antwort.
Bitte um Hilfe
Code:
public int nextInt(int n) {
if (n<=0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while(bits – val + (n-1) < 0);
return val;
}
Und hier mal die Aufgabenstellung:
Die Funktionsweise des zugrundeliegenden Algorithmus wird in der Dokumentation
aber nur unvollständig erklärt.
Analysieren Sie den Algorithmus und erklären Sie seine Funktionsweise im Detail
(Anweisung für Anweisung). Beantworten Sie dabei unter anderem folgende Fragen:
• Warum kann man in Java mit der Bedingung (n&-n)==n prüfen, ob ein, wenn n eine Zweierpotenz ist?
• Was wird zurückgegeben, wenn n eine Zweierpotenz ist? Wie funktioniert die Berechnung in der return-Anweisung genau?
• Warum kann zum Berechnen der Zufallszahl im gewünschten Wertebereich in der Schleife eine Modulo-Operation verwendet werden?
• Wie wird sichergestellt, dass die Zufallszahlen gleichverteilt sind? Gehen Sie dabei insbesondere auf die Bedingung der do-while-Schleife ein.
Die Darstellung von negativen Zahlen in Java (Zweierkomplement-Darstellung) spielt eine wichtige Rolle.
Was mir mal klar ist dass bei der ersten if anweisung wo n=0 steht eine Exception gworfen wird. Dass n positiv sein muss.
Bei der nächsten if Anweisung steht wenn n&-n = n ist (was glaub ich nur sein kann bei 2^n zahlen oder?)
Soll er einen Int Wert zurückgeben aber welchen genau was das genau bedeutet weiß ich nicht verschiebe operator ist noch drinnen und so....?
Danach Deklaration von zwei int werten.
Danach eine do while schleife wo zwei zuweisungen sind eine mit einen modulo operator aber was die genau bedeuten weiß ich nicht und wie lange die schleife erfüllt ist die abbruchbedingung versteh ich auch nicht ganz.
Was heißt das next(31) versteh ich nicht?
Auf die Zusatzfragen hab ich auch nicht wirklich eine antwort.
Bitte um Hilfe