Labyrinth Algorithmus

Orion789

Mitglied
Hallo, ich versuche gerade ein Programm zu schreiben das relativ simpel sein sollte, ich habe aber gerade besonders Probleme mit dem Einlesen eines Strings. Ich muss nämlich einen String mithilfe eines Konstruktors in ein verschachteltes Array mit Enum Einträgen umwandeln.

Der String woll immer so aussehen (die erste Zahl ist die Breite und die zweite die Höhe des Labyriths):
Code:
String m1 = "33 33\n"
            + "#########e#######################\n"
            + "#                 #           # #\n"
            + "# ######### ### ### ### ##### # #\n"
            + "# #   #   #   #   # # # #   # # #\n"
            + "# # ### # ####### # # # # # # # #\n"
            + "# # #   #     #   # # # # # #   #\n"
            + "# # # ####### # ### # # # # ### #\n"
            + "# # #       # #     # #   # # # #\n"
            + "# # ##### # # ##### # ####### # #\n"
            + "#   #   # # #     # # #         #\n"
            + "##### # # # ##### # # # #########\n"
            + "#   # # # #     # # # # #     # #\n"
            + "# # # # # ####### # # # ### # # #\n"
            + "# #   # # #       # # #     #   #\n"
            + "# ### # ### ####### # ######### #\n"
            + "# #   #   # #     # # #     #   #\n"
            + "# # ### # # # ### # # # ### # ###\n"
            + "# # #   #   #   #   # # #   #   #\n"
            + "### ########### ##### # ####### #\n"
            + "#         #   #       # #     # #\n"
            + "# ### ### # ##### ##### # # # # #\n"
            + "# # # # #       #     # # # # # #\n"
            + "# # # # ####### ##### # # # ### #\n"
            + "# #   # #       #   # #   #     #\n"
            + "# ### # # ####### # # ####### ###\n"
            + "#   # # #   #     # # #       # #\n"
            + "### # # ##### ##### # # ####### #\n"
            + "#   # #         #   # #       # #\n"
            + "# # ##### ##### # ### # ####### #\n"
            + "# #     # #   # #   # # #       #\n"
            + "# ##### # # # # ### # # # ### ###\n"
            + "#     #   # #     #   #   #     #\n"
            + "#######################E#########" ;

Mein Code zum erstellen eines Objektes das diesen String einließt lautet folgendermaßen:
Code:
public class Maze {
    
    public MazeEntry[][] map ;
    public int rows ;
    public int columns ;
    
    //Konstruktor
    public Maze(String blueprint) {
        
        String s = blueprint.substring(0 , 5) ;
        String[] snumbers = s.split("\\s") ;
        int[] inumbers = new int[snumbers.length] ;
        for (int i = 0 ; i < inumbers.length ; i++) {
            inumbers[i] = Integer.parseInt(snumbers[i]) ;
        }
        
        int rows = inumbers[0] ;
        int columns = inumbers[1] ;
        
        MazeEntry[][] map = new MazeEntry[rows][columns] ;
        
        // i Zeile, j Spalte
        String currentrow ;
        for (int i = 0 ; i < rows ; i++) {
            currentrow = blueprint.substring( 7 + i * columns , 7 + i * columns + columns) ;
            char[] symbols = currentrow.toCharArray() ;
            for (int j = 0 ; j < columns ; j++) {
                if (String.valueOf(symbols[j]) == "#") {
                    map[i][j] = MazeEntry.WALL ;
                }
                if (String.valueOf(symbols[j]) == " ") {
                    map[i][j] = MazeEntry.PATH ;
                }
                if (String.valueOf(symbols[j]) == "e") {
                    map[i][j] = MazeEntry.ENTRY ;
                }
                if (String.valueOf(symbols[j]) == "E") {
                    map[i][j] = MazeEntry.EXIT ;
                } else {
                    System.out.printf("Error in Maze Constructor") ;
                }
            }
        }
    }
}

Jetzt lande ich aber bei jeder einzelnen Stelle im String auf meinem "Error in Maze Constructor". Habe schon mehrfach mit dem Zahlen im substring Befehl rumgespielt aber immer den gleichen Fehler behalten. Denkanstöße wären sehr hilfreich!
 
K

kneitzel

Gast
Also das mit dem Error kommt bei allen Einträgen außer "E" nach deiner aktuellen Logik. Du wolltest wohl generell eine if else if else if else .... Serie. Aber Du hast nur ein else, d.h. wenn das erste if wahr ist, dann macht er erst das, geht dann weiter durch, prüft das letzte if, welches nicht wahr ist um dann den else part auch noch zu machen....

Und dein String.valueOf Aufruf kann ich nicht ganz verstehen. Was genau willst Du da machen?
Und generell: Strings vergleicht man mit .equals und nicht mit "=="!

Wenn Du einen character-Array hast dann kannst Du doch einfach den character vergleichen:
Java:
if (symbols[j] == 'E')
Beachte: mit einfachem Quote ist es ein Char, mit doppelten ein String.
 

Orion789

Mitglied
Also das mit dem Error kommt bei allen Einträgen außer "E" nach deiner aktuellen Logik. Du wolltest wohl generell eine if else if else if else .... Serie. Aber Du hast nur ein else, d.h. wenn das erste if wahr ist, dann macht er erst das, geht dann weiter durch, prüft das letzte if, welches nicht wahr ist um dann den else part auch noch zu machen....

Und dein String.valueOf Aufruf kann ich nicht ganz verstehen. Was genau willst Du da machen?
Und generell: Strings vergleicht man mit .equals und nicht mit "=="!

Wenn Du einen character-Array hast dann kannst Du doch einfach den character vergleichen:
Java:
if (symbols[j] == 'E')
Beachte: mit einfachem Quote ist es ein Char, mit doppelten ein String.
Ok, habe es jetzt vereinfacht und den Logik Fehler korrigiert, also habe ich jetzt folgendes stehen:
Code:
public class Maze {
    
    public MazeEntry[][] map ;
    public int rows ;
    public int columns ;
    
    //Konstruktor
    public Maze(String blueprint) {
        
        String s = blueprint.substring(0 , 5) ;
        String[] snumbers = s.split("\\s") ;
        int[] inumbers = new int[snumbers.length] ;
        for (int i = 0 ; i < inumbers.length ; i++) {
            inumbers[i] = Integer.parseInt(snumbers[i]) ;
        }
        
        int rows = inumbers[0] ;
        int columns = inumbers[1] ;
        
        MazeEntry[][] map = new MazeEntry[rows][columns] ;
        
        // i Zeile, j Spalte
        String currentrow ;
        for (int i = 0 ; i < rows ; i++) {
            currentrow = blueprint.substring( 7 + i * columns , 7 + i * columns + columns) ;
            char[] symbols = currentrow.toCharArray() ;
            for (int j = 0 ; j < columns ; j++) {
                if (symbols[j] == '#') {
                    map[i][j] = MazeEntry.WALL ;
                }
                else if (symbols[j] == ' ') {
                    map[i][j] = MazeEntry.PATH ;
                }
                else if (symbols[j] == 'e') {
                    map[i][j] = MazeEntry.ENTRY ;
                }
                else if (symbols[j] == 'E') {
                    map[i][j] = MazeEntry.EXIT ;
                } else {
                    System.out.printf("Error in Maze Constructor") ;
                }
            }
        }
    }
}

Kriege aber weiterhin mehrfach meine Error Meldung, zwar nicht ganz so oft, aber daher kommt es immer noch zu einem Nullpointer error am Ende. Also gibt es immernoch irgendwo einen Fehler der verhindert, dass ich den String korrekt in das Array überführe.
 
K

kneitzel

Gast
Wo genau kommt die NullPointerException?
Und hast Du mal den Code in einem Debugger ablaufen lassen und geschaut, was Du alles findest? Was für ein Zeichen wird z.B. ausgewertet, wenn der Fehler kommt?
Was ist genau in blueprint?

Ich kann jetzt nur vermuten: Ich denke, es wird das newline Zeichen sein, welches Du verwendest zur Trennung. Aber Du nutzt es nicht entsprechend. Statt dessen gehst Du vor, als ob es das Zeichen nicht geben würde.

Ich würde daher die Aufteilung nach Zeilen machen (also das Newline nutzen) statt eben die Berechnung, was wo ist. Dann bist Du auch nicht limitiert, dass die Zahlen immer genau 5 Stellen einnehmen müssen. Dann könntest Du auch eine Karte 1000 1000 haben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
N Backtracking - Labyrinth/Irrgarten Java Basics - Anfänger-Themen 14
D Frage zum Labyrinth Java Basics - Anfänger-Themen 3
P Labyrinth, Backtracking, verzögerte Anzeige Java Basics - Anfänger-Themen 15
J Erste Schritte JavaKara Labyrinth Java Basics - Anfänger-Themen 17
S Labyrinth erstellen Java Basics - Anfänger-Themen 4
B Frage zu Labyrinth Java Basics - Anfänger-Themen 7
H Labyrinth kürzester Weg Java Basics - Anfänger-Themen 8
J Bewegen durch das Labyrinth Java Basics - Anfänger-Themen 7
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben