100 Zufallszahlen generieren...

alexx910

Mitglied
Hey,
ich bin neu hier, habe zwar seit einem "halben" Jahr Informatik an meiner Schule, allerdings muss man die Zeit halbieren und berücksichtigen, dass ich nur 2 Stunden die 2 Wochen habe :D
Ja, kommen wir mal zu meinem Problem.
Und zwar hab ich so eine schöne Hausaufgabe bekommen, bei der ich 100 Zufallszahlen generieren muss, ist klar, mit Math.random() und dabei soll die Kleinste und Größte Zahl bestimmt werden.
Außerdem soll ich noch 2 Variablen verwenden, einmal min, dann noch max.
Sieht so aus, das mit noch par weiteren Variablen, i soll wohl die Vorgänge zählen und zz ist Zufallszahl.

Java:
double min, max, zz;
  int i;
  i=1;
  min=1.0;
  max=0.0;
Die ganze Angelegenheit muss ich auch noch mit while-Schleifen regeln, allerdings muss ich auch noch if und vllt else nutzen, weiß es nicht genau. Das tolle ist, dass wir while erst heute angefangen haben und nächste Woche schon eine Arbeit darüber schreiben werden.
Von daher die Frage, ob jemand eine Idee hätte, bzw. einen Ansatz, wie man das lösen könnte, ich hab da zwar n bissl zusammengewürfelt im Unterricht, aber Garantie auf Korrektheit kann ich nicht geben :)
Java:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 20.01.2011
  * @author
  */

public class random {

  // Anfang Attribute
  // Ende Attribute



  // Anfang Methoden
  public static void main(String[] args) {
  double min, max, zz;
  int i;
  i=1;
  min=1.0;
  max=0.0;
    while (i<=100)
        {
    zz=Math.random();
    if (zz<=max);
    {

    }
    i++;
    }

  } {}

  // Ende Methoden
}
Zumindest ist das alles, was wir heute im Unterricht geschafft haben :/
Hoffentlich kann mir jemand helfen.
mfg
alexx910
 

WIaimy

Mitglied
Fang mal damit, wo du die Zahlen abspeichern möchtest. Schließlich willst du die ja vergleichen, d.h. du hast zwei Möglichkeiten:
1) 100 Zufallszahlen erzeugen, in ein Array speichern und dann per Sortieralgorithmus vergleichen
2) Drei Hilfsvariablen:
- int immo = Die erzeugte Zufallszahl
- int niedrig = Die (im Moment) kleinste Zahl
- int hoch = Die (im Moment) größte Zahl
bei jedem Durchlauf deiner Schleife lässt du dann "immo" mit den anderen Variablen vergleichen und speicherst den Wert dann ggf in die Variablen
 

alexx910

Mitglied
Fang mal damit, wo du die Zahlen abspeichern möchtest. Schließlich willst du die ja vergleichen, d.h. du hast zwei Möglichkeiten:
1) 100 Zufallszahlen erzeugen, in ein Array speichern und dann per Sortieralgorithmus vergleichen
2) Drei Hilfsvariablen:
- int immo = Die erzeugte Zufallszahl
- int niedrig = Die (im Moment) kleinste Zahl
- int hoch = Die (im Moment) größte Zahl
bei jedem Durchlauf deiner Schleife lässt du dann "immo" mit den anderen Variablen vergleichen und speicherst den Wert dann ggf in die Variablen
Ich muss sagen, das sind wirklich gute Ideen, allerdings sind wir nicht einmal so weit, dass wir sortieralgorithmen oder arrays nutzen :( Ich könnte das ganze bestimmt iwie zusammenklatschen, wenn ich weiterhin in google rumstöber, aber ich glaube, dass ich mir das net so schnell merken könnte...
trotzdem danke :)
 

XHelp

Top Contributor
Sortieralgorithmen brauchst du hier nicht.
Rück den Code vernünftig ein, dann wirst du sehen, dass du bei der if-Abfrage ein Semikolon zu viel hast. Oder dass zum Schluss irgendwelche Klammer stehen.
Aber zum Problem: du vergleichst auf zz<max. Was soll es dir brigen? Du solltest viel mehr darauf testen, ob die generierte Zahl nicht größer ist, als das jetzige Maximum.
 

alexx910

Mitglied
Sortieralgorithmen brauchst du hier nicht.
Rück den Code vernünftig ein, dann wirst du sehen, dass du bei der if-Abfrage ein Semikolon zu viel hast. Oder dass zum Schluss irgendwelche Klammer stehen.
Aber zum Problem: du vergleichst auf zz<max. Was soll es dir brigen? Du solltest viel mehr darauf testen, ob die generierte Zahl nicht größer ist, als das jetzige Maximum.

Ich frag mich auch, wieso ich das vergleichen muss^^. Aber wie kann ich dann die jeweilige Zahl mit dem Ausgabewert vergleichen? wie kann ich das anstellen?
 

XHelp

Top Contributor
Wie warum? Weil du prüfen willst, ob die größer als das Maximum ist.
Und wie hast du doch schon stehen:
Code:
if (a>b) {...
 

alexx910

Mitglied
Wie warum? Weil du prüfen willst, ob die größer als das Maximum ist.
Und wie hast du doch schon stehen:
Code:
if (a>b) {...

Das mit Warum war ironisch gemeint^^ Und die 2. Frage war darauf gerichtet, dass ich nicht wirklich weiß, wie ich einen bestimmten Ausgabewert mit dem vorherigen vergleichen. Es sind ja x-beliebige Werte, die ich selber nicht angebe, sondern der Random ausspuckt, von daher weiß ich nicht, wie ich an diese rankomme, um sie dann zu vergleichen.
 

XHelp

Top Contributor
Den Wert hast du doch in
Code:
zz
. Welcher Wert vor 30 Runden war, ist eigentlich mit dieser Aufgabenstellung egal
 

alexx910

Mitglied
Sry, aber iwie werde ich nicht schlau draus :( Ich schreib lieber die Vollständige Aufgabenstellung hier rein, falls ich etwas missverständlich umschrieben habe:
Erstellen Sie ein Programm, das 100 Zufallszahlen erzeugt und dabei die Kleinste und Größte bestimmt.
Hinweis: Verwenden Sie zwei Variablen min und max, die während der Schleife laufend den bisher kleinsten bzw. größten Wert enthalten.
also, ich muss ja dann am ende das ganze nach größe sortiert rausbekommen, wie mache ich das am besten? Vergleich, gerne, aber was womit vergleichen? zz mit irgendwas, aber womit weiß ich auch nicht :(
Zudem muss ich ja das "jetztige" maximum vergleichen mit der random zahl, wie stelle ich das an?
 

XHelp

Top Contributor
Wo steht da was von sortiert? Wenn du auf die Werte doch aus irgendeinem Grund zugreifen willst: fang klein an und lass dir erstmal ein 100-elementiges-Array mit Zufallszahlen füllen
 

alexx910

Mitglied
Ich dachte, dass der Teil des Hinweises eine Sortierung hindeutet :/ Oops. Output von 100 xbeliebigen Zahlen ist kein Problem. Einfach das obere nehmen, egal ob mit oder ohne semicolon und schon haut der ein Dos-fenster mit 100 zahlen raus.
Wie kann ich weitermachen? Und wie bereits gesagt, mit array bin ich noch nicht vertraut :/ Von daher hätte ich daran gedacht, dass ich den Output einfach über System.out.print(zz) mache, da gibt der mir auch 100 Zahlen raus.
Was könnte ich machen, um das größte und kleinste Glied der Liste festzustellen? :)
 

XHelp

Top Contributor
max ist das aktuelle Maximum, zz ist die generierte Zahl. Wenn zz>max, dann wird max der Wert von zz zugewiegen, d.h. zz wird zum neuen max.
Ähnliche geschichte bei dem Minimum.
 

alexx910

Mitglied
max ist das aktuelle Maximum, zz ist die generierte Zahl. Wenn zz>max, dann wird max der Wert von zz zugewiegen, d.h. zz wird zum neuen max.
Ähnliche geschichte bei dem Minimum.

sollte ich dann mit nem else weitermachen?
Ich hab dann ja stehen, dass zz>max als If,
dann müsste ich ja eigentlich ein else(zz<min) machen, oder? :/
 

XHelp

Top Contributor
else(zz<min) ist syntaktisch falsch. Außerdem hat die Suche nach max nichts mit der suche nach min zu tun. Ich würde es also in separaten Abfragen machen.
 

alexx910

Mitglied
else(zz<min) ist syntaktisch falsch. Außerdem hat die Suche nach max nichts mit der suche nach min zu tun. Ich würde es also in separaten Abfragen machen.

Also empfielst du mir eher, das ganze in 2 While-schleifen zu packen? :/ Oder irre ich mich jetzt^^ Diese Coder-Sprache ist für mich im moment ein Rätsel^^ Ich probiers dann mal aus :)
 

XHelp

Top Contributor
Nein, nicht 2 Schleifen, 2 ABFRAGEN:
Java:
for (......) {
...
  if (zz>max) {
    //mach was
  }
  if (zz<min) {
    //mach was anderes
  }
...
}
 

alexx910

Mitglied
Hmm... Ich begreifs nicht, alles so wie gesagt befolgt, und der Java-Editor haut mir nen Fehler raus:
random.java:25:7: variable zz might not have been initialized
if (zz>max)
^
1 error
Was deutet der Editor damit an?
Und sry für die ganzen Fragen, aber ich hab wirklich nicht viel Ahnung von dem Zeug. :(
 

alexx910

Mitglied
Was hast du denn jetzt alles stehen?
Ich rate dir aber mal etwas an Anfängerliteratur über Grundlagen durchzulesen
also, das ist alles was ich da stehen habe:
Java:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 20.01.2011
  * @author
  */

public class random {

  // Anfang Attribute
  // Ende Attribute



  // Anfang Methoden
  public static void main(String[] args) {
  double min, max, zz;
  int i;
  i=1;
  min=1.0;
  max=0.0;
    for (i = 1;i<=100;i++) {

  if (zz>max)
  {
  System.out.print(zz);  //mach was
  }
  if (zz<min)
  {
  System.out.print(zz);  //mach was anderes
  }
  }}


  // Ende Methoden
}
Und was für Literatur würdest du mir so empfehlen, was man eventuell in einem Buchfachhandel erwerben könnte? bzw. als E-Book?
 

XHelp

Top Contributor
Fehlt da bei einem Programm, welches 100 Zufallszahlen auswertet nicht sowas triviales wie *trommelwirbel* die Generierung von Zufallszahlen? ;) Im ersten Post hattest du es ja noch.

Was die Bücher angeht: es existieren bereits mehrere Threads darüber. Kann nur soviel sagen, dass ich dir "Java Intensivkurs" von Block nicht empfehle.
 

alexx910

Mitglied
Fehlt da bei einem Programm, welches 100 Zufallszahlen auswertet nicht sowas triviales wie *trommelwirbel* die Generierung von Zufallszahlen? ;) Im ersten Post hattest du es ja noch.

Was die Bücher angeht: es existieren bereits mehrere Threads darüber. Kann nur soviel sagen, dass ich dir "Java Intensivkurs" von Block nicht empfehle.

Stimmt :D Da hast du allerdings recht^^
Ich hab die Deklaration einfach verschwinden lassen :D Mein Fehler^^
Hmm..Ich mach mich morgen dann schlau und danke für dich Hilfe :)
Gut, das Programm funktioniert jetzt schon, aber spuckt halt alle Ziffern doppelt aus :) Und leider nicht geordnet^^ Aber ich mach mich vllt über den Ordnungsalgorithmus schlau, habe das Wochenende mal zeit^^
 

XHelp

Top Contributor
Das sind Zufallszahlen, die sollen von der Definition her nicht geordnet rauskommen.
Die doppelte Ausgabe erfolgt deshalb, weil du nichts sinnvolle in den Abfragen machst:
Java:
for... {
  zz = Math.random();
  System.out.println("Neue Zahl: "+zz);
  if (zz>max) {
    System.out.println("Neues Maximum gefunden! Vorher war es: "+max);
    max = zz;
  }
  if (zz<min) {
    System.out.println("Neues Minimum gefunden! Vorher war es: "+min);
    min = zz;
  }
}
So sollte es eher sein. Die Ausgaben IN den Abfragen sind nur dazu da, damit du nachvollziehen kannst, was da passiert
 

Andi_CH

Top Contributor
random.java:25:7: variable zz might not have been initialized
if (zz>max)
^
1 error

Was deutet der Editor damit an?
Und sry für die ganzen Fragen, aber ich hab wirklich nicht viel Ahnung von dem Zeug. :(

Aber lesen kannst du? Ein wenig Englisch auch? Ach dann übersetz ich es mal für dich;:

Die Variable zz wurde nicht initialisiert.

Was das heissen soll?

Der Variable zz wurde kein Wert zugewiesen -> lies mal:
Java:
package com.javaforum.test;

public class random {
	// Anfang Methoden
	public static void main(String[] args) {
		double min, max, zz;
		int i;
		i=1;  // das nützt rein gar nichts, da i gleich am Anfang der Schleife gesetzt wird 
		min=1.0;
		max=0.0;
		// tja da sollte vielleicht zz auch ein Wert zugewiesen werden!
		// Aus diesem Grund hasse ich es mehr als eine Variable auf einer Zeile zu 
		// deklarieren - man übersieht so schnell eine 
		for (i = 1;i<=100;i++) {
			if (zz>max)
			{
				System.out.print(zz);  //mach was
			}
			if (zz<min)
			{
				System.out.print(zz);  //mach was anderes
			}
		}
		// Ende Methoden
	}
}


und jetzt schaust du mal das an - so würde ich das schreiben
Klassennamen Gross
Variabeln einzeln deklariert und gleich initialisiert
Schleifenindex in der Schleife drin deklariert

Java:
public class Random {

	public static void main(String[] args) {
		double min = 1.0;
		double max = 0.0;
		double zz = 0.0;
		for (int i=1; i<=100; i++) {
			if (zz > max)	{
				System.out.print(zz);  //mach was
			}
			if (zz < min)	{
				System.out.print(zz);  //mach was anderes
			}
		}
	}
}
 
Zuletzt bearbeitet:

alexx910

Mitglied
Aber lesen kannst du? Ein wenig Englisch auch? Ach dann übersetz ich es mal für dich;:

Die Variable zz wurde nicht initialisiert.

Was das heissen soll?

Der Variable zz wurde kein Wert zugewiesen -> lies mal:
Java:
package com.javaforum.test;

public class random {
	// Anfang Methoden
	public static void main(String[] args) {
		double min, max, zz;
		int i;
		i=1;  // das nützt rein gar nichts, da i gleich am Anfang der Schleife gesetzt wird 
		min=1.0;
		max=0.0;
		// tja da sollte vielleicht zz auch ein Wert zugewiesen werden!
		// Aus diesem Grund hasse ich es mehr als eine Variable auf einer Zeile zu 
		// deklarieren - man übersieht so schnell eine 
		for (i = 1;i<=100;i++) {
			if (zz>max)
			{
				System.out.print(zz);  //mach was
			}
			if (zz<min)
			{
				System.out.print(zz);  //mach was anderes
			}
		}
		// Ende Methoden
	}
}


und jetzt schaust du mal das an - so würde ich das schreiben
Klassennamen Gross
Variabeln einzeln deklariert und gleich initialisiert
Schleifenindex in der Schleife drin deklariert

Java:
public class Random {

	public static void main(String[] args) {
		double min = 1.0;
		double max = 0.0;
		double zz = 0.0;
		for (int i=1; i<=100; i++) {
			if (zz > max)	{
				System.out.print(zz);  //mach was
			}
			if (zz < min)	{
				System.out.print(zz);  //mach was anderes
			}
		}
	}
}
Danke für die Erklärung. Aber naja, wir haben das so in der Schule halbwegs angeschnitten und ja, da weiß ich auch nimmer. Und zur Aufgabe, ja ich habe die Deklaration von zz vergessen^^ Gestern noch gefixxt und es lief doch, aber halt so, wie ich es beschrieben habe. Ich hoffe, dass ist wenigstens der sinn der aufgabe, denn eine Lösung bekommen wir erst später :/
Großes Dankeschön deswegen :) Sowohl an die Andi, als auch an dich XHelp :)
 

alexx910

Mitglied
Hey, liebe coder-freunde, habe die Lösung von meinem Lehrer bekommen. Nun könnt auch ihr sehen, wie er es haben wollte :)
Java:
/** 2. Aufgabenblatt Kontrollstrukturen
  *  Aufgabe 6 : Zufallszahlen
  *
  *  Es sollen 100 Zufallszahlen erzeugt werden, und dabei die Kleinste
  *  und Groesste bestimmt werden.
  *
  *  Diese sollen in die Variablen min und max gespeichert werden.
  */

public class Zufallszahlen {

  public static void main(String[] args) {

  //Variablendeklaration:
  //In zufallszahl wird die aktuelle Zufallszahl gespeichert,
  //in min, max das aktuelle Minimum und Maximum.
  double zufallszahl, min, max;
  int i;
  
  //Variableninitialisierung: Startwertevorgabe fuer min und max:
  // Da Math.random() Zufallszahlen zwischen 0 und 1 erzeugt, ist es
  // sinnvoll als Startwert fuer das Minimum 1.0 zu waehlen, damit sich der
  // immer weiter verkleinern kann. Fuer das Maximum wird dem entsprechend 0.0 gewahlt.
  min = 1.0;
  max = 0.0;
  i=1; //Startwert fuer die Schleifenvariable

  while(i<=100)
    {

    //Es wird eine neue Zufallszahlbestimmt und in zufallszahl gespeichert.
    zufallszahl = Math.random();

    //Abfragen, ob die zufallszahl kleiner ist als das aktuelle Minimum.
    //Falls ja, setzte den Wert der zufallszahl als neues Minimum.
    if (zufallszahl < min)
      {
      min = zufallszahl;
      }
      
    //Abfragen, ob die zufallszahl groesser ist als das aktuelle Maximum.
    //Falls ja, setzte den Wert der zufallszahl als neues Maximum.
    if (zufallszahl > max)
      {
      max = zufallszahl;
      }
      
    //Zusaetzliche Ausgabe der Werte fuer min und max nach jeweils 10 Iterationen
    if ((i%10)==0)
      {
        System.out.println("Nach " + i + " Durchlaeufen gilt:");
        System.out.println("Ermitteltes Minimum:" + min + "\n" + "Ermitteltes Maximum:" + max + "\n" );
      }

      //WICHTIG: Erhoehung der Schleifenvariable i um +1
      //Wird dieser Schritt vergessen, wird eine Endloschleife erzeugt!!!!
      i++;
    }

    // Gebe ermitteltes Min und Max aus:
    System.out.println("Endergebnis:");
    System.out.println("Ermitteltes Minimum:" + min + "\n" + "Ermitteltes Maximum:" + max + "\n" );
  }
}
(c) by Bloem
 

kodela

Bekanntes Mitglied
Eine Kleinigkeit wurde bisher noch nicht angesprochen. Die beiden Variablen min und max, bevor man sie mit den jeweils erzeugten Zufallszahlen vergleicht, müssen erst einmal initialisiert werden. Das macht man am besten, indem man beiden die erste erzeugte Zufallszahl zuweist.

Danach kann man, wie von XHelp bereits aufgezeigt, jede der 99 nächsten Zufallszahlen mit min und max vergleichen und falls die Zufallszahl kleiner als min ist min aktualisieren und gleichermaßen mit max verfahren.

Davon, dass alle Zufallszahlen in irgend einer Form auszugeben sind, ist in der Aufgabe nicht die Rede.

kodela
 

XHelp

Top Contributor
Eine Kleinigkeit wurde bisher noch nicht angesprochen. Die beiden Variablen min und max, bevor man sie mit den jeweils erzeugten Zufallszahlen vergleicht, müssen erst einmal initialisiert werden.

Die wurden doch initialisiert. Darüber hinaus ist es einfacher min mit dem jeweils möglichen Maximum und max mit dem jeweils möglichen Minimum zu initialisieren, wie es auch die diesem Code der Fall ist
 

Neue Themen


Oben