Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Unterschied zweier Methoden

Empfohlene Antworten

Veröffentlicht

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

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.

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.

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

Bau dir ein syso ein und gebe dir s aus.

ArrayOutOfBoundException folgt

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

  }

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.