Veröffentlicht 15. Mai 200916 j 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
15. Mai 200916 j 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.
15. Mai 200916 j 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.
16. Mai 200916 j 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
17. Mai 200916 j 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]; }
17. Mai 200916 j Hi Leute, @Gooose: Danke für deine ausführliche erklärung, jetzt habe ich es verstanden, danke nochmal. mfg D900
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.