Flugzeugsimulator

snipesss

Mitglied
Also ich habe in meinem Buch die Aufgabe bekommen ein Programm zu schreiben welches einen Flug simuliert. Jetzt wollte ich fragen, ob der Code "sauber" programmiert worden ist, und ob er auch richtig ist bzw. was ich daran ändern könnte.

Die Flugzeugklasse:
Java:
package Flugsimulator; 

class Flugzeug {
   
    String typ;
    int turbinen;
    int spannWeite;
    int maxGeschw;
   
    Koord position;
    int höhe;
    int aktuelleGeschw;
   
    Flugzeug(int maxGeschw){
       
        this.maxGeschw = maxGeschw;
       
        position = new Koord(0,0);
        höhe = 0;
        aktuelleGeschw = 0;
    }
   
    void abheben(int flugHöhe){
        if(flugHöhe > 60){
            System.out.println("Bitte wählen Sie eine Höhe unter 60!");
        }
       
        else{
            System.out.println("Ihr Flugzeug ist erfolgreich abgehoben!");
        }
    }

    void fliegen(int x_koord, int y_koord){
        if(x_koord == 70 &&
          y_koord == 30 ||
         
          x_koord == 50 &&
          y_koord == 90 ||
         
          x_koord == 45 &&
          y_koord == 10){
            System.out.println("Ihr Flugzeug ist in einer der drei Wassertürme geflogen!");
        }
       
        else
            System.out.println("Ihr Flugzeug fliegt!");
    }
}

Die Koord Klasse:
Java:
package Flugsimulator;

class Koord{
    int x;
    int y;
   
    Koord(int x, int y){
        this.x = x;
        this.y = y;
        }
    }
Die Wasserturm Klasse:
Java:
package Flugsimulator;

class Wasserturm {
   
    Koord position;
    int breite;
    int höhe;
    int tiefe;
   
    Wasserturm(Koord pos, int b, int h, int t){
        this.position = pos;
        this.breite = b;
        this.höhe = h;
        this.tiefe = t;
    }
}
Die Simulator Klasse:
Java:
package Flugsimulator;

public class Simulator {
    public static void main(String[] args){
       
        Flugzeug flugezeug1 = new Flugzeug(300);
        Wasserturm turm1 = new Wasserturm(new Koord(70,30), 30, 60, 15);
        Wasserturm turm2 = new Wasserturm(new Koord(50,90), 15, 60, 30);
        Wasserturm turm3 = new Wasserturm(new Koord(45,10), 50, 17, 56);
       
        flugezeug1.abheben(50);
        flugezeug1.fliegen(45, 10);
    }
}
 

InfectedBytes

Top Contributor
Hab mir den Code jetzt nicht inhaltlich angeguckt, sondern nur die Sauberkeit...und diese ist leider eher schlecht. Habs nur überflogen und sofort fällt folgendes auf:
Sichtbarkeit so gering wie möglich halten, d.h. wenn möglich private.
Variablen bei Bedarf mit getter/setter öffentlich machen
Java:
if(x_koord ==70&&
          y_koord ==30||
        
          x_koord ==50&&
          y_koord ==90||
        
          x_koord ==45&&
          y_koord ==10){
           System.out.println("Ihr Flugzeug ist in einer der drei Wassertürme geflogen!");
       }
else {
...
Es ist sehr unübersichtlich die if-Bedingung über mehrere Zeilen und sogar noch mit leer zeilen zu verteilen, zumal die Bedingung eigentlich sehr einfach und kurz ist.
Das else bitte in die gleiche Zeile wie die schließende Klammer } (zugegeben es ist Geschmackssache^^)

Umlaute sollte man als Bezeichner vermeiden, ansonsten ist es im Allgemeinen lieber gesehen, wenn der Code auf Englisch geschrieben wird.
 

InfectedBytes

Top Contributor
Ach und eine inhaltliche Sache:
Du erzeugst Wasserturm objekte mit Koordinaten, benutzt diese aber überhaupt nicht. Stattdessen prüfst du in deiner if-Bedingung manuell ob die Koordinaten gleich sind. Sinnvollerweise solltest du hier mit den Koordinaten der Wassertürme arbeiten. Könntest du quasi wie folgt besser machen:
Java:
void fliegen(Koord koord) {
  for(Wasserturm turm : wassertuerme) {
    if(turm.getKoord().equals(koord)) {
      // kollision!
    }
  }
}
 

snipesss

Mitglied
Ach und eine inhaltliche Sache:
Du erzeugst Wasserturm objekte mit Koordinaten, benutzt diese aber überhaupt nicht. Stattdessen prüfst du in deiner if-Bedingung manuell ob die Koordinaten gleich sind. Sinnvollerweise solltest du hier mit den Koordinaten der Wassertürme arbeiten. Könntest du quasi wie folgt besser machen:
Java:
void fliegen(Koord koord) {
  for(Wasserturm turm : wassertuerme) {
    if(turm.getKoord().equals(koord)) {
      // kollision!
    }
  }
}
Sonst ist er Inhaltlich ok?
 

InfectedBytes

Top Contributor
naja, nicht wirklich du definierst zwar eine Koord und Wasserturm klasse, benutzt effektiv aber nichts davon. Zudem haben die Wassertürme eine breite und höhe, was du aber auch nicht benutzt
Die abheben und fliegen funktionen machen auch nicht so richtig Sinn, denn du änderst weder höhe, geschwindigkeit oder position. Außerdem solltest du sinnvollerweise die equals methode von deiner Koord klasse sinnvoll überschreiben.

Ansonsten müsste man mehr zur eigentlichen Aufgabenstellung wissen
 

Neue Themen


Oben