Hallo,
bei folgendem Programm bekomme ich eine ArryaIndexoutofBounds Exception im
case '-'. Ich bin das Programm mit dem Debugger durchgegangen und die Zeigervariable wurde auf 32000 gesetzt(was ja auch den Fehler auslöst), aber ich verstehe nicht warum.
Schonmal danke im Vorraus.
EDIT: Habs hier mit getestet:
bei folgendem Programm bekomme ich eine ArryaIndexoutofBounds Exception im
case '-'. Ich bin das Programm mit dem Debugger durchgegangen und die Zeigervariable wurde auf 32000 gesetzt(was ja auch den Fehler auslöst), aber ich verstehe nicht warum.
Schonmal danke im Vorraus.
EDIT: Habs hier mit getestet:
Code:
++++++++[>+>++++<<-]>++>>+<[-[>>+<<-]+>>]>+[\n" +
"-<<<[\n" +
"->[+[-]+>++>>>-<<]<[<]>>++++++[<<+++++>>-]+<<++.[-]<<\n" +
"]>.>+[>>]>+\n" +
"]
Java:
public static void interpretiere(String BrainfuckText) throws IOException {
DataInputStream input = new DataInputStream(System.in);
DataOutputStream out = new DataOutputStream(System.out);
int speicher[] = new int[32000];
int zeiger = 0;
int schleifen = 0;
for (int i = 0; i < BrainfuckText.length(); i++) { // Zeichenweise lesen
switch (BrainfuckText.charAt(i)) { // Fallunterscheidung alle 8 Befehle
case '.':
System.out.print((char) (int) speicher[zeiger]); // Ausgabe
break;
case ',': // Zahl wird eingelesen
speicher[zeiger] = (char) input.read();
break;
case '[': // beginn Schleife
if (speicher[zeiger] == 0) {
i++;
while (schleifen > 0 || BrainfuckText.charAt(i) != ']') {
if (BrainfuckText.charAt(i) == '[')
schleifen++;
else if (BrainfuckText.charAt(i) == ']')
schleifen--;
i++;
}
}
break;
case ']': // Ende Schleife
if (speicher[zeiger] != 0) {
i--;
while (schleifen > 0 || BrainfuckText.charAt(i) != '[') {
if (BrainfuckText.charAt(i) == ']')
schleifen++;
else if (BrainfuckText.charAt(i) == '[')
schleifen--;
i--;
}
i--;
}
break;
case '>':
zeiger++;
break;
case '<':
zeiger--;
break;
case '+': // Speicherzelle wird um 1 erhöht
speicher[zeiger]++;
break;
case '-': // Speicherzelle wird um 1 erniedrigt
speicher[zeiger]--;
}
}
}