java erstes projekt

H

Heyoka955

Gast
hhahahahhaahahahah ja okay habe die aufgabe eig schon fast! ich häte eig vornehein auf den bug kommen sollen. naja mache jetzt theoretische Informatik.
 
H

Heyoka955

Gast
Da war ja die eine Fehlermeldung in der Expertin klasse Rover is missin und die stand unten bei der Ausgabe nie wenn der Rover verschwand und ein Kollege meinte mir man solle das so machen.
Aber von der Aufgabe 1 her sehr unübersichtlich.
Bei mir klappt das Für den Fall mit b nicht falls f gleich b ist?
Dann gibt es eine Fehlermeldung
 

Anhänge

  • image.jpg
    image.jpg
    3,2 MB · Aufrufe: 64

mihe7

Top Contributor
Ich will ja nichts sagen, aber in Deinem Screenshort ist mars rot unterringelt. Hat das eine andere Bedeutung als "Fehler"?
 
H

Heyoka955

Gast
Java:
if (c == 'f') {
            int[] p = findeRover();
              if (get(mars, p).equals("n") && !get(mars, new int[][]{p[0],p[1]-1}).equals("#"))
                p[1]--;
            else if (get(mars,p).equals("s") && !get(mars, new int[][] {p[0],p[1]+1}).equals("#"))
                p[1]++;
            else if (get(mars, p).equals("e") && !get(mars, new int[][] {p[0]+1,p[1]}).equals("#"))
                p[0]++;
            else if (get(mars, p).equals("w") && !get(mars, new int[][]{p[0]-1}.p[1]).equals("#"))
                   p[0]--;
        }
//int kann nicht convertent to int[] ist die fehlermeldung
So habe ich das hingeschrieben!
Aber der funktioniert nicht wenn r übergeben wird
 
K

kneitzel

Gast
Also das ist doch nicht mehr dein aktueller Code. Wenn, dann musst uns den aktuellen codeabschnitt geben.

Und Du hast doch auch eine genaue Fehlermeldung. Was ist in Start.java Zeile 111? Und wieso kann man so Fehlermeldungen nicht per copy and Paste weiter geben?
 
H

Heyoka955

Gast
Also das ist doch nicht mehr dein aktueller Code. Wenn, dann musst uns den aktuellen codeabschnitt geben.

Und Du hast doch auch eine genaue Fehlermeldung. Was ist in Start.java Zeile 111? Und wieso kann man so Fehlermeldungen nicht per copy and Paste weiter geben?
Mein Freund ht saa Probleme, ich saß an seinem noteBook und habe das abfotografiert.

Ich schicke euch meinen code mal.
Also ich habe das so gemacht für den Fall von c = f

Code:
Public boolean h(char c){

if (c == 'f') {
            int[] p = findeRover();
              if (get(mars, p).equals("n") && !get(mars, new int[]{p[0],p[1]-1}).equals("#"))
                Return false;
            else if (get(mars,p).equals("s") && !get(mars, new int[] {p[0],p[1]+1}).equals("#"))
                Return false;
            else if (get(mars, p).equals("e") && !get(mars, new int[] {p[0]+1,p[1]}).equals("#"))
                Return false;
            else if (get(mars, p).equals("w") && !get(mars, new int[] {p[0]-1,p[1]}).equals("#"))
                   Return false;



Return true;

        }

}
 
K

kneitzel

Gast
Habe ich das jetzt richtig verstanden:
Wir haben zwei Computer
- diese haben einen unterschiedlichen Code
- diese haben unterschiedliche Fehlerbilder

Und nun bekommen wir den Code von c='f' von Deinem System aber die Fehler, die wir bekommen haben, waren beim anderen System. Hinzu kommt, dass das Problem bei c='b' sein sollte, oder habe ich da etwas missverstanden?
Und welche Zeile er angemeckert hat, wissen wir immer noch nicht (außer, dass es eben Zeile 111 ist.

Wenn das eine Foto von Intellij war: Intellij unterstreicht Fehler. Also gibt es definitiv Fehler in der Applikation. Statt Fotos mit dem Handy sollte man eher Screenshot machen oder so. Wenn ihr das richtige Fenster mit den Fehlermeldungen nicht finden solltet (evtl. habt ihr das ja geschlossen oder so, wobei ich meine, dass IntelliJ beim Build das Fenster auch wieder öffnen würde...) kann man mit der Maus auch auf so eine unterstrichene Stelle gehen und dann kommt nach kurzer Zeit eine Einblendung mit dem Fehler.

Oder gib uns mal den ganzen Code als Dateianhang und dann können wir auch einmal drüber schauen.
 
H

Heyoka955

Gast
Habe ich das jetzt richtig verstanden:
Wir haben zwei Computer
- diese haben einen unterschiedlichen Code
- diese haben unterschiedliche Fehlerbilder

Und nun bekommen wir den Code von c='f' von Deinem System aber die Fehler, die wir bekommen haben, waren beim anderen System. Hinzu kommt, dass das Problem bei c='b' sein sollte, oder habe ich da etwas missverstanden?
Und welche Zeile er angemeckert hat, wissen wir immer noch nicht (außer, dass es eben Zeile 111 ist.

Wenn das eine Foto von Intellij war: Intellij unterstreicht Fehler. Also gibt es definitiv Fehler in der Applikation. Statt Fotos mit dem Handy sollte man eher Screenshot machen oder so. Wenn ihr das richtige Fenster mit den Fehlermeldungen nicht finden solltet (evtl. habt ihr das ja geschlossen oder so, wobei ich meine, dass IntelliJ beim Build das Fenster auch wieder öffnen würde...) kann man mit der Maus auch auf so eine unterstrichene Stelle gehen und dann kommt nach kurzer Zeit eine Einblendung mit dem Fehler.

Oder gib uns mal den ganzen Code als Dateianhang und dann können wir auch einmal drüber schauen.
Mache ich jetzt wenn ich zuhause bin
 
H

Heyoka955

Gast
Java:
package rover;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;

public class Start {

    static Random r = new Random();
    static LinkedHashMap<int[], String> mars;

    public static void init() {
        mars = new LinkedHashMap<>();
        int x = 80;
        int y = 20;
        int rx = x / 2;
        int ry = y / 2;
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                int[] p = new int[] { i, j };
                if (r.nextDouble() < 0.25 && !(rx == i && ry == j))
                    mars.put(p, "#");
            }
        }
        mars.put(new int[] { rx, ry }, "n");
    }

    public static int[] maximum(Set<int[]> set) {
        int[] x = new int[2];
        for (int[] e : set) {
            if (e[0] > x[0])
                x[0] = e[0];
            if (e[1] > x[1])
                x[1] = e[1];
        }
        return x;
    }

    public static String get(Map<int[], String> kloetze, int[] p) {
        Set<Entry<int[], String>> entrySet = kloetze.entrySet();
        for (Entry<int[], String> entry : entrySet) {
            if (entry.getKey()[0] == p[0] && entry.getKey()[1] == p[1])
                return entry.getValue();
        }
        return null;
    }

    public static void out() {
        // Set<int[]> keySet = mars.keySet();
        // for (int[] e : keySet) {
        // if (e[0] == 39 && e[1] == 10)
        // System.err.println(mars.get(e) + " " + e.hashCode());
        // }

        int[] max = maximum(mars.keySet());
        for (int j = 0; j < max[1]; j++) {
            for (int i = 0; i < max[0]; i++) {
                // System.out.println(i + "," + j + ": " + get(mars, new int[] { i, j }));

                if (get(mars, new int[] { i, j }) == null) {
                    System.out.print(" ");
                    continue;
                }
                if (get(mars, new int[] { i, j }).equals("#"))
                    System.out.print("#");
                else if (get(mars, new int[] { i, j }).equals("n"))
                    System.out.print("^");
                else if (get(mars, new int[] { i, j }).equals("s"))
                    System.out.print("V");
                else if (get(mars, new int[] { i, j }).equals("e"))
                    System.out.print(">");
                if (get(mars, new int[] { i, j }).equals("w"))
                    System.out.print("<");

            }
            System.out.println();
        }
        for (int i = 0; i < max[0]; i++) {
            System.out.print("=");
        }
        System.out.println();
    }

    public static void main(String[] args) {

        if (args.length > 1) {
            long seed = Long.parseLong(args[1]);
            r.setSeed(seed);
            // System.out.println("Seed: " + seed);
        }
        init();
        String pg = args[0];
        out();
        for (int i = 0; i < pg.length(); i++) {
            make(pg.charAt(i));
            out();
        }
    }

    public static void make(char c) {
        
        
        if (c == 'f') {
            int[] p = findeRover();
            if (get(mars, p).equals("n") && !get(mars, new int[]{p[0],p[1]-1}).equals("#"))
                p[1]--;
            else if (get(mars, p).equals("s") && !get(mars, new int[] {p[0],p[1]+1}).equals("#"))
                p[1]++;
            else if (get(mars, p).equals("e") && !get(mars, new int[] {p[0]+1,p[1]}).equals("#"))
                p[0]++;
            else if (get(mars, p).equals("w") && !get(mars, new int[] {p[0]-1,p[1]}).equals("#"))
                p[0]--;
        } else if (c == 'b') {
            int[] p = findeRover();
            if (get(mars, p).equals("s"))
                p[1]--;
            else if (get(mars, p).equals("n"))
                p[1]++;
            else if (get(mars, p).equals("w"))
                p[0]++;
            else if (get(mars, p).equals("e"))
                p[0]--;
        } else if (c == 'l') {
            int[] p = findeRover();
            if (get(mars, p).equals("n"))
                mars.put(p, "w");
            else if (get(mars, p).equals("s"))
                mars.put(p, "e");
            else if (get(mars, p).equals("e"))
                mars.put(p, "n");
            else if (get(mars, p).equals("w"))
                mars.put(p, "s");
        } else if (c == 'r') {
            int[] p = findeRover();
            if (get(mars, p).equals("w"))
                mars.put(p, "n");
            else if (get(mars, p).equals("e"))
                mars.put(p, "s");
            else if (get(mars, p).equals("n"))
                mars.put(p, "e");
            else if (get(mars, p).equals("s"))
                mars.put(p, "w");
        }

    }
    

    
    

    private static int[] findeRover() {
        Set<Entry<int[], String>> entrySet = mars.entrySet();
        for (Entry<int[], String> entry : entrySet) {
            if (entry.getValue() != null && !entry.getValue().equals("#"))
                return entry.getKey();
        }
        throw new IllegalStateException("Rover missing in action");
    }

}

11702
 
K

kneitzel

Gast
Also gut, dann wollen wir da mal dran gehen.

Du hast IntelliJ, also wollen wir jetzt mal zusammen den Fehler finden und ggf beheben.

Du siehst erst einmal die Exception: Die NPE tritt in Start.java Zeile 111 auf. Dann geh doch mal auf die Zeile 111. IntelliJ zeigt ja die Zeilen an, so dass dies erst einmal möglich sein sollte. Zu welcher Zeile kommst Du da genau?

Und nun setzen wir in dieser Zeile einen sogenannten Breakpoint, d.h. wir sagen IntelliJ, dass es aufhören soll das Programm abzuarbeiten, wenn es in diese Zeile kommt. Dazu klicken wir einfach links neben das Codefenster - zwischen den Rahmen und der Zeilennummer, so dass da ein roter Punkt erscheint:
11703

Als nächstes starten wir das Programm mit dem Debugger. Dazu klicken wir oben in der Leiste nicht auf den grünen pfeil sondern den grünen Käfer daneben. (Die Start-Config wirst Du ja gesetzt haben mit dem "lff 4711".

Nun sollte die Ausführung laufen bis zu diesem Punkt und Du solltest das Debugger Fenster sehen:
11704
Im oberen Bereich und am linken Rand siehst Du die wichtige Knöpfe:
Für Dich ist wichtig:
Oben:
Step over: Die Zeile, in der Du gerade bist, wird abgearbeitet und Du bist in der nächsten Zeile.
Step into: Es wird in einen Funktionsaufruf gesprungen und Du bist dann in der nächsten Funktion.
Step Out: Wenn Du in eine Funktion kommst, die Dich nicht interessiert, dann kannst Du damit die Funktion abarbeiten und bist dann wieder eine Ebene höher.
Links:
Resume Program - So der Breakpoint erreicht wurde und die Begleitumstände nicht so sind wie gedacht (hier würde es bedeuten: Du bist ohne Exception in die nächste Zeile gekommen), kannst Du damit den Debugger weiter laufen lassen. Dieser läuft dann, bis er wieder einen Breakpoint erreicht.
Stop: Debugger stoppen

Damit kannst Du jetzt also mit Step into schauen, was für Funktionen er aufruft und was er zurück gibt. Und das Problem, welches Du untersuchst, ist eine Null Pointer Exception (NPE), d.h. du versuchst auf einem null Wert etwas aufzurufen.

Sollte dieses step into zu schwer sein, dann kannst Du Dinge in mehrere Befehle aufteilen. Also z.B. ein
Java:
if (stringReturningFunction().equals("something")) { ... }
kannst Du umschreiben in
Java:
String returnedValue = stringReturningFunction();
if (returnedValue.equals("something")) { ... }
Wenn Du dann mit dem Debugger durchgehst, dann wird erst die Funktion aufgerufen und bist danach auf dem if. Und dann kannst Du im großen Bereich des Debuggers die Variable returnedValue ansehen....

Wenn Du dies machst: Erkennst Du, woher die NPE kommt? Wie kannst Du die verhindern?
 
H

Heyoka955

Gast
Also gut, dann wollen wir da mal dran gehen.

Du hast IntelliJ, also wollen wir jetzt mal zusammen den Fehler finden und ggf beheben.

Du siehst erst einmal die Exception: Die NPE tritt in Start.java Zeile 111 auf. Dann geh doch mal auf die Zeile 111. IntelliJ zeigt ja die Zeilen an, so dass dies erst einmal möglich sein sollte. Zu welcher Zeile kommst Du da genau?

Und nun setzen wir in dieser Zeile einen sogenannten Breakpoint, d.h. wir sagen IntelliJ, dass es aufhören soll das Programm abzuarbeiten, wenn es in diese Zeile kommt. Dazu klicken wir einfach links neben das Codefenster - zwischen den Rahmen und der Zeilennummer, so dass da ein roter Punkt erscheint:
Anhang anzeigen 11703

Als nächstes starten wir das Programm mit dem Debugger. Dazu klicken wir oben in der Leiste nicht auf den grünen pfeil sondern den grünen Käfer daneben. (Die Start-Config wirst Du ja gesetzt haben mit dem "lff 4711".

Nun sollte die Ausführung laufen bis zu diesem Punkt und Du solltest das Debugger Fenster sehen:
Anhang anzeigen 11704
Im oberen Bereich und am linken Rand siehst Du die wichtige Knöpfe:
Für Dich ist wichtig:
Oben:
Step over: Die Zeile, in der Du gerade bist, wird abgearbeitet und Du bist in der nächsten Zeile.
Step into: Es wird in einen Funktionsaufruf gesprungen und Du bist dann in der nächsten Funktion.
Step Out: Wenn Du in eine Funktion kommst, die Dich nicht interessiert, dann kannst Du damit die Funktion abarbeiten und bist dann wieder eine Ebene höher.
Links:
Resume Program - So der Breakpoint erreicht wurde und die Begleitumstände nicht so sind wie gedacht (hier würde es bedeuten: Du bist ohne Exception in die nächste Zeile gekommen), kannst Du damit den Debugger weiter laufen lassen. Dieser läuft dann, bis er wieder einen Breakpoint erreicht.
Stop: Debugger stoppen

Damit kannst Du jetzt also mit Step into schauen, was für Funktionen er aufruft und was er zurück gibt. Und das Problem, welches Du untersuchst, ist eine Null Pointer Exception (NPE), d.h. du versuchst auf einem null Wert etwas aufzurufen.

Sollte dieses step into zu schwer sein, dann kannst Du Dinge in mehrere Befehle aufteilen. Also z.B. ein
Java:
if (stringReturningFunction().equals("something")) { ... }
kannst Du umschreiben in
Java:
String returnedValue = stringReturningFunction();
if (returnedValue.equals("something")) { ... }
Wenn Du dann mit dem Debugger durchgehst, dann wird erst die Funktion aufgerufen und bist danach auf dem if. Und dann kannst Du im großen Bereich des Debuggers die Variable returnedValue ansehen....

Wenn Du dies machst: Erkennst Du, woher die NPE kommt? Wie kannst Du die verhindern?
Try catch?
 
K

kneitzel

Gast
Ohh je. Java Grundlagen. Was eine Exception ist, sollte doch bekannt sein, gerade da doch in dem Code auch eine throw Anweisung enthalten war.

==> Stell bitte sicher, dass Du genau weisst, was welcher Befehl macht! Mach ein paar kleine Tests!

Falls Du kein gutes Java Buch hast, gibt es online einiges, was frei und in Deutsch ist. So empfehle ich regelmäßig:

Und ein Test den Du dringen machen solltest: Starte mal eine Applikation die in der main Funktion nur folgenden Code hat:
Java:
throw new RuntimeException("Meine erste eigene Exception");

Was siehst Du, wenn Du den Code ausführst?
 
H

Heyoka955

Gast
Ohh je. Java Grundlagen. Was eine Exception ist, sollte doch bekannt sein, gerade da doch in dem Code auch eine throw Anweisung enthan war.

==> Stell bitte sicher, dass Du genau weisst, was welcher Befehl macht! Mach ein paar kleine Tests!

Falls Du kein gutes Java Buch hast, gibt es online einiges, was frei und in Deutsch ist. So empfehle ich regelmäßig:

Und ein Test den Du dringen machen solltest: Starte mal eine Applikation die in der main Funktion nur folgenden Code hat:
Java:
throw new RuntimeException("Meine erste eigene Exception");

Was siehst Du, wenn Du den Code ausführst?
Soll er ganz nach unten und das behebt doch immernoch nicht den Bug genau? Oder willst du darauf du aufbauen.
 
K

kneitzel

Gast

Nein!

Warum rätst Du anstatt Dich ernsthaft mit dem auseinander zu setzen, was man Dir sagt?

Wenn man Exceptions bekommt, weil man im Code grobe Fehler hat, dann bringt ein Abfangen nichts. Die Fehler raus machen wäre wohl deutlich besser! Also muss man erkennen, wie es zu dem Fehler kommt um dann diese Fehlersituation zu vermeiden!
 
H

Heyoka955

Gast
Soll er ganz nach unten ner das behebt doch immernoch nicht den Bug genau?
Nein!

Warum rätst Du anstatt Dich ernsthaft mit dem auseinander zu setzen, was man Dir sagt?

Wenn man Exceptions bekommt, weil man im Code grobe Fehler hat, dann bringt ein Abfangen nichts. Die Fehler raus machen wäre wohl deutlich besser! Also muss man erkennen, wie es zu dem Fehler kommt um dann diese Fehlersituation zu vermeiden!
ich mache das morgen aber leider bin ich gleich weg daher hab ich geraten.

Wird langsam Zeit mit Debuggen anzufangen...
Die haben uns das garnicht beigebracht.
 
K

kneitzel

Gast
Soll er ganz nach unten und das behebt doch immernoch nicht den Bug genau? Oder willst du darauf du aufbauen.
Nein, vergiss den Rover. Als ersten Schritt musst Du Dein Halbwissen durch echtes Wissen ersetzen! So lange Dir Basiswissen fehlt wirst Du nicht weiter kommen, denn eine fertige Lösung dürftest Du von niemanden bekommen.

Du studierst! Das bedeutet, dass Du selbständig Dir Wissen aneignen musst. Fang endlich damit an! Es gibt keine schnellen Wege. Du bist am studieren und das bedeutet, sich Wissen anzueignen. Und diese Aufgaben dienen dazu, euch etwas an die Hand zu geben. Also fang endlich an, die erkannten Wissenslücken zu schließen!
 
H

Heyoka955

Gast
Nein, vergiss den Rover. Als ersten Schritt musst Du Dein Halbwissen durch echtes Wissen ersetzen! So lange Dir Basiswissen fehlt wirst Du nicht weiter kommen, denn eine fertige Lösung dürftest Du von niemanden bekommen.

Du studierst! Das bedeutet, dass Du selbständig Dir Wissen aneignen musst. Fang endlich damit an! Es gibt keine schnellen Wege. Du bist am studieren und das bedeutet, sich Wissen anzueignen. Und diese Aufgaben dienen dazu, euch etwas an die Hand zu geben. Also fang endlich an, die erkannten Wissenslücken zu schließen!
Jo ich lese mir das durch morgen und schaue das an.
Ich weiß ungefähr wie eine try catch Funktion und Throws funktionieren.
 
K

kneitzel

Gast
Das Kommentar/Antwort-Verhältnis bezogen auf den Inhalt von @kneitzel / @Heyoka955 strebt irgendwie gegen @kneitzel. Wobei bezogen auf den Inhalt eher gegen Unendlich.
Tja, es hatte mal den Anschein, als ob da jetzt evtl. mal etwas von ihm kommt. Aber das war wohl nur eine Täuschung. Aber schauen wir mal, wie es dann weiter gehen wird. Aber mit seinen Versuchen "smart und schnell" zu sein, hat er wohl schon massiv Zeit vergeudet. Die Zeit von Anfang an richtig genutzt und er hätte deutlich mehr Wissen zu Java und er hätte dann wohl auch schon funktionierenden Code.

Jo ich lese mir das durch morgen und schaue das an.
Ich weiß ungefähr wie eine try catch Funktion und Throws funktionieren.

Es geht nicht darum, ungefähr zu wissen, wie die funktionieren. try/catch brauchst du erst einmal nicht. "Exceptions should only happen on exceptional behaviour.". Die kannst Du bei einer Uni-Aufgabe größtenteils ignorieren. Also wenn jemand eine Zahl eingeben soll, aber text eingibt und du dann diesen versuchst zu einem int zu parsen: Dann steigt die Applikation halt aus. Du willst ein Textfile lesen und das ist nicht da oder du hast keine Rechte? Scheiss drauf. Bei einer Applikation wäre das wichtig, denn natürlich soll z.B. Word nicht einfach abstürzen, nur weil du eine Datei nicht lesen kannst. Aber darum geht es hier ja nicht.

Also schau Dir an, woher die Exception kommt und dann behebe den Fehler. (Bei den obrigen Beispielen würdest du halt korrekten Input liefern, die Datei an der richtigen Stelle anlegen oder für die notwendigen Rechte sorgen ....) Bei Dir sind es aber halt Fehler im Code, die Du erkennen und dann beheben musst.

Übrigens ein sehr gutes Beispiel für ein BestPractice, auf das ich dann nach Behebung des Fehlers kurz eingehen werde. Erinnere mich, so ich das vergessen sollte.
 
H

Heyoka955

Gast
Tja, es hatte mal den Anschein, als ob da jetzt evtl. mal etwas von ihm kommt. Aber das war wohl nur eine Täuschung. Aber schauen wir mal, wie es dann weiter gehen wird. Aber mit seinen Versuchen "smart und schnell" zu sein, hat er wohl schon massiv Zeit vergeudet. Die Zeit von Anfang an richtig genutzt und er hätte deutlich mehr Wissen zu Java und er hätte dann wohl auch schon funktionierenden Code.



Es geht nicht darum, ungefähr zu wissen, wie die funktionieren. try/catch brauchst du erst einmal nicht. "Exceptions should only happen on exceptional behaviour.". Die kannst Du bei einer Uni-Aufgabe größtenteils ignorieren. Also wenn jemand eine Zahl eingeben soll, aber text eingibt und du dann diesen versuchst zu einem int zu parsen: Dann steigt die Applikation halt aus. Du willst ein Textfile lesen und das ist nicht da oder du hast keine Rechte? Scheiss drauf. Bei einer Applikation wäre das wichtig, denn natürlich soll z.B. Word nicht einfach abstürzen, nur weil du eine Datei nicht lesen kannst. Aber darum geht es hier ja nicht.

Also schau Dir an, woher die Exception kommt und dann behebe den Fehler. (Bei den obrigen Beispielen würdest du halt korrekten Input liefern, die Datei an der richtigen Stelle anlegen oder für die notwendigen Rechte sorgen ....) Bei Dir sind es aber halt Fehler im Code, die Du erkennen und dann beheben musst.

Übrigens ein sehr gutes Beispiel für ein BestPractice, auf das ich dann nach Behebung des Fehlers kurz eingehen werde. Erinnere mich, so ich das vergessen sollte.
Aber ich würde gerne wissen ob der Fehler an meiner if Bedingung liegt als Tipp.
Weil vom Prinzip her müsste das richtig sein?
 
K

kneitzel

Gast
Aber ich würde gerne wissen ob der Fehler an meiner if Bedingung liegt als Tipp.
Weil vom Prinzip her müsste das richtig sein?

Hast Du Dir die Zeile 111, in der die Exception geworfen wurde, einmal angesehen?
Wenn in der Zeile eine if Anweisung steht, dann wird es wohl daran liegen.
Die könnte man anpassen, aber man könnte sie auch so lassen und den Fehler woanders beheben (das wäre meine bevorzugte Lösung, aber zu best practices kommen wir später (So du das gelöst bekommst).
 

mihe7

Top Contributor

AndiE

Top Contributor
Java:
 else if (get(mars, p).equals("s") && !get(mars, new int[] {p[0],p[1]+1}).equals("#"))
Das ist der Coode an besagter Stelle. Für mich ist das "worst practise", da eine anzahl Anweisungen in einer Zeile stehen. Das muss man schon umschreiben(können), um den Fehler zu finden(, dessen Ursache aber woanders liegt)
 

flopalko

Bekanntes Mitglied
Ich verstehe echt nicht wie ihr noch nicht die Geduld verloren habt. Die Antwort von @Heyoka955 auf @kneitzel s ausführliche und gute Hilfe ist eine Frechheit sondergleichen. So jemand hat keine Hilfe mehr verdient.

@Heyoka955 bezüglich der Frage ob du deinen Account löschen sollst. Ja bitte! Weiters steig aus dein Studium aus, das wird nix...
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Ach, Du hast nur das @Heyoka955-Prinzip noch nicht verstanden:

Die Kurzform: "Treibe die Massen an den Rande eines Nervenzusammenbruchs, dann wird die Lösung zu Dir kommen." (weil irgendjemand entnervt aufgibt und die Lösung postet :p)

LOL, ja, das Schlimme ist, dass es prinzipiell funktioniert.

Ich habe den Code von Ihm ja kurz getestet und den Fehler behoben. Und dann habe ich eben etwas Zeit investiert und einige Refactorings gemacht. Habe jetzt hier auch eine Lösung mit zwei Enums für Befehle und Feldinhalte ("Magic Constants" eliminieren. Ständig dieses 'f','b','n','e', .... schlimm. Vor allem änder das mal! Statt f für forward will ich ein v für vorwärts oder so... Und da ist dann auch die Umwandlung schöner, weil man keine switch/if Konstrukte mehr braucht...) Die Map ist nun eine eigene Klasse (ItemMap) die halt Position (eigene Klasse, ohne Setter für x und y, damit niemand die HashCodes zerhauen kann!) und FeldInhalt intern in einer HashMap speichert. Meine ItemMap hat paar 08/15 Funktionen (get, put, remove) und auch ein move (get + put mit neuer Position). Und dann natürlich viele nette Funktionen mit netten Namen, damit da nicht viele Ebenen vorkommen und so...
JavaDoc Kommentare muss ich nicht erst erwähnen, oder?
Und Variablennamen dürfen auch durchaus mehr wie ein Zeichen lang sein :)

Aber ich warte erst einmal, bis er das Problem behoben hat, dann bringe ich ihm evtl. Ausschnitte. Wenn er es auch so haben will, dann müsste er sich die Grundlagen erarbeiten um z.B. die Map Klasse selbst zu schreiben. Aber ich bezweifle, dass es zu sowas kommen wird.
 
K

kneitzel

Gast
Java:
 else if (get(mars, p).equals("s") && !get(mars, new int[] {p[0],p[1]+1}).equals("#"))
Das ist der Coode an besagter Stelle. Für mich ist das "worst practise", da eine anzahl Anweisungen in einer Zeile stehen. Das muss man schon umschreiben(können), um den Fehler zu finden(, dessen Ursache aber woanders liegt)

Naja.... der ganze Code ist extrem mies. Ich habe jetzt einen direkten Vergleich zu einer ersten Lösung von mir, die aber auch noch nicht perfekt ist. Aber es reicht erst einmal :)

Also diese ganzen ifs innerhalb einer Switch Anweisung .. krass ... und das kann relativ einfach sein. Also paar kleine Ausschnitte (die @Heyoka955 ignorieren sollte, da er da so ohne weiteres nicht hin kommt):
Java:
    /**
     * Handles a given command.
     * @param command to handle.
     */
    public static void handleCommand(Command command) {
        FieldContent roverDirection = map.get(roverPosition);
        switch (command) {
            case FORWARD:
                roverPosition = move(roverPosition, true);
                break;

            case BACKWARD:
                roverPosition = move(roverPosition, false);
                break;

            case TURN_LEFT:
                roverDirection = turnLeft(roverDirection);
                map.put(roverPosition, roverDirection);
                break;

            case TURN_RIGHT:
                roverDirection = turnRight(roverDirection);
                map.put(roverPosition, roverDirection);
                break;

            default:
                System.out.println("Unknown command: " + command);
        }
    }
Die System.out.println nerven noch, da wäre eigentlich eine Exception fällig.

Um aus den Zeichen ein Command zu bekommen, braucht man auch keinerlei ifs/switches:
Java:
package rover;

/**
 * Commands the rover understands
 */
public enum Command {
    /**
     * Move rover forward.
     */
    FORWARD('f'),

    /**
     * Move rover backwards.
     */
    BACKWARD('b'),

    /**
     * Turn rover right.
     */
    TURN_RIGHT('r'),

    /**
     * Turn rover left.
     */
    TURN_LEFT('l');

    /**
     * Command character used when submitting a command.
     */
    private char commandChar;

    /**
     * Create a new instance of Command.
     * @param commandChar Character to use to transfer the command.
     */
    Command(char commandChar) {
        this.commandChar = commandChar;
    }

    /**
     * Gets the command character ot the command.
     * @return Character used to transfer command.
     */
    public char getCommandChar() { return commandChar; }

    /**
     * Get a Command instance from a command character.
     * @param c Command character
     * @return Command instance.
     * @throws IllegalArgumentException if character is not a valid command chaarcter.
     */
    public static Command fromChar(char c) {
        for (Command command: Command.values()) {
            if (command.getCommandChar() == c) return command;
        }

        throw new IllegalArgumentException("commandChar");
    }
}

Aber solche Dinge dürften hier ja schon bekannt sein, so dass ich euch nichts Neues schreibe.

Ich verstehe echt nicht wie ihr noch nicht die Geduld verloren habt. Die Antwort von @Heyoka955 auf @kneitzel s ausführliche und gute Hilfe ist eine Frechheit sondergleichen. So jemand hat keine Hilfe mehr verdient.

@Heyoka955 bezüglich der Frage ob du deinen Account löschen sollst. Ja bitte! Weiters steig aus dein Studium aus, das wird nix...
Na, das ist etwas krass. Ich kann ja verstehen, dass man da etwas genervt ist. Geht mir ja auch nicht wirklich anders. Aber wir sehen ja auch nur einen kleinen Ausschnitt. Software Entwicklung scheint nicht der Bereich zu sein, der ihn wirklich interessiert. Und er ist nicht wirklich jemand, der gut Kommunizieren kann. Und wenn er Antworten nicht versteht und nicht nachfragen kann weil es da auch schon etwas dran hapert, dann kann sowas dabei raus kommen. Aber da würde ich nicht zu viel hinein interpretieren. Ich denke er versucht einen schnellen Weg zu gehen und merkt nicht, was für Defizite er in Wirklichkeit hat. Er sieht nur diese erste Aufgabe und will nicht mehr Zeit investieren, als unbedingt notwendig. Nur das rächt sich sehr schnell, denn das ist ja erst der Anfang....

Schauen wir einfach mal, ob er es jetzt versteht und sich da mehr rein kniet. Und wenn nicht, dann ignorieren wir so Threads einfach zukünftig.... (Aber ich habe ein dickes Fell. Ich bin ja schon froh, wenn man mich nicht wild beschimpft :) )
 
K

kneitzel

Gast
Oh mann ... jetzt muss ich mir meinen eigenen Code um die Ohren hauen. c? Was ist c für eine Variable?
Musstest Du mir mit Deinem Quote meinen eigenen Code vor Augen führen?
:)

Edit: Vor allem: In der Exception habe ich den Namen des Parameters so, wie ich ihn eigentlich nennen wollte. Also irgendwie muss ich da richtig gepennt haben.
 
K

kneitzel

Gast
Er hat von Consultant gesprochen, aber hat er das auf Software Entwicklung präzisiert? Ich meine nicht. Und damit ist dann das ganze Spektrum offen. Und ich denke nicht, dass Software Entwicklung etwas ist, dass ihn reizt. Ansonsten hätte er sich da bereits ein entsprechendes Vorwissen angeeignet und es wäre gewisses Interesse da....

Aber wie dem auch sei: Soll mir / sollte uns eigentlich egal sein.
 

flopalko

Bekanntes Mitglied
Er hat von Consultant gesprochen, aber hat er das auf Software Entwicklung präzisiert? Ich meine nicht. Und damit ist dann das ganze Spektrum offen. Und ich denke nicht, dass Software Entwicklung etwas ist, dass ihn reizt. Ansonsten hätte er sich da bereits ein entsprechendes Vorwissen angeeignet und es wäre gewisses Interesse da....

Aber wie dem auch sei: Soll mir / sollte uns eigentlich egal sein.
Ich dachte schon. Ich meine er hat auch irgendwo davon gesprochen als Werkstudent nebenbei wo in der Software Entwicklung zu beginnen. Tut mir leid, falls ich das falsch in Erinnerung habe.
Prinzipiell hast du recht und es sollte uns egal sein, durch diesen Thread ist es mir das aber nicht. Wenn ich mir vorstelle, dass er mein Kollege ist kommt mir das Grauen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
M Mein erstes Java Programm Java Basics - Anfänger-Themen 5
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
J Bald erstes Java Buch durchgearbeitet - Wie gehts nun weiter? Java Basics - Anfänger-Themen 6
B erstes Java-Applet Java Basics - Anfänger-Themen 7
G Erstes Java-Programm Java Basics - Anfänger-Themen 10
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben