Fehlerhaftes Laufzeitverhalten

panicupdate

Mitglied
Hallo,
Ich habe folgende Aufgabe :
Die nachfolgenden Programme sind syntaktisch korrekt und compilierbar, führen aber zu
einem fehlerhaften Laufzeitverhalten. Geben Sie die Art des auftretenden Fehlers an und
erklären Sie kurz, wodurch er verursacht wird!
Java:
// 1.
public class LaufzeitFehler1 {
   public static void doSomething(int[] feld) {
     while (feld.length > 0)
       doSomethingOther(feld);
   }
   
   public static void doSomethingOther(int[] feld) {
     int[] args = new int[feld.length - 1];
     for (int i = 0; i < args.length; i++)
       args[i] = feld[i] - 3;
     doSomething(args);
   }
   
   public static void main(String[] args) {
     doSomething(new int[] { 1, 2, 3 });
   }
}
Ich hätte jetzt gesagt es würde eine NegativeArraySizeException auftreten, da ja immer wieder ein kleineres Feld args erzeugt wird, bis die Größe negativ werden würde.
Tja, stimmt aber nicht...
Der Fehler der zuerst auftritt ist die Endlosschleife, weil die while Bedingung nie falsch wird.
Mir ist nicht einleuchtend warum dieser Fehler vor der NegativeArraySizeException auftritt, kann mir da vielleicht jemand auf die Sprünge helfen?
 
Zuletzt bearbeitet von einem Moderator:

CSHW89

Bekanntes Mitglied
Code:
args = feld - 3;
Das steht so definitiv nicht da. Liegt daran, dass der Code eine Formatierung verursacht hat. Das passiert, wenn man keine Code-Tags verwendet.
 

panicupdate

Mitglied
Entschuldigung, ich kenne mich weder in diesem Forum noch mit Java aus.
Nun, da auf wundersame Weise jetzt das da steh, was ich meinte, könnte mir jemand mit meinem Problem helfen?
vielen Dank im Voraus und liebe Grüße
 

Joose

Top Contributor
Code:
args = feld - 3;
Das steht so definitiv nicht da. Liegt daran, dass der Code eine Formatierung verursacht hat. Das passiert, wenn man keine Code-Tags verwendet.

Schon angepasst ;)

Zu dem Problem: Du könntest einen Schreibtischtest machen.
Du hast recht das "doSomething" immer mit einen kleineren Array aufgerufen wird. Aber wenn das Array die Länge 0 hat dann wird die Schleife gar nicht betreten.
 

VfL_Freak

Top Contributor
Moin,

Java:
while (feld.length > 0)
    doSomethingOther(feld);
ist deswegen eine Endloseschleife, weil sich die Länge von 'feld' ja nie ändert !!
Gruß Klaus
 
X

Xyz1

Gast
Man braucht nur 3 Zeilen sehen,
Java:
   public static void doSomething(int[] feld) {
     while (feld.length > 0)
       doSomethingOther(feld);

um festzustellen, dass es sich um eine Endlosschleife handelt.

Der Inhalt, jedoch nicht die Länge (da immutable) kann innerhalb einer andern Methode geändert werden.

Arrays sind fixe Behälter, schneller Zugriff auf Elemente und Änderungen, das war's dann aber auch schon.

TO: Lass mich raten, du stehst auch vor einer schwierigen Prüfung und die Uhr schlägt schon halb Sechs???
 

CSHW89

Bekanntes Mitglied
um festzustellen, dass es sich um eine Endlosschleife handelt.
Das schon. Es reicht aber nicht, um sagen zu können, dass die Endlosschleife zum Fehler führt. Würde die erste Zeile in "doSomethingOther" z.b.
Java:
int[] args = new int[feld.length - 2];
lauten, gäbe es eine Exception durch Erstellen eines Arrays mit negativer Größe. Die beiden Funktionen rufen sich gegenseitig auf mit dem zuvor neu erstellen kleineren Array.
 
X

Xyz1

Gast
Du hast recht, in dem Fall, träte die Exception vor einem StackOverflow auf! Folgerung: Ich hab nicht alles gelesen.
 

Neue Themen


Oben