H
Heyoka955
Gast
Kann mir einer erklären wie ich den Code schöner schreiben kann?
ich weiß dass else bedinungen nicht schön sein sollen, daher würde ich das gerne ändern
ich weiß dass else bedinungen nicht schön sein sollen, daher würde ich das gerne ändern
Java:
for (int j = 0; j < max[1]; j++) {
for (int i = 0; i < max[0]; i++) {
System.out.println(i + "," + j + ": " + get(marsKarte, new int[] { i, j }));
if (get(marsKarte, new int[] { i, j }) == null) {
System.out.print(" ");
continue;
}
if (get(marsKarte, new int[] { i, j }).equals("#"))
System.out.print("#");
else if (get(marsKarte, new int[] { i, j }).equals("n"))
System.out.print("^");
else if (get(marsKarte, new int[] { i, j }).equals("s"))
System.out.print("V");
else if (get(marsKarte, new int[] { i, j }).equals("e"))
System.out.print(">");
if (get(marsKarte, new int[] { i, j }).equals("w"))
System.out.print("<");
}
System.out.println();
}
//Gesamter Code des programmes
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> marsKarte;
static int BREITE_MARSES = 80;
static int HOEHE_MARSES = 20;
static int ROVER_XPOSITION = BREITE_MARSES / 2;
static int ROVER_YPOSITION = HOEHE_MARSES / 2;
public static void erstelleKarteUndSetzeRoverInDieMitte() {
marsKarte = new LinkedHashMap<>();
for (int i = 0; i < BREITE_MARSES; i++) {
for (int j = 0; j < HOEHE_MARSES; j++) {
int[] positionVomHindernis = new int[] { i, j };
if (r.nextDouble() < 0.25 && !(ROVER_XPOSITION == i && ROVER_YPOSITION == j))
marsKarte.put(positionVomHindernis, "#"); //Füge zur LinkedHashMap die Position auf der sich ein Hindernis befindet.
}
}
marsKarte.put(new int[] {ROVER_XPOSITION , ROVER_YPOSITION }, "n"); //Erzeuge den Roboter auf den jeweiligen Positionen
}
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 printeDasFeld() {
fehlerAbfangen();
int[] max = maximum(marsKarte.keySet());
for (int j = 0; j < max[1]; j++) {
for (int i = 0; i < max[0]; i++) {
System.out.println(i + "," + j + ": " + get(marsKarte, new int[] { i, j }));
if (get(marsKarte, new int[] { i, j }) == null) {
System.out.print(" ");
continue;
}
if (get(marsKarte, new int[] { i, j }).equals("#"))
System.out.print("#");
else if (get(marsKarte, new int[] { i, j }).equals("n"))
System.out.print("^");
else if (get(marsKarte, new int[] { i, j }).equals("s"))
System.out.print("V");
else if (get(marsKarte, new int[] { i, j }).equals("e"))
System.out.print(">");
if (get(marsKarte, new int[] { i, j }).equals("w"))
System.out.print("<");
}
System.out.println();
}
ausgabeAbgrenzungVomMars(max); //Die Codebefehle hab ich in eine neue Methode geändert.
}
public static void ausgabeAbgrenzungVomMars(int[] max){
for (int i = 0; i < max[0]; i++) { //Dient zur Trennung und Abgrenzung der unteren und oberen Grenze der Marskarte
System.out.print("=");
}
System.out.println();
}
public static void fehlerAbfangen(){
Set<int[]> keySet = marsKarte.keySet();
for (int[] e : keySet) {
if (e[0] == 39 && e[1] == 10)
System.err.println(marsKarte.get(e) + " " + e.hashCode());
}
}
public static void main(String[] args) {
if (args.length > 1) {
long seed = Long.parseLong(args[1]);
r.setSeed(seed);
// System.out.println("Seed: " + seed);
}
erstelleKarteUndSetzeRoverInDieMitte();
String pg = args[0];
printeDasFeld();
for (int i = 0; i < pg.length(); i++) {
make(pg.charAt(i));
printeDasFeld();
}
}
public static void make(char c) {
if (c == 'f') {
int[] p = findeRover();
if (get(marsKarte, p).equals("n"))
p[1]--;
else if (get(marsKarte, p).equals("s"))
p[1]++;
else if (get(marsKarte, p).equals("e"))
p[0]++;
else if (get(marsKarte, p).equals("w"))
p[0]--;
} else if (c == 'b') {
int[] p = findeRover();
if (get(marsKarte, p).equals("s"))
p[1]--;
else if (get(marsKarte, p).equals("n"))
p[1]++;
else if (get(marsKarte, p).equals("w"))
p[0]++;
else if (get(marsKarte, p).equals("e"))
p[0]--;
} else if (c == 'l') {
int[] p = findeRover();
if (get(marsKarte, p).equals("n"))
marsKarte.put(p, "w");
else if (get(marsKarte, p).equals("s"))
marsKarte.put(p, "e");
else if (get(marsKarte, p).equals("e"))
marsKarte.put(p, "n");
else if (get(marsKarte, p).equals("w"))
marsKarte.put(p, "s");
} else if (c == 'r') {
int[] p = findeRover();
if (get(marsKarte, p).equals("w"))
marsKarte.put(p, "n");
else if (get(marsKarte, p).equals("e"))
marsKarte.put(p, "s");
else if (get(marsKarte, p).equals("n"))
marsKarte.put(p, "e");
else if (get(marsKarte, p).equals("s"))
marsKarte.put(p, "w");
}
}
private static int[] findeRover() {
Set<Entry<int[], String>> entrySet = marsKarte.entrySet();
for (Entry<int[], String> entry : entrySet) {
if (entry.getValue() != null && !entry.getValue().equals("#"))
return entry.getKey();
}
throw new IllegalStateException("Rover missing in action");
}
}