Zum Inhalt springen

Unterschied zweier Methoden


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

Geschrieben

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

  }

Geschrieben

Hi Leute,

@Gooose: Danke für deine ausführliche erklärung, jetzt habe ich es verstanden, danke nochmal.

mfg

D900

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...