java erstes projekt

Bitte aktiviere JavaScript!
hallo wir haben ein fast gefertigtes Programm bekommen und das Programm hat einen kleinen bug auf den ich später eingehen möchte.
Unsere aufgabe ist es sauberen Code zu schreiben bzw. Die regeln der calistenics anzuwenden.
und ich hätte eine frage zum auszug eines codes?
Was macht genau die Methode init?
Das ist nur eine Methode vom Programm, ich wollte schritt für schritt das Programm durchgehen.
Ich weiß nicht ob ich ehe rmit der aufgabe 1 anfangen soll oder zwei?

die aufgabe lautet:
Sie bekommen ein Programm, das einen Roboter über den Mars steuert. Das Programm wird mit ./gradlew run --args="<INSTRUKTIONEN>" aufgerufen.

Auf der Oberfläche werden zufällig Hindernisse platziert. Die Instruktionen sind eine Sequenz von Buchstaben, die den Roboter steuern. Gültige Buchstaben sind:

  • l - Dreht den Rover gegen den Uhrzeigersinn (left)
  • r - Dreht den Rover mit dem Uhrzeigersinn (right)
  • f - Bewegt den Rover einen Schritt vorwärts (forward)
  • b - Bewegt den Rover einen Schritt rückwärts (backward)
Ein Beispiel für eine Kontrollsequenz, bei der der Rover zwei Schritte vorwärts macht, sich im Uhrzeiger dreht und dann zwei Schritte rückwärts moonwalkt wäre ffrbb.

Der Aufruf wäre entsprechend: ./gradlew run --args="ffrbb"

Das Programm gibt eine Karte des Planeten nach jedem Schritt aus. Hindernisse sind mit # markiert und der Rover durch einen Pfeil.





Java:
static Random r = new Random();
    static LinkedHashMap<int[], String> mars;
    static int x = 80;
    static int y = 20;
    static int rx = x / 2;
    static int ry = y / 2;

    public static void init() {
        mars = new LinkedHashMap<>();
        
        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");
    }
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Was ist das für eine Sekte?
ahahahaha ich sterbe
es geht um sauber Code zu schreiben und es geht um 10 regeln. und bevor ich damit anfangen möchte brauche ich hilfe für den Code.
Das Problem ist ich verstehe nicht ganz was der auschnitt macht. Mein verdacht ist dass die linked list das Feld bildet vom Mars und jeweilige Stellen von den Hindernisse ausrechnet. und die variablen ry und rx dienen für die Position des roboters

 
Was unheimlich hilft, um sauberen Code zu schreiben, ist generell lesbar zu schreiben (und auf das erfinden merkwürdiger Wörter zu verzichten.)


Mein verdacht ist dass die linked list das Feld bildet vom Mars
In dem Code kommt keine LinkedList vor.

und jeweilige Stellen von den Hindernisse ausrechnet. und die variablen ry und rx dienen für die Position des roboters
Das ist vermutlich richtig (zumindest, wenn '#' ein Hindernis sein soll und 'n' der Roboter.)
 
ahahahaha ich sterbe
es geht um sauber Code zu schreiben und es geht um 10 regeln. und bevor ich damit anfangen möchte brauche ich hilfe für den Code.
Das Problem ist ich verstehe nicht ganz was der auschnitt macht. Mein verdacht ist dass die linked list das Feld bildet vom Mars und jeweilige Stellen von den Hindernisse ausrechnet. und die variablen ry und rx dienen für die Position des roboters
ich schicke dir den ganzen code, ich soll die namen so umändern dass man direkt versteht worum es geht bei den variablen und methoden. Also sorry meinte hashmap.
Es geht mur um die erste Methode. also verstehe ich die richtig?

Java:
import java.util.Random;
import java.util.Set;

public class Start {

    static Random r = new Random();
    static LinkedHashMap<int[], String> mars;
    static int x = 80;
    static int y = 20;
    static int rx = x / 2;
    static int ry = y / 2;

    public static void erzeugHindernisse() {
        mars = new LinkedHashMap<>();
        
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                int[] positionVomHindernis = new int[] { i, j };
                if (r.nextDouble() < 0.25 && !(rx == i && ry == j))
                    mars.put(positionVomHindernis, "#"); //Füge zur HashMap die position auf der Sich ein Hindernis befindet.
            }
        }
        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[] positionVomHindernis) {
        Set<Entry<int[], String>> entrySet = kloetze.entrySet();
        for (Entry<int[], String> entry : entrySet) {
            if (entry.getKey()[0] == positionVomHindernis[0] && entry.getKey()[1] == positionVomHindernis[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);
        }
        erzeugHindernisse();
        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"))
                p[1]--;
            else if (get(mars, p).equals("s"))
                p[1]++;
            else if (get(mars, p).equals("e"))
                p[0]++;
            else if (get(mars, p).equals("w"))
                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");
    }

}
 
ahahahaha ich sterbe
es geht um sauber Code zu schreiben und es geht um 10 regeln. und bevor ich damit anfangen möchte brauche ich hilfe für den Code.
Das Problem ist ich verstehe nicht ganz was der auschnitt macht. Mein verdacht ist dass die linked list das Feld bildet vom Mars und jeweilige Stellen von den Hindernisse ausrechnet. und die variablen ry und rx dienen für die Position des roboters
ich schicke dir den ganzen code
Dich selbst zu zitieren und darauf mit "dir" zu antworten entbehrt nicht einer gewissen Ironie....

Also sorry meinte hashmap.
Es ist eine LinkedHashMap, nicht "nur" eine HashMap.

ich soll die namen so umändern dass man direkt versteht worum es geht bei den variablen und methoden. [...]
Es geht mur um die erste Methode. also verstehe ich die richtig?
Die Methode erzeugt nicht nur Hindernisse, sondern fügt auch den Roboter hinzu.
 
und es geht um 10 regeln.
Die 10 Gebote, sauberen Code zu schreiben - also doch eine Sekte.
  1. Du sollst keine anderen Einrückungen neben mir haben
  2. Du sollst nicht begehren Else's Schlüsselwort
  3. Du sollst Objekte heiligen.
  4. Du sollst Collections ehren, auf dass sie ein Zuhause haben.
  5. Du sollst nicht das Gesetz von Demeter brechen
  6. Du sollst nicht falsch Abkürzungen verwenden wider besserer Namen
  7. Du sollst keine großen Entities haben
  8. Du sollst nicht begehren Objekte mit mehr als zwei Feldern
  9. Du sollst nicht stehlen Deines Objekts Zuständigkeit.
  10. Du sollst mir keinen Link zusenden, der nur 9 Gebote nennt.
 
Breite??? Arrays haben immer nur eine Länge... und mehrdimensionale können mehrere Längen haben. :rolleyes:
ne ich meinte also höhe von y und lange hahah, tippe zu schnell. Also ich würde dir dann meinen sauberen Code mit Kommentar dazu schreiben.Ich überlege ob ich die zeile die den Roboter erstellt in eine neue Methode umänder? aber macht wenig Sinn, weil die beiden zum Feld gehören.
Java:
    static Random r = new Random();
    static LinkedHashMap<int[], String> mars;
    static int X_LAENGE = 80;              //Die Länge des Arrays.           
    static int Y_HOEHE = 20;            // die Höhe des Arrays
    static int ROBOT_XPOSITION = X_LAENGE / 2;   //Variablen statisch außerhalb der Klasseb gemacht, falls man später darauf zugreifen möchte.
    static int ROBOT_YPOSITION = Y_HOEHE / 2;

    public static void erzeugeDasFeld() {
        mars = new LinkedHashMap<>();
        
        for (int i = 0; i < X_LAENGE; i++) {
            for (int j = 0; j < Y_HOEHE; j++) {
                int[] positionVomHindernis = new int[] { i, j };
                if (r.nextDouble() < 0.25 && !(ROBOT_XPOSITION == i && ROBOT_YPOSITION == j))
                    mars.put(positionVomHindernis, "#"); //Füge zur HashMap die Position auf der Sich ein Hindernis befindet.
            }
        }
        mars.put(new int[] {ROBOT_XPOSITION , ROBOT_YPOSITION }, "n"); //Erzeuge den Roboter auf den jeweiligen Positionen
    }
 
ja klar sondern eine linkedhashmap aber wie soll ich die variable den umnennen?
Wozu ist denn diese LinkedHashMap da? Was wird gespeichert?

also wie findest du den Code?
Indem ich mir Kommentar #14 auf den Schirm hole.

denkst du man kann das noch schöner schreiben?
Die Frage ist: denkst Du, dass Du das noch schöner schreiben kannst?
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben