Zum Inhalt springen

Unterschied zweier Methoden


D900

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

  }

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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