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.?

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 ...


Belus911 
Beitragsersteller
 08.07.2018, 02:14

schau ich mir gleich an - Danke! :-)

0

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);
  }
}

Belus911 
Beitragsersteller
 08.07.2018, 02:31

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." ?

0
VeryBestAnswers  08.07.2018, 02:36
@Belus911

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.

1
Belus911 
Beitragsersteller
 08.07.2018, 02:40
@Belus911

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?

0
Belus911 
Beitragsersteller
 08.07.2018, 02:47
@VeryBestAnswers

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?

0
Belus911 
Beitragsersteller
 08.07.2018, 02:56
@Belus911

meine Idee ist:

1) den Methodenkopf zu ändern: int[][] werte (int[][]hallo){

2) einen return zu dem ursprünglichen Array zu setzen: return umsatzLaeden;

3) g.drawString(""+umsatzLaeden[][],10+xPos*20,10+yPos);

0
Belus911 
Beitragsersteller
 08.07.2018, 02:59
@Belus911

allerdings wird das dritte nicht anerkannt :-/

0
VeryBestAnswers  08.07.2018, 03:08
@Belus911
  1. 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.
  2. ???
  3. 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.

1
Belus911 
Beitragsersteller
 08.07.2018, 03:15
@VeryBestAnswers

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 :))

0
Belus911 
Beitragsersteller
 08.07.2018, 03:29
@VeryBestAnswers

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? :-/

0
VeryBestAnswers  08.07.2018, 03:44
@Belus911

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)

1
Belus911 
Beitragsersteller
 08.07.2018, 03:59
@VeryBestAnswers

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);

}

0