public class LaufzeitFehler1 {
static int zeilen=0;
static int stack=0;
public static void doSomething(int[] feld) {
System.out.printf("Stack:%d Start doSomething\n",stack); // doSomething wird 3x mehr aufgerufen als beendet.
while (feld.length > 0) { // Endlos, weil die feld.lenght in Schleife nicht kleiner wird.
if (zeilen==7)
System.exit(1);
else
zeilen=zeilen+1;
System.out.printf("Rufe doSomethingOther auf feld.length:%d feld[0]:%d\n", feld.length,feld[0]);
stack=stack+1;
doSomethingOther(feld);
stack=stack-1;
}
System.out.printf("Stack:%d Return doSomething\n",stack);
}
public static void doSomethingOther(int[] feld) {
int[] args = new int[feld.length - 1];
System.out.printf("Stack:%d Erzeuge neues int-Feld mit der Laenge: %d\n",stack, args.length);
for (int i = 0; i < args.length; i++)
args[i] = feld[i] - 3;
//System.out.printf("Rufe doSomething auf args.length:%d feld[0]: %d \n", args.length,feld[0]);
stack=stack+1;
doSomething(args);
stack=stack-1;
//System.out.printf("Vernichte int-Feld mit der Laenge: %d \n",args.length);
}
public static void main(String[] args) {
stack=stack+1;
doSomething(new int[] { 1, 2, 3 });
}
}
/*
E:\>java LaufzeitFehler1
Stack:1 Start doSomething
Rufe doSomethingOther auf feld.length:3 feld[0]:1
Stack:2 Erzeuge neues int-Feld mit der Laenge: 2
Stack:3 Start doSomething
Rufe doSomethingOther auf feld.length:2 feld[0]:-2
Stack:4 Erzeuge neues int-Feld mit der Laenge: 1
Stack:5 Start doSomething
Rufe doSomethingOther auf feld.length:1 feld[0]:-5
Stack:6 Erzeuge neues int-Feld mit der Laenge: 0
Stack:7 Start doSomething
Stack:7 Return doSomething
Rufe doSomethingOther auf feld.length:1 feld[0]:-5
Stack:6 Erzeuge neues int-Feld mit der Laenge: 0
Stack:7 Start doSomething
Stack:7 Return doSomething
Rufe doSomethingOther auf feld.length:1 feld[0]:-5
Stack:6 Erzeuge neues int-Feld mit der Laenge: 0
Stack:7 Start doSomething
Stack:7 Return doSomething
Rufe doSomethingOther auf feld.length:1 feld[0]:-5
Stack:6 Erzeuge neues int-Feld mit der Laenge: 0
Stack:7 Start doSomething
Stack:7 Return doSomething
Rufe doSomethingOther auf feld.length:1 feld[0]:-5
Stack:6 Erzeuge neues int-Feld mit der Laenge: 0
Stack:7 Start doSomething
Stack:7 Return doSomething
E:\>
*/