wie berechne ich das Produkt eines Arrays?

4 Antworten

Hmm, aus der Frage wird dein Problem irgendwie nicht ganz ersichtlich. Das einzige was ich dir so sicher sagen kann, produkt "darf" auf jeden Fall nicht auf Null gesetzt werden. Eine Zahl mal 0 ergibt immer 0, also wäre das wenig sinnvoll. Das neutrale Element bei der Multiplikation/Division ist 1, entsprechend Produkt auf 1 setzen. Und dann wäre noch ganz interessant zu sehen, wie dein Code für die Berechnung des Produkts aussieht, der Rest passt schließlich. Außerdem die Bitte, dass du mal deinen Programmierstil überdenkst. Sowas liest sich nicht sehr angenehm und zum Korrigieren ist es noch aufwendiger.


PolinGirl 
Fragesteller
 23.11.2015, 21:15

For (int i=1 ; i <array.lenght; i++) 

Produkt*=array [i]; 

0
DanielPl  26.11.2015, 12:54
@PolinGirl

Wieso i = 1? In dem restlichen Code hast du es ja gleich 0 gesetzt und das ist auch gut so, da du das erste Element eines Arrays mit array[0] ansprichst, mit array[1] sprichst du schon das zweite an. Aber weshalb du da eine Out of Bounds Exception bekommst, kann ich mir nicht erklären. Oder ist das hier gar nicht mehr der Fall?

0
DanielPl  26.11.2015, 12:59
@DanielPl

Wenn ich es so programmiere, also

produkt = 1;

for(i=0; i<array.length; i++) {

produkt*=a[i];

}

System.out.println(produkt);

Dann passt alles und er meckert nicht.

0

eine fehlermeldung ohne fehler? - das muss man erst mal hinkriegen.

wenn du uns doch nochmal deinen neuen code - mit der produktberechnung - und zur verfügung stellen könntest?

Ohne mir jetzt den ganzen Code anzuschauen, kann ich gleich sagen, dass du einen Array, den du noch nicht gesetzt hast aufrufen willst, dass heißt dass du z.B. Array[0] = wert; Array[1] = wert; hast aber Array[2] aufrufen willst, dass der da den Wert aber nicht kennt. 

Such den Code nach diesen einfachem Fehler ab und tada :D


PolinGirl 
Fragesteller
 22.11.2015, 21:48

Ich hab kein Fehler ich möchte einfach nur das Produkt der Zahlen im Array haben ... Aber die Zahlen werden erst von einem Außenstehenden eingegeben somit auch erst dann die größe des Arrays angegeben

0
martin7812  23.11.2015, 07:35
@PolinGirl

Die Fehlermeldung besagt, dass der Fehler in Zeile 36 ist.

Ohne dass du den fehlerhaften Programmcode postest und markierst, welche Zeile die Zeile 36 ist, kann man nur raten, was denn der Fehler sein könnte.

Eines ist sicher: Die Variable "i" hat den Wert 2, obwohl das Array nur eine Länge von 2 hat (und somit nur die Elemente Array[0] und Array[1] existieren).

Da "i" den Wert 2 hat und Array[2] nicht existiert, bekommst du bei "Array[i]" eine Fehlermeldung.

Wieso es dazu kommt, dass "i" den Wert 2 hat, kann dir niemand sagen, ohne das komplette fehlerhafte Programm zu sehen.

1

Wir helfen gerne, aber per Debugging hättest du locker selber drauf kommen können. - Zum einen hättest du bitte vollständig deinen Lösungsversuch posten sollen. Zwar stimmt der restliche Code, aber den Fehler hast du einfach weg gelassen.

du hast es sicherlich so versucht (ärgerlich überhaupt, dass man erst erraten muss, was du meinst):

int produkt = Array[0];

for (i = 0; i < Array.length; i++) {
    produkt *= Array[i+1];
}

Das wäre wohl der 'Klassiker'. 
Eine ArrayIndexOutofBoundsException tritt dann auf, wenn du auf einen Index zurück greifen willst, den es noch nicht gibt. - Das passiert häufig, da der Index bei 0 anfängt zu zählen.  und wie in dem Beispiel hier, mit i+1 der letzte Eintrag immer außerhalb des Gültigen Indizes enden wird:
Bei einer Array die 2 Lang ist, gibt es die indizes: 0 und 1. mit diesem Schleifendurchlauf würdest du aber beim durchlaufen 1 und 2 abfragen wollen.
Lösung: setze im Schleifenkopf int auf 1, und mach kein +1 beim Abfragen der Array. - dann klappt das nämlich auch.

Noch ein paar kleine Anmerkungen:

  1. Variablen sollten klein geschrieben werden, das sorgt für einen übersichtlichen Code.  (Mein damaliger Lehrer hätte mir dafür einen 6er gegeben)
  2. Variablen solltest du so deklarieren, dass sie nur im Verwendungsbereich verfügbar sind. z.B. deine int i Variable: Deklariere sie im Schleifenkopf, da du sie außerhalb nie brauchst und auch nicht verwendet hast, d.h.:for (int i = 0; i < Array.length; i++) {}

PolinGirl 
Fragesteller
 23.11.2015, 21:17

Ja sorry ich war gestern richtig platt und hab nicht über die richtige Form nachgedacht 

Aufjedenfall habe ich jetzt for (int i=1 ; i <array.lenght; i++) 

Produkt *= array [i] ; 

Kommt immee noch 0 raus

0
KnusperPudding  23.11.2015, 21:24
@PolinGirl

ich hoffe dass dein Initial-Wert von Produkt nicht 0 ist, du weißt ja was passiert, wenn du einen beliebigen wert mit 0 multiplizierst.

0
PolinGirl 
Fragesteller
 23.11.2015, 21:55
@PolinGirl

Ich habe meinen Fehler gefunden ... Danke schön

1
KnusperPudding  24.11.2015, 08:27
@PolinGirl

Alles klar. Der Vollständigkeitshalber solltest du deine Lösung dennoch als Antwort bereit stellen, sofern andere interessierte deine Frage entdecken auch die Richtige Lösung finden.

1