Zufallserzeugung mit math.random und speichern in array

theoneand

Aktives Mitglied
hiho,
habe folgendes Problem:
wir sollen eine klasse kreis und eine klasse zylinder, welche von kreis erbt erstellen. und darin eine methode um flächeninhalt/ oberfläche zu berechnen.
Hat auch soweit funktioniert.
dann sollen in einer testklasse 100 objekte erzeugt werden.
mithilfe von math.random soll eine zufallszahl kreiert werden, welche dann bestimmt ob das objekt ein kreis werden soll oder ein zylinder.
bei <= 0.5 soll es ein kreis werden sonst ein zylinder.
Das ganze soll in arrays gespeichert werden und der flächeninhalt soll ausgegeben werden.

vlt könnt ihr mir meinen denkfehler zeigen, da es aus meiner sicht eigentlich fertig sein müsste^^.
danke schon mal.

hier mein coding:

Java:
public class Kreis 
{
	static double flaeche;
	double radius =2;
	
	public double computeFlaeche()
	{
		flaeche = radius * radius * Math.PI;
		System.out.println(flaeche);
		return flaeche;
		
	}
}

Java:
public class Zylinder extends Kreis
{
	double h = 2;
	
	public double computeFlaeche()
	{
		flaeche = radius * radius * Math.PI * 2 + 2 * radius * Math.PI * h;
		return flaeche;
	}
	
}

Java:
public class TestZylinder
{
	public static void main (String [] args)
	{
		
		int k = 1;
		int z = 1;
		
		for (int i = 0; i <= 100; i++)
		{
			double zufall = Math.random();
			if (zufall <= 0.5)
			{
				
				Kreis kr[] = new Kreis[k];
				kr[k].computeFlaeche();
				k++;					
			}
			
			else 
			{
				Zylinder zy [] = new Zylinder [z];
				zy[z].computeFlaeche();
				z++;
			}
		}
	}
}
 
S

SlaterB

Gast
besteht denn irgendeine konkretes Problem oder läßt du allein auf Verdacht beliebigen deinen Code kontrollieren? ;)

innerhalb der Schleife innerhalb des ifs ein Array zu erstellen, darin etwas zu speichern
und das Array dann quasi direkt verschwinden zu lassen, da nicht gemerkt,
kann man natürlich ohne Strafe als Unsinn bezeichnen

eine Ausgabe hast du auch nur in einer der beiden Klassen oder?
normalerweise sollte sowas nicht in der Berechnungs-Methode stehen, das kann doch der Aufrufer machen,
sonst ist der Rückgabewert ja auch ohne Verwendung, falls nicht z.B. irgendwo summiert oder in ein Array gespeichert..
 
Zuletzt bearbeitet von einem Moderator:

HimBromBeere

Top Contributor
Gibt´s irgendeine Frage hierzu? Könnt ihr mir meinen Denkfehler zeigen klingt wenig konkret. Was genau geht denn nicht und wer lässt sich eigtl. so ´nen Quatsch einfallen, ein Zylinder könnte ein Kreis sein?! Aber zumindest dafür kannst du wahscheinlich nichts...

EDIT: Die Fläche als
Code:
static
zu deklarieren finde ich zudem auch äußerst ungünstig, denn damit drückst du aus, dass es nur eine einzige Fläche gibt bzw. dass alle Kreis, Zylinder, ... die gleiche Fläche besitzen. Lass das
Code:
static
weg, das wird sonst bald Käse...
 
Zuletzt bearbeitet:

theoneand

Aktives Mitglied
ja ich hab mir das garantiert nich ausgedachte....
ist ne hausübung von der FH.

mein problem ist,dass beim starten immer ein fehler kommt und zwar entweder bei der zeile wo ich nen kreis erzeuge oder da, wo ich nen zylinder erzeuge, je nachdem was die zufallszahl geworden ist.

die ausgabe ist in der methode computeflaeche
 

HimBromBeere

Top Contributor
Java:
Kreis kr[] = new Kreis[k];
Das müsste viel eher so heißen:
Java:
kr[i] = new Kreis();
EDIT: Äquivalent für Zylinder. Die Deklaration von dem Array machst du vor die Schleife und nicht bei jedem Durchlauf neu.
 
Zuletzt bearbeitet:

theoneand

Aktives Mitglied
ja, dass mit dem static hast recht, aber das is nich mein eigentliches problem.

beim starten bekomme ich folgende meldung:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at TestZylinder.main(TestZylinder.java:17)
 
S

SlaterB

Gast
erstelle ein Array wenigstens der Länge 100, oder?
was soll k dort bedeuten?

immer gleich auch an sinnvollen Code versuchen zu arbeiten, nicht nur beliebiges ausprobieren
 

HimBromBeere

Top Contributor
Java:
Kreis[] kreis = new Kreis[100];
for (int i = 0; i <= 100; i++)
        {
            double zufall = Math.random();
            if (zufall <= 0.5)
            {
                
                kr[i] = new Kreis();
                kr[i].computeFlaeche();
                k++;                    
            }
        //...
        }
So sollte es eigtl. gehen...

was soll k dort bedeuten?
Wahrscheinlich Anzahl Kreise, denn es gibt auch ein z...
 

theoneand

Aktives Mitglied
ich brauch doch 2 arrays,
eins um die kreise zu speichern und eins um die zylinder zu speichern...
und die array-größe kann ich ja wohl schlecht festlegen, da ich nich weiß wie viele zylinder/ kreise erzeugt werden.
insgesamt werden 100 objekte erzeug, wie viele was werden richtet sich danach was math.random ergibt....
so viel in der theorie

ich probier nich wahllos rum... für mich ergab das eigentlich sinn
 

HimBromBeere

Top Contributor
ich brauch doch 2 arrays,
Dann erstell zunächst zwei Hilfsfelder der Größe 100. Nach Beendigung der Schleife kannst du beide Felder in die finalen Felder kopieren. Um deren Größe zu erhalten, hast du ja k und z zur Verfügung.

EDIT: Wenn in der Aufgane nicht explizit steht, dass Felder verwendet werden sollen, nimm lieber eine
Code:
ArrayList
, denn die lässt sich in der Größe dynamisch anpassen.
 
S

SlaterB

Gast
ein Array hat eine feste Größe,
gerade weil du vorher nicht weißt wie viele von welcher Sorte kommen musst du den Maximalwert nehmen,

du kannst natürlich auch auf Risiko spielen und beide Arrays in der Größe 60 anlegen,
man kann ausrechnen wie hoch die Wahrscheinlichkeit ist, bei 100 Münzwürfen mindestens 60x Zahl oder 60x Kopf zu haben,
also um 10 genau von 50/50 abzuweichen,
je nachdem wieviel Luft zu läßt hast du einen hohen oder mikroskopischen Prozentsatz Wahrscheinlichkeit, dass ein Array für die Zufallsschleife nicht ausreicht,
oder lasse genug Platz, 100 ;)
 

theoneand

Aktives Mitglied
habs mit 100 probiert, das problem ist glaub ich gar nicht das array sonder die compute methode, da ich hier immer den fehler bekomme
 

HimBromBeere

Top Contributor
Wo sagst du dem Kreis eigtl. wie groß er sein soll? Denn für den Flächeninhalt greifst du ja zumindest auf den Radius zu, den du schon irgendwo setzen müsstest (sinnvollerweise im Konstruktor).
Bekommst du immer noch ´ne IndexOutOfBoundsException? Kann ich mir grade nicht vorstellen...
 
S

SlaterB

Gast
> das problem ist glaub ich gar nicht das array sonder die compute methode, da ich hier immer den fehler bekomme

'den fehler' erwähnst du gerade zum ersten Mal, oder?
gehts auch noch genauer, was für ein Fehler besteht?

wenn der Code noch in etwa wie
Java:
Zylinder zy[] = new Zylinder[z];
zy[z].computeFlaeche();
aussieht ist das natürlich nicht gut, zy[z] ist leer, nie wird ein Zylinder-Objekt mit new erzeugt,
hat HimBromBeere um 16:29 auch schon angesprochen
 

theoneand

Aktives Mitglied
ja, das hab ich auch schon geändert, und den fehler hab ich schon 2 mal hier geposted.
und radius + h sind einmal in klasse kreis und einmal in klasse zylinder definiert.

hier mein geändertes coding MIT fehlermeldung:

Java:
public class TestZylinder
{
	public static void main (String [] args)
	{
		
		int k = 1;
		int z = 1;
		
		
		
		Kreis kr[] = new Kreis[100];
		Zylinder zy [] = new Zylinder [100];
		
		for (int i = 0; i <= 100; i++)
		{
			double zufall = Math.random();
			if (zufall <= 0.5)
			{			
				kr[k] = new Kreis();				
				k++;					
			}
			
			else 
			{
				zy[z] = new Zylinder();				
				z++;
			}
		}
		
		for (int i=0; i<=kr.length; i++)
		{
			kr[k].computeFlaeche();
		}
		
		for (int i=0; i<=zy.length; i++)
		{
			zy[z].computeFlaeche();
		}
		

	}
}


und die fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
at TestZylinder.main(TestZylinder.java:33)
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Deine Felder haben insgesamt 100 Elemente, beginnen aber bei Index 0. In deiner for-Schleife gehst du aber von 0 bis einschließlich 100, da müsste stehen
Java:
for (int i = 0; i < 100; i++)
oder noch besser wie du´s in den beiden unteren Schleifen gemacht hast:
Java:
for (int i = 0; i < kr.length; i++)
Damit bist du flexibler und musst etwaige Größenänderungen nur ganz oben bei der Deklaration der Felder vornehmen und nicht im gesamten Code.
 

HimBromBeere

Top Contributor
habs noch mal editiert, so is das programm, in der erzeugung muss anstatt i einmal k und einmal z rein, sonst geht das ja nich oder
Geht schon, aber so hast du natürlich haufenweise null-Elemente im Feld, was ja nicht Sinn der Sache ist. Die Ansprache der Elemente mit k und z als Index solltest du also machen, stimmt.
 
S

SlaterB

Gast
> und den fehler hab ich schon 2 mal hier geposted.

'NullPointerException' taucht im ganzen Thread bisher nicht auf,
ganz abgesehen davon dass du nun ein völlig anderes als bisher besprochene Probleme hast

du füllst beide Arrays nur teilweise,
in kr ist vielleicht an Index 0, 5, 6, 8 ein Objekt, im anderen Array an Index 1, 2, 3, 4, 7, 9 usw.

in der zweiten und dritten Schleife greifst du aber ungeprüft auf jeden Index zu, schaue nach ob dort vielleicht null steht

------

die 100 könnte zu einer Exception führen, aber nur wenn alle Zufallswerte 0 oder 1 sind,
also eine extrem niedrige der von mir angesprochenen Wahrscheinlichkeit ;) 1/ 2^99 oder so
 

theoneand

Aktives Mitglied
habs jetzt so:

Java:
public class TestZylinder
{
	public static void main (String [] args)
	{
		
		int k = 1;
		int z = 1;
		
		
		
		Kreis kr[] = new Kreis[100];
		Zylinder zy [] = new Zylinder [100];
		
		for (int i = 0; i < kr.length; i++)
		{
			double zufall = Math.random();
			if (zufall <= 0.5)
			{			
				kr[k] = new Kreis();				
				k++;					
			}
			
			else 
			{
				zy[z] = new Zylinder();				
				z++;
			}
		}
		
		for (int i=0; i<=kr.length; i++)
		{
			kr[k].computeFlaeche();
		}
		
		for (int i=0; i<=zy.length; i++)
		{
			zy[z].computeFlaeche();
		}
		

	}
}

aber immernoch der gleiche fehler:
Exception in thread "main" java.lang.NullPointerException
at TestZylinder.main(TestZylinder.java:33)


irgendwas mit dem compute methode passt ihm nicht oder??
 

theoneand

Aktives Mitglied
> und den fehler hab ich schon 2 mal hier geposted.

'NullPointerException' taucht im ganzen Thread bisher nicht auf,
ganz abgesehen davon dass du nun ein völlig anderes als bisher besprochene Probleme hast

du füllst beide Arrays nur teilweise,
in kr ist vielleicht an Index 0, 5, 6, 8 ein Objekt, im anderen Array an Index 1, 2, 3, 4, 7, 9 usw.

in der zweiten und dritten Schleife greifst du aber ungeprüft auf jeden Index zu, schaue nach ob dort vielleicht null steht

------

die 100 könnte zu einer Exception führen, aber nur wenn alle Zufallswerte 0 oder 1 sind,
also eine extrem niedrige der von mir angesprochenen Wahrscheinlichkeit ;) 1/ 2^99 oder so

so wie es jetzt ist doch nicht mehr oder?? jetzt wird die füllung des einen arrays durch k und des anderen durch z bestimmt, also forlaufende nummerierung, oder nicht=?=?
 
S

SlaterB

Gast
siehe mein Posting bzw. jetzt vielleicht am Anfang befüllt, aber nicht bis oben hin, laufe nur bis k bzw. z statt bis zum Array-Ende,

die Methode ist unschuldig, keine Methode geht wenn eine Variable null ist

> oder nicht=?=?

ganz in Ruhe nachdenken, auch mal 5 Min. Pause zwischen Postings und einfach nachschauen was der Fall ist,
aber habe ich nun ja auch schon wieder verraten

außerdem fängst du mit Array-Index 1 an statt 0, am Anfang also immer leer,
ich sehe schon das nächste Mecker-Posting ;)
 

HimBromBeere

Top Contributor
irgendwas mit dem compute methode passt ihm nicht oder??
Das ist was völlig Neues. Der Fehler passiert, weil du den Radius immer noch nicht vorgegeben hast. Wie soll eine Fläche bestimmt werden, obwohl der Radius unbekannt ist?

EDIT: Übrigens greifst du in Zeile 32 auf k zu, welches aber nicht mehr verändert wird und irgendwo zwischen 1 und 100 steht. Da muss wahrscheinlich eher i stehen... Achja, und du gehst wieder von
Code:
0
bis einschließlich
Code:
kr.length
, du brauchst wieder ein Kleinerzeichen und nicht
Code:
<=
...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
@HimBromBeere
Muliplikation von double macht keine NPE, das rechnet dann einfach 0 aus
 

theoneand

Aktives Mitglied
ich versteh nich was du meinst...

ich hab doch oben 2 variablen, 1 mal k und 1 mal z

und jedes mal wenn ich ein kreis-objekt erzeuge wird k um 1 erhöht.
und jedes mal wenn ich ein zylinder-objekt erzeuge wird z um 1 erhöht.

wie kann es da dann keine fortlaufende befüllung meiner arrays geben???
ich befülle die arrays ja nich mit der variablen der for schleife i, sonder jedes array mit seiner eigenen variablen.

oder was verraff ich da gerade...

ich hock seit ner ewigkeit an der kack aufgabe, sry
 
S

SlaterB

Gast
wer sagt denn dass es keine fortlaufende Befüllung gibt?
nochmal bitte ganz ruhig durchatmen und überlegen was wann wo gesagt wird,

in meinem Posting von 17:00 steht das vielleicht, aber du hast auch erst 16:54 ein Posting von dir editiert,
schon um 17:02 habe ich doch zugestimmt, dass es durchgehend ist, keine Sorge mehr zu diesem Punkt

weiterhin gilt:
- der erste Index (0) ist bisher ausgelassen wenn z.B. k mit 1 anfängt,
wenn du die Schleife mit i=0 beginnst kommst du also am Anfang bei null vorbei

- wenn die Schleife bis 100 hochläuft, aber nur die ersten ~50 Elemente befüllt sind, trifft man spätestens oben auch auf null,
wie das zu behandeln ist habei ich schon gesagt, nur bis zum max-Wert laufen statt bis zur gesamten Array-Größe

edit: na also
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P 2n Potenzieren ohne Math.pow oder pow Java Basics - Anfänger-Themen 8
J Math.Random Java Basics - Anfänger-Themen 9
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
alialhajhossein math.random Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
V Erste Schritte Berechnen von Sinus; sin(x) ohne Math.* Java Basics - Anfänger-Themen 1
D Wahrscheinlichkeiten mit Math.random() Methode Java Basics - Anfänger-Themen 1
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
B Potenzrechnung mit WindowBuilder ohne math.pow() Java Basics - Anfänger-Themen 1
I math.random Grenzwerte Java Basics - Anfänger-Themen 2
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
B Potenzen ohne Math.pow Java Basics - Anfänger-Themen 4
N Datentypen Math.floor rundet nicht ab Java Basics - Anfänger-Themen 4
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
S Math.ceil für float Java Basics - Anfänger-Themen 1
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
Thorwine Erste Schritte Wuerfelspiel mit Math.random() Java Basics - Anfänger-Themen 10
S Math.random() Zufall ? Java Basics - Anfänger-Themen 2
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
M Warum ist dieses Feld der Klasse Math immutable? Java Basics - Anfänger-Themen 7
X Problem mit Math.random() Java Basics - Anfänger-Themen 2
S math Methoden in Java (quadrat) Java Basics - Anfänger-Themen 7
T Random vs. Math.random() Java Basics - Anfänger-Themen 2
C Erste Schritte Math.sin und Co. funktionieren nicht Java Basics - Anfänger-Themen 5
A Potenzen ohne math.pow Java Basics - Anfänger-Themen 1
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
L Klassen Point- und Math-Klasse Java Basics - Anfänger-Themen 3
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
J java.lang.math asin() Java Basics - Anfänger-Themen 18
L Math.floor und double Array Java Basics - Anfänger-Themen 13
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
B Math.acos() Java Basics - Anfänger-Themen 4
N Methoden Probleme mit Math.cos Java Basics - Anfänger-Themen 3
J Bedeutung von math.random() math.round() Java Basics - Anfänger-Themen 7
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
Luk10 3. Wurzel mit Math.pow(x, (1/3)) Java Basics - Anfänger-Themen 2
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
J Datentypen Math.sqrt() immer NaN Java Basics - Anfänger-Themen 8
T Ungenaue Werte bei Math.atan Java Basics - Anfänger-Themen 10
C math.random() Java Basics - Anfänger-Themen 9
M Math.round Java Basics - Anfänger-Themen 32
M Math Class Java Basics - Anfänger-Themen 2
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
B Math.random und Strings Java Basics - Anfänger-Themen 13
B Math.abs Java Basics - Anfänger-Themen 4
Haave Postfix-Rechner: mehrere math. Operationen nacheinander ausführen Java Basics - Anfänger-Themen 8
Luk10 math.random() Java Basics - Anfänger-Themen 2
T Math.signum Java Basics - Anfänger-Themen 2
N Math + Variablen + Ausgabe Java Basics - Anfänger-Themen 2
B math. Operationen + Ausgabe Fehler :S Java Basics - Anfänger-Themen 5
J Math.random() - kurze frage. Java Basics - Anfänger-Themen 20
C math.pow funktionert nicht richtig oder garnicht Java Basics - Anfänger-Themen 4
G Quelltext von Methoden in der Klasse Math Java Basics - Anfänger-Themen 11
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
G Klasse Math Java Basics - Anfänger-Themen 2
T Math.tan() Problem Java Basics - Anfänger-Themen 2
M Math.sin in Radiant in Java? Java Basics - Anfänger-Themen 5
C Math-Funktion Java Basics - Anfänger-Themen 10
S Math.tan Problem rechnet falsches Ergebniss aus. Java Basics - Anfänger-Themen 3
F Math.abs() Java Basics - Anfänger-Themen 3
J Math.random Java Basics - Anfänger-Themen 12
M Probleme mit Math.round() Java Basics - Anfänger-Themen 5
P Math.abs, praktische Anwendung? Java Basics - Anfänger-Themen 4
T Math.random() Zahlen von 25 - 50. Wie? Java Basics - Anfänger-Themen 7
H Brauche ganz dringend HILFEEE! Math random Java Basics - Anfänger-Themen 19
T Math.Random negativer Intervall Java Basics - Anfänger-Themen 2
M Eclipse: Fehler bei: import java.lang.math Java Basics - Anfänger-Themen 7
B Zahlenwiederholung bei Math.random verhindern Java Basics - Anfänger-Themen 4
D math und abs() Java Basics - Anfänger-Themen 14
J Zufallszahl ohne Math.random Java Basics - Anfänger-Themen 4
E Problem mit Methode Math.max Java Basics - Anfänger-Themen 2
A Probleme mit Math.random Java Basics - Anfänger-Themen 4
G Math.cos Java Basics - Anfänger-Themen 4
S Math-Befehl für Quadrieren! Java Basics - Anfänger-Themen 6
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
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 n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Random(x,y,z) Java Basics - Anfänger-Themen 4
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
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
C Arraywerte random vertauschen Java Basics - Anfänger-Themen 2
SchmidiMC Methoden Random in Methode neu generieren lassen Java Basics - Anfänger-Themen 1
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

Ähnliche Java Themen

Neue Themen


Oben