ich soll über mittels einem 2D Array und verschiedene Methoden ein Unternehmen simulieren, welches vier Läden hat und das an 7 Tagen geöffnet hat.?
die Zahlen der täglichen Umsätze sollen per g.drawString sichtlich gemacht werden und die Umsätze sollen per Zufall ausgewiesen werden.
Desweiteren sollen die Summe der einzelnen Tage und Laden erkennbar sein
Anbei ist mein Code, allerdings wird nur 0 und 0 ausgegeben? Wieso? ich weiße doch in der methode "werte" per zufallsmethode dem Array verschiedene Werte hinzu?
4 Antworten
Du hast zwar eine "Random" Anzahl Zeilen und Spalten, die du über die For-Schleifen hinzufügst (wo es z.B. auch sein kann, dass äußere Schleife gar nicht ausgeführt wird, weshalb die ganze Methode dann 0 zurückgeben würde, auch wenn der folgende Fehler nicht wäre), hast aber folgenden gravierenden Fehler:
Du hast in beiden Methoden essentiell folgenden Code:
summe = summe + 0
Du übergibst der Methode ein neues 2D-Integer-Array. Dieses wird bei Initialisierung mit 0 in jeder Zelle aufgefüllt. Du änderst dieses "leere" Array nicht, bevor du es übergibst ...
Ist wahrscheinlich ein SAP-Entwickler die programmieren immer so ...;-)
Die beiden for-Schleifen knallt's raus, weil das Array jeweils nicht auf konkrete Größe vordeklariert war. D. h. die Schleifendurchläufe finden nicht statt. Denn die Größe der Arrays würde sich ja erst erweitern, wenn erstmal Werte reingeschrieben würden.
Die Methode werte() macht vieles, aber nicht das, was du beschreibst.
Du willst ein Array mit Zufallswerten füllen. Das heißt, du musst irgendwo eine Anweisung der Form
hallo[zeile][spalte] = ...
stehen haben. Der Teil fehlt bei dir aber. Du schreibst nichts ins 2D-Array, sondern liest nur Werte aus.
Dafür fängst du an einem zufälligen Index an, über die Arrays zu iterieren. Willst du nicht alle Werte des 2D-Arrays füllen? Dafür musst du bei 0 anfangen zu iterieren.
Warum du in der Methode werte() Sachen zusammenzählst, verstehe ich auch nicht. Ich dachte, werte() soll das Array mit Zufallswerten füllen, und nicht Werte addieren.
Tipp:
for (int zeile = 0; zeile < hallo.length; zeile++) {
for (int spalte = 0; spalte < hallo[zeile].length; spalte++) {
hallo[zeile][spalte] = (int) (Math.random() * 100);
}
}
In werte() veränderst du die Variable einnahme. Es sieht so aus, als wolltest du die Summe aller Werte berechnen, aber das machst du doch bereits in summe().
Beschränke dich pro Methode auf eine Aufgabe. So hältst du das Programm am ehesten strukturiert, übersichtlich, frei von Wiederholungen und frei von seltsamen Bugs.
Das Prinzip nennt sich "Divide and Conquer": Teile und herrsche. Indem du ein Problem auf sinnvolle Weise in mehrere Teilprobleme (bzw. Methoden) unterteilst, behältst du den Überblick.
du meinst diese Zeile -> einnahme = einnahme + hallo[zeile][spalte];
war ebenfalls ein Fehler, muss raus!
Vielen Dank für die Hilfe, bin noch relativ neu in der Materie und versuche es mir selbst anzueignen.
eine kurze Frage noch: wie kann ich die einzelnen Zufallswerte über die Methode "anzeige" ausgeben?
du meinst diese Zeile -> einnahme = einnahme + hallo[zeile][spalte];
war ebenfalls ein Fehler, muss raus!
Vielen Dank für die Hilfe, bin noch relativ neu in der Materie und versuche es mir selbst anzueignen.
eine kurze Frage noch: wie kann ich die einzelnen Zufallswerte über die Methode "anzeige" ausgeben?
- Du musst das Array nicht zurückgeben. Auch wenn du als Rückgabewert void angibst, werden Änderungen am Array gespeichert. Arrays werden schließlich per Referenz übergeben.
- ???
- Natürlich funktioniert das nicht, du kannst doch nicht einfach einen String mit einem Array konkatenieren. Wie stellst du dir das vor?
eine kurze Frage noch: wie kann ich die einzelnen Zufallswerte über die Methode "anzeige" ausgeben?
Die Zufallswerte sind in einem 2D-Array gespeichert. Das heißt, du iterierst über das Array, und gibst jeden Wert einzeln mit g.drawString() aus.
Allright, dann nehme ich zukunft void bei Arrays! :-)
zu 2) ich hatte im Methodenkopf vorher int, daher hätte ich ja einen return setzen müssen
zu 3) ich habe doch nur einzelene Interger dem array zugewiesen, aber keine Zeichenketten? :-/ oder liege ich falsch?
Danke :))
wenn ich die Werte einzeln mit
g.drawString(""+umsatzLaeden[2][0],20,20);
g.drawString(""+umsatzLaeden[3][0],20,30);
..
ausgebe, wird immer 0 dargestellt? :-/
Mit "einzeln" meinte ich, innerhalb einer doppelten for-Schleife.
Wenn nur 0 dargestellt wird, heißt das vermutlich, dass das 2D-Array an diesen Stellen eine 0 enthält (oder noch völlig leer ist)
uf! Hab es geschafft! Die schleife läuft und es werden mir 4 Zeilen a 7 Tage eingezeigt! Allerdings ist jede Zahl null? :-/
Also muss es an der Methode liegen?
void werte (int[][]hallo){
for(int zeile = 0; zeile < hallo.length; zeile++)
for(int spalte = 0; spalte<hallo[zeile].length; spalte++)
hallo[zeile][spalte] = (int) (Math.random()*100);
}
stimmt! Danke jetzt weiß ich wo ich mein Fehler gemacht habe! Ich werde es überarbeiten!
Was meinst du mit " Warum du in der Methode werte() Sachen zusammenzählst, verstehe ich auch nicht. Ich dachte, werte() soll das Array mit Zufallswerten füllen, und nicht Werte addieren." ?