Random bereich und for schleife

MrClave

Bekanntes Mitglied
Hallö'chen,

Ich habe derzeit 2 verschiedene Probleme, die mich beschäftigen.
Diese wären einmal eine Random Zahlenreihe beschränken (zB. 10 - 20) und das andere Problem wäre, wie ich mir endlich mal die for-Schleife merken kann, sprich, was genau ich in dieser deklarieren muss.

Random problem:

Bisher habe ich meine ersten Random Zahlenreihe so beschränkt:
Aufgabe aus der Schule = 10 Random Zahlen im Bereich 10, 20
Java:
public class RandomGenerator 
{
	public static void main(String[] args) 
	{
		int count = 0;
		int min = 10;
		int max = 20;
		
		while( count < 10 )
		{
			int zahl = min + (int) ( min - Math.random() * ( ( max - min) + 1) );
			System.out.println(zahl);
			count++;
		}
		
	}
}

Allerdings finde ich das ganze sehr umständlich und er gibt mir auch nur Zahlen von 10 bis 19 aus.
Hat jemand eine leichtere Methode, bzw. eine die man sich leichter merken kann ?
Ich weiß, dass es alles nur Übungssache ist, allerdings lernen wir zur Zeit soviel, dass ich mir einfach nicht alles einprägen kann gerade.

For-Schleife:
Jaaa, bisher habe ich da kein Beispiel für, allerdings kann ich mit dieser Schleife auch wenig anfangen, da ich sie schlichtweg nicht wirklich verstehe.
Hat jemand eine Erklärung, die man sich leicht merken kann ? So eine Art Eselsbrücke ?
Und wann genau brauch man eine for-schleife ?

Bin dankbar für jede Hilfe!
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
Java:
Random rand= new Random();
int zw = rand.nextInt(20); // Zahl zwischen 0 und 20
int zw2 = rand.nextInt(20)+20; // Zahl zwischen 20 und 40
 

Schandro

Top Contributor
Erstmal grundsätzlich: Beim Programmieren geht es nicht um auswendig lernen, dass ist völlig unwichtig. Du musst die Logik hinter dem ganzen verstehen, dann kannst du dir alles selber zusammen bauen. Das ist der einzig richtige Weg.

Wegen den Zufallszahlen:
Code:
(int)(Math.random()*(max+1-min)+min)
Das gibt dir ein int zwischen inklusive min und inklusive max.

Wegen der for-Schleife:
Musst du einfach benutzen, dann wirst du schon bald merken wie sie funktioniert. Grundsätzlich kann man jede for-Schleife aber auch mit
Code:
while
schreiben:
Java:
		for(int i=0;i<5;++i) {
			System.out.println(i);
		}
ist genau dasselbe wie
Java:
		int i=0;
		while(i<5) {
			System.out.println(i);
			++i;
		}
(jedenfallls wenn man den scope von i ignoriert, dass braucht dich aber erstmal nicht zu interessieren)
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
Java:
Random rand= new Random();
int zw = rand.nextInt(20); // Zahl zwischen 0 und 20
int zw2 = rand.nextInt(20)+20; // Zahl zwischen 20 und 40

rand.nextInt(x) -> Zufallszahlen zwischen 0 und X. Wenn ich nun dazu ein Y addiere dann folgt->
rand.nextInt(x)+y -> Zufallszahlen zwischen x und y
 

MrClave

Bekanntes Mitglied
Erstmal grundsätzlich: Beim Programmieren geht es nicht um auswendig lernen, dass ist völlig unwichtig. Du musst die Logik hinter dem ganzen verstehen, dann kannst du dir alles selber zusammen bauen. Das ist der einzig richtige Weg.

Wegen den Zufallszahlen:
Code:
(int)(Math.random()*(max+1-min)+min)
Das gibt dir ein int zwischen inklusive min und inklusive max.

Wegen der for-Schleife:
Musst du einfach benutzen, dann wirst du schon bald merken wie sie funktioniert. Grundsätzlich kann man jede for-Schleife aber auch mit
Code:
while
schreiben:
Java:
		for(int i=0;i<5;++i) {
			System.out.println(i);
		}
ist genau dasselbe wie
Java:
		int i=0;
		while(i<5) {
			System.out.println(i);
			++i;
		}
(jedenfallls wenn man den scope von i ignoriert, dass braucht dich aber erstmal nicht zu interessieren)


Ja, da hast du recht ! :)
Könntest du mir vielleicht noch erklären, wie genau diese Zeile zustande kommt ? Ich selbst hatte diese nämlich auch nur von Google ;)
(int)(Math.random()*(max+1-min)+min)
typecasten und eine Zahl generieren und den Rest verstehe ich dann nicht wirklich.

Ok, nun wo du das Anhand der while Schleife erklärt hast, fange ich langsam an, die Logik hinter for zu verstehen.
 
F

Firephoenix

Gast
bei
Java:
rand.nextInt(x)+y
ist y sehr wohl inbegriffen, es wird das intervall [y,y+x-1] erreicht.
willst du das Intervall [y,y+x] musst du nur x noch um 1 verschieben, also
Java:
rand.nextInt(x+1)+y

(Dokumentation der Methode lesen und kurz nachdenken dürfte hier aber schon reichen)

Gruß
 

pro2

Bekanntes Mitglied
Ich will ja keine Zahlen zwischen 0 und Y, sondern zwischen X und Y.
Und einige Teile der Codes hatten wir noch nicht im Unterricht, daher weiß ich gerade nicht genau, was ich damit anfangen soll ^^

Richtig. Aber wenn du doch weißt, dass du eine zwischen 0 (inklusive) und Y (exklusive) bekommst, dann wird es doch nicht mehr so schwer für dich sein, daraus X bis Y zu machen. :)
Lösung wurde aber eh schon gepostet.
 

MrClave

Bekanntes Mitglied
Irgendwie ja nicht...

Wenn ich das so schreibe, dann addiert er Y zu X und gibt mir Zahlen zwischen Y und (Y + X) aus.

Java:
int zahl = rand.nextInt(min)+max;

Das wollte ich ja nicht... Soll ja weiterhin zwischen und inklusive X und Y sein, was so nicht funktioniert.
Die Lösung habe ich, aber auf eine andere Weise, wie die obige.

Und bitte nicht zerfleischen ;) Hab Welpenschutz!

EDIT:
Habe nun die Lösung auf diese Weise!

Java:
int zahl = rand.nextInt(min)+ (max-min+1);
 
Zuletzt bearbeitet:
F

Firephoenix

Gast
Da lag ich mit meiner ersten Antwort falsch, ich dache du willst X bis X+Y haben
Allerdings:
Java:
int zahl = rand.nextInt(min)+ (max-min+1);
ist nicht korrekt, rand.nextInt(min) produziert [0,min-1]
Du erreichst also das Intervall [0+max-min+1 , min-1+max-min+1]
was [max-min+1 , max] entspricht.
Bei min = 5 und max = 8 also [8-5+1,8] = [4,8]

Korrekt wäre
Java:
int zahl = rand.nextInt(max-min+1)+min;

damit erreichst du das Intervall [0+min , max-min+1-1+min] = [min,max]

Gruß
 

MrClave

Bekanntes Mitglied
Da lag ich mit meiner ersten Antwort falsch, ich dache du willst X bis X+Y haben
Allerdings:
Java:
int zahl = rand.nextInt(min)+ (max-min+1);
ist nicht korrekt, rand.nextInt(min) produziert [0,min-1]
Du erreichst also das Intervall [0+max-min+1 , min-1+max-min+1]
was [max-min+1 , max] entspricht.
Bei min = 5 und max = 8 also [8-5+1,8] = [4,8]

Korrekt wäre
Java:
int zahl = rand.nextInt(max-min+1)+min;

damit erreichst du das Intervall [0+min , max-min+1-1+min] = [min,max]

Gruß

Mit meiner Lösung bekomme ich aber genau die Zahlen, die ich wollte, also ist meine Lösung doch korrekt ;)
Und es werden auch alle im Bereich [10,20] ausgedruckt
Es funktioniert vielleicht nicht auf alles, aber in diesem Fall, hat es zumindest geklappt ^^

Java:
int zahl = rand.nextInt(min)+ (max-min+1);

min = 10 / max = 20
(10) + (20-10+1) -> [10,21)
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
das funktioniert nur weil zufällig min = max-min ist...

also so ungefähr...
int zahl = rand.nextInt(max-min)+ min;

+/- 1 ;-)
 
T

TryToHelp

Gast
Es funktioniert nur, da es ein Sonderfall ist, aber willst du nur für die bestimmten Zahlen programmieren oder lieber richtig, dann nehme den Vorschlag von Firephoenix weil wie Marco13 schon beschrieben hat funktioniert deine Lösung nicht immer, die von Firephoenix funktioniert immer ;-)
 

tfa

Top Contributor
Es funktioniert vielleicht nicht auf alles, aber in diesem Fall, hat es zumindest geklappt
In diesem speziellen Fall. Und wenn du später mal den Bereich in [0,100) ändern willst, wunderst du dich, dass gar nichts mehr klappt. Dann mach es doch gleich richtig.
 

MrClave

Bekanntes Mitglied
das funktioniert nur weil zufällig min = max-min ist...

also so ungefähr...
int zahl = rand.nextInt(max-min)+ min;

+/- 1 ;-)

Na, das ist doch eine Aussage, mit der was anfangen kann.


@bone2
Leider bist du falsch ^^ Ich bekomme Zahlen im Intervall von [10,20]
Hab's ja schon getestet.

@tfa
[0,100) kann man auch ganz anders und einfacher definieren ;)

Aber hat sich dann nun auch erledigt mit dem Random. Danke an Firepheonix für die korrekte Lösung :)
 

Crian

Top Contributor
Deshalb ist so ein gewurschtel in einer Zeile auch nur sinnvoll, wenn man genau weiß, was man da macht.

Korrekt wäre
Java:
int zahl = rand.nextInt(max-min+1)+min;

damit erreichst du das Intervall [0+min , max-min+1-1+min] = [min,max]

Auch wenn das in diesem Fall vielleicht auch nicht viel übersichtlicher aussieht, lässt sich der Code quasi durch sich selbst dokumentieren, indem man sowas in eine Methode auslagert und dort sprechende Zwischenergebnisse verwendet. Etwa so:

Java:
    private int generateIntBetweenMinAndMaxIncludingBoth(int min, int max) {
        int difference = max - min;
        int differenceWithMax = difference + 1;
        int randomBetweenZeroAndDifferenceWithMax = random.nextInt(differenceWithMax);
        int randomMovedToMin = randomBetweenZeroAndDifferenceWithMax + min;
        return randomMovedToMin;
    }

Kein Beweis, aber ein ganz guter Test:

Java:
package forumProblems;

import java.util.Random;

public class RandomProblem {

    private Random random;

    public RandomProblem() {
        random = new Random();
        testcase(10,      20,  1000);
        testcase(0,      100, 10000);
        testcase(-1,       1,   100);
        testcase(-1000, 1000, 10000);
    }

    private void testcase(int min, int max, int numberOfTestcases) {
        int minCase = 0;
        int maxCase = 0;
        for (int i=0; i<numberOfTestcases; ++i) {
            int number = generateIntBetweenMinAndMaxIncludingBoth(min, max);
            if (0 == i || number < minCase) {
                minCase = number;
            }
            if (0 == i || number > maxCase) {
                maxCase = number;
            }
        }
        System.out.println("Testcase [" + min + ", " + max
                + "], erreicht wurde [" + minCase + ", " + maxCase + "] in "
                + numberOfTestcases + " Versuchen.");
    }

    private int generateIntBetweenMinAndMaxIncludingBoth(int min, int max) {
        int difference = max - min;
        int differenceWithMax = difference + 1;
        int randomBetweenZeroAndDifferenceWithMax = random.nextInt(differenceWithMax);
        int randomMovedToMin = randomBetweenZeroAndDifferenceWithMax + min;
        return randomMovedToMin;
    }

    public static void main(String[] args) {
        new RandomProblem();

    }

}

Ausgabe:

Code:
Testcase [10, 20], erreicht wurde [10, 20] in 1000 Versuchen.
Testcase [0, 100], erreicht wurde [0, 100] in 10000 Versuchen.
Testcase [-1, 1], erreicht wurde [-1, 1] in 100 Versuchen.
Testcase [-1000, 1000], erreicht wurde [-1000, 1000] in 10000 Versuchen.
 
B

bone2

Gast
Na, das ist doch eine Aussage, mit der was anfangen kann.


@bone2
Leider bist du falsch ^^ Ich bekomme Zahlen im Intervall von [10,20]
Hab's ja schon getestet.
Nein, bin ich nicht.

{11, 12, 13, 14, 15, 16, 17, 18, 19, 20} sind mit deiner Lösung und min=10 max = 20 möglich
das entspricht diesem Intervall: ]10,20] bzw (10,20] bzw [11,20]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Bereich festelgen bei Random Java Basics - Anfänger-Themen 9
hdi Random() : Bereich festelgen Java Basics - Anfänger-Themen 17
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
laxla123 Bedeutung int random Java Basics - Anfänger-Themen 3
monsterherz Arbeiten mit Random Java Basics - Anfänger-Themen 12
J Math.Random Java Basics - Anfänger-Themen 9
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
K Problem mit "Random" Java Basics - Anfänger-Themen 5
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Random(x,y,z) Java Basics - Anfänger-Themen 4
alialhajhossein math.random Java Basics - Anfänger-Themen 3
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
D Wahrscheinlichkeiten mit Math.random() Methode Java Basics - Anfänger-Themen 1
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
B Math.random mit Boolean array? Java Basics - Anfänger-Themen 17
I math.random Grenzwerte Java Basics - Anfänger-Themen 2
C Arraywerte random vertauschen Java Basics - Anfänger-Themen 2
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
SchmidiMC Methoden Random in Methode neu generieren lassen Java Basics - Anfänger-Themen 1
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
J Operatoren Random wird nur einmal erstellt und dann immer verwendet Java Basics - Anfänger-Themen 2
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
D Erste Schritte Random Java Basics - Anfänger-Themen 79
Z Problem mit "Random" in Java Java Basics - Anfänger-Themen 12
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
F Erste Schritte Random Zahl auswählen Java Basics - Anfänger-Themen 7
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
N java.util.Random - Zwei Zahlen mit festgesetzter Wahrscheinlichkeit? Java Basics - Anfänger-Themen 15
Thorwine Erste Schritte Wuerfelspiel mit Math.random() Java Basics - Anfänger-Themen 10
S Math.random() Zufall ? Java Basics - Anfänger-Themen 2
S Random Plattformen erstellen Java Basics - Anfänger-Themen 7
C Erste Schritte Random Wert auslesen und ausgeben Java Basics - Anfänger-Themen 2
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
I Random Ergebnis ausgeben und Gewinner ausgeben. Java Basics - Anfänger-Themen 3
I Spieler Name eintragen und Random Gewinner Java Basics - Anfänger-Themen 4
A Random String in TextView (Android)? Java Basics - Anfänger-Themen 2
V Random Java Basics - Anfänger-Themen 2
X Problem mit Math.random() Java Basics - Anfänger-Themen 2
S Random IDs immer 10-stellig? Wie? Java Basics - Anfänger-Themen 5
T Random vs. Math.random() Java Basics - Anfänger-Themen 2
R Schaffe es nicht Random-Programmierung zu vollenden. Wo liegt der Fehler in diesem Code? Java Basics - Anfänger-Themen 13
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
K Einfacher random namen weitergeben Java Basics - Anfänger-Themen 4
B Hilfe bei Greenfoot ( random blickrichtung + vor(); Java Basics - Anfänger-Themen 10
B Variablen Mehrere Zahlen mit unterschiedlicher Wahrscheinlichkeit mit Random auswählen Java Basics - Anfänger-Themen 17
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
R java.util.Random Java Basics - Anfänger-Themen 8
T Zufallserzeugung mit math.random und speichern in array Java Basics - Anfänger-Themen 29
J Woher kommt das Objekt "Math" bei Math.random(); ? Java Basics - Anfänger-Themen 3
P Typecasting für Ganzzahlige Zufallszahl (Math.random) Java Basics - Anfänger-Themen 2
I Zwei Mal das selbe Objekt per Random :( Java Basics - Anfänger-Themen 7
E Random Java Basics - Anfänger-Themen 7
Q Random Funktion JButtons Java Basics - Anfänger-Themen 6
E Variable neue Random Zahl zuweisen, wenn Button geklickt Java Basics - Anfänger-Themen 5
J Bedeutung von math.random() math.round() Java Basics - Anfänger-Themen 7
K ArrayList random füllen Java Basics - Anfänger-Themen 2
K random problem Java Basics - Anfänger-Themen 3
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
R (Math.random()*49) zahl darf aber nur einmal gezogen werden Java Basics - Anfänger-Themen 11
B Random() gleiche Zahlen ausschließen Java Basics - Anfänger-Themen 30
T Buttons (auf denen bilder sind) random vertauschen Java Basics - Anfänger-Themen 11
C math.random() Java Basics - Anfänger-Themen 9
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
B Math.random und Strings Java Basics - Anfänger-Themen 13
R Java Random Java Basics - Anfänger-Themen 13
G Zahl erstellen / Random Java Basics - Anfänger-Themen 12
J Random Java Basics - Anfänger-Themen 11
radiac Datentypen RANDOM-punkt setzen INNERHALB eines BEREICHes Java Basics - Anfänger-Themen 2
M Zufallszahlen mit Random Java Basics - Anfänger-Themen 4
K Random Zahlen in ein Feld Java Basics - Anfänger-Themen 4
N java.util.Random Java Basics - Anfänger-Themen 6
Luk10 math.random() Java Basics - Anfänger-Themen 2
walker23m Datentypen Zufällig umsortieren einer Hashmap(random?) Java Basics - Anfänger-Themen 3
M Junit TestCase für Random() Zahlen Java Basics - Anfänger-Themen 6
S Random zahlen mit unter und obergrenze Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
S Skatblatt darstellen durch Random? Java Basics - Anfänger-Themen 48
H Random-Zahlen Java Basics - Anfänger-Themen 7
L Random Sortierung Java Basics - Anfänger-Themen 9
T random-methode Java Basics - Anfänger-Themen 18
M Random in Swing Java Basics - Anfänger-Themen 24
J Math.random() - kurze frage. Java Basics - Anfänger-Themen 20
J Random Wertebereich Java Basics - Anfänger-Themen 2
B Frage zu Random Java Basics - Anfänger-Themen 21
chik klasse random() Java Basics - Anfänger-Themen 6
B Random Zahlen und Formatierung Java Basics - Anfänger-Themen 6
G Random Zahlen Java Basics - Anfänger-Themen 25
S Diashoow Random Java Basics - Anfänger-Themen 4
G Switch-Case harmoniert nicht mit Random-Zahl Java Basics - Anfänger-Themen 3
Spin 4 stellige random zahl erzeugen Java Basics - Anfänger-Themen 4
G random mit tendenz? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben