D900 Geschrieben 15. Mai 2009 Teilen Geschrieben 15. Mai 2009 Hi Leute, tut mir leid, für die einfache Frage, für mich ist es aber nicht so einfach, bin noch am lernen. Was genau ist an diesen beiden Methoden der unterschied? Die variable i wird an unterschiedlichen stellen im code inkrementiert, das weiß ich, aber was genau ist der unterschied? Liefern nicht beide Methoden das selbe ergebnis? Hier den code: public static int sum1(int[] a) { int s =0, i =0; while(i < a.length) { i++; s = s + a[i]; } return s; } public static int sum2(int[] a) { int s =0, i =0; while(i < a.length) s = s + a[i++]; return s; } Danke für eure hilfe und aufklärung. mfg D900 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 15. Mai 2009 Teilen Geschrieben 15. Mai 2009 Beim letzten Schleifendurchlauf von sum1 wirst du eine Exception erhalten, da i dann außerhalb des Arrayindexes liegt. Käme i++ nach der Addition würde es klappen. Bei sum2 sollte es funktionieren, da bei i++ erst zugewiesen, dann inkrementiert wird. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
elSusto Geschrieben 15. Mai 2009 Teilen Geschrieben 15. Mai 2009 du wirst eigentlich bloß den ersten inex nicht bekommen weil i nicht 0 ist. allein deswegen müsstest du i erst NACHdem du den inhalt ausm array geholt hast inkrementieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D900 Geschrieben 16. Mai 2009 Autor Teilen Geschrieben 16. Mai 2009 Hi Leute, ich danke euch erstmal. @Gooose: Ja, tatsächlich, sum1 wirft eine Exception, allerdings, habe ich zu wenig erfahrung, um festzustellen, ob die Exception tatsächlich nach dem letzten schleifendurchlauf geworfen wird. mfg d900 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 16. Mai 2009 Teilen Geschrieben 16. Mai 2009 Bau dir ein syso ein und gebe dir s aus. ArrayOutOfBoundException folgt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 17. Mai 2009 Teilen Geschrieben 17. Mai 2009 Bei sum1 wird eine ArrayIndexOutOfBoundsException geworfen. Hierbei handelt es sich um eine Runtime Exeption, die von der virtuellen Maschine zur Laufzeit geworfen wird. Wenn ich beispielsweise ein Array folgendermaßen definiere, int[] a = new a[4]; erzeuge ich ein Objekt vom Typ Array von int, welches 4 Integerwerte aufnehmen kann. Hierfür wird Speicher reserviert. Die einzelnen Elemente des Arrays kann ich über int[0], int[1], int[2], int[3] ansprechen. Sollte ich einen Index wählen, der außerhalb des gültigen Bereiches liegt, wird eine Exception geworfen. Bei der Schleife von sum1 while(i < a.length) { i++; s = s + a[i]; } wird beim letzten Schleifendurchlauf ist i genau a.length - 1. Dann erhöst du i um eins und versuchst folgende Summe zu bilden s = s + a[4]; und 4 liegt außerhalb des Indexes. Wenn du die Schleife folgendermaßen schreibst: while(i < a.length) { s = s + a[i]; i++; } würde es funktionieren. Bei Schleifen wo die Anzahl der Durchläufe bekannt ist, bietet sich die for-Schleife an. for (int i = 0; i < a.length; i++) { s = s + a[i]; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D900 Geschrieben 17. Mai 2009 Autor Teilen Geschrieben 17. Mai 2009 Hi Leute, @Gooose: Danke für deine ausführliche erklärung, jetzt habe ich es verstanden, danke nochmal. mfg D900 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.