Brainf*ck ArryaIndexoutofBounds

Java xyrse123

Bekanntes Mitglied
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:
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]--;
            }
        }
    }
 

Tobse

Top Contributor
Ich sehe das Problem nicht... auf meinem Rechner läuft das wunderbar:

Java:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

class BFTest {
    public static void interpretiere(String BrainfuckText) throws IOException
    {
// copy & paste aus deinem posting
    }

    public static void main(String[] args) throws Exception {
        String bf = "++++++++[>+>++++<<-]>++>>+<[-[>>+<<-]+>>]>+[-<<<[->[+[-]+>++>>>-<<]<[<]>>++++++[<<+++++>>-]+<<++.[-]<<]>.>+[>>]>+]";

        interpretiere(bf);
    }
}

Ausgabe:

Code:
"D:\Program Files\Java\jdk1.8.0_60\bin\java" ... BFTest
                               *
                              * *
                             *   *
                            * * * *
                           *       *
                          * *     * *
                         *   *   *   *
                        * * * * * * * *
                       *               *
                      * *             * *
                     *   *           *   *
                    * * * *         * * * *
                   *       *       *       *
                  * *     * *     * *     * *
                 *   *   *   *   *   *   *   *
                * * * * * * * * * * * * * * * *
               *                               *
              * *                             * *
             *   *                           *   *
            * * * *                         * * * *
           *       *                       *       *
          * *     * *                     * *     * *
         *   *   *   *                   *   *   *   *
        * * * * * * * *                 * * * * * * * *
       *               *               *               *
      * *             * *             * *             * *
     *   *           *   *           *   *           *   *
    * * * *         * * * *         * * * *         * * * *
   *       *       *       *       *       *       *       *
  * *     * *     * *     * *     * *     * *     * *     * *
 *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Process finished with exit code 0

---------------
Du hast die Ursache für die Exception ja schon gefunden. Demnach ist es ein Problem mit dem Brainfuck-Programm. Aber anscheindend ist es korrekt? Hast du wirklich das ganze Programm gepostet? Da fehlt das abschließende "
 

Neue Themen


Oben