fehlermeldung

  • Themenstarter Themenstarter Heyoka955
  • Beginndatum Beginndatum
H

Heyoka955

Gast
ich kriege dauernd eine Fehlermeldung, ich versuche hier zwei Objekte herzustellen die einen Integer als Instanz haben, wir dürfen leider keine primiten Datentypen verwenden daher muss ich alles wrappen.

Ich habe zwei Objekte laenge und breite jeweils von denen haben einen gewrappten Integer und ich kriege leider eine Fehlermeldung. Wie kann ich diesen fehler beheben

Ich will diese zwei Objekte in der karte als parameter übergeben. Ich darf in der klasse mars leider nur eine Instanzvatiabe machen und das ist die jene datenstruktur.

Wir sollen nach objekt calisthenics programmieren.
 
Java:
public class Startk {

  public static void main(String[] args) {
    
      
    Mars karte = new Mars(new Breite(80),new Laenge(20)); //erstelle das Objekt mars mit jeweiligen lange und breite für die koordiaten.
    //karte.erstelleKarte();
    
  }

}
class Koordinaten{
     Breite breite;
     Laenge laenge;
    
    
    public Koordinaten(Breite breite, Laenge laenge){
        this.breite = breite;
        this.laenge = laenge;
        
    }
    
    
}

class Mars extends Koordinaten{
    // eine private Datenstruktur die ein 2d Spielfeld erzeugen kann als Attribut
    
    
    
    public Mars(Breite breite, Laenge laenge){
        this.breite = breite;
        this.laenge = laenge;
        
    }
    
        
    
    
    
}
class Breite{
    Integer breite;
    
    public Breite(Integer breite){
        this.breite = breite;
        
        
    }
    
    
    
}

class Laenge{
    Integer laenge;
    
    public Laenge(Integer laenge){
        this.laenge = laenge;
        
        
    }
    
    
    
}


// ich habe alles in einer klasse verpackt, werde es aber später umändern

11955
 
Du musst in Mars den Konstruktor der Superklasse (Koordinaten) aufrufen.
Wobei ich mich Frage warum Mars von Koordinaten erbt.
 
wir müssen uns erstmal an diese regeln halten: https://williamdurand.fr/2013/06/03/object-calisthenics/

Code:
== Aufgabenstellung
Sie sollen einen Rover wie in Projekt 1 unter Beachtung der in aufgeführten Regeln umsetzen. Der Rover soll auf der Oberfläche eines mit Hindernissen übersähten Planeten fahren können, ohne mit einem Hindernis zu kollidieren. Im Gegensatz zu Projekt 1 wollen wir folgende Vereinfachungen annehmen:

1 Der Roboter muss nur geradeaus fahren
2 Der Rover muss sich nur im Uhrzeigersinn drehen können.
3 Der Rover bekommt sein Programm nicht als Text übergeben, sondern wird durch Methodenaufrufe gesteuert.
4 Die Ausgabe der Welt mit dem Rover soll ähnlich wie in Projekt 1 aussehen, muss aber nicht automatisch nach jedem Kommando erfolgen, sondern kann auch explizit per Methodenaufruf gestartet werden.
5 Etwa 25% der Planetenoberfläche sind mit Hindernissen belegt. Sie können das per Zufall generieren oder fest einkodieren. Wenn Sie einen Zufallsgenerator verwenden ist es *nicht* notwendig, einen Seed (wie in Projekt 1) setzen zu können.
6 Der Rover darf nicht über Hindernisse fahren.

Punkt 1 und 2 sind keine Einschränkung der Handlungsfähigkeit des Rovers, da eine Implementierung der anderen Kommandos trivialerweise aus den vorgegebenen Kommandos abgeleitet werden kann (z.B. rückwärts = 2 Drehungen, vorwärts, zwei Drehungen)

Wie Sie mit Punkt 3 und 4 umgehen, hängt von Ihrer Implementierung ab. Es muss irgendwo in ihrem Programm die Möglichkeit geben den Rover per Methodenaufruf zu bewegen bzw. zu drehen. Außerdem muss es möglich sein, den Planeten mit dem Rover per Methodenaufruf auszugeben. Implementieren Sie eine Beispielsequenz, die den Rover bewegt und den Planeten ausgibt in der main Methode des Programms.

/CODE]


Mein Ansatz sieht folgend aus,

ich erstelle in der main Methode die karte als ein objekt und im objekt wird jene datenstruktur als instanzvariable initialisiert, die das Feld realisiert, ich weiß leider nicht welches es sein soll.
und da ich für das Feld, die größe benötige, brauche ich breite und laenge aber da ich nicht mehr als zwei instanzen machen darf, muss ich halt erben.
das ist mein bisheriger ansatz.
 
und da ich für das Feld, die größe benötige, brauche ich breite und laenge aber da ich nicht mehr als zwei instanzen machen darf, muss ich halt erben.
Nein. Der Mars hat eine Koordinate. Du sagst gerade, dass der Mars eine Koordinate ist.
Java:
class Koordinate {
      Breite breite;
      Laenge lange;
}
class Mars {
    Koordinate koordinate;
}
 
Nein. Der Mars hat eine Koordinate. Du sagst gerade, dass der Mars eine Koordinate ist.
Java:
class Koordinate {
      Breite breite;
      Laenge lange;
}
class Mars {
    Koordinate koordinate;
}
Verstehe, geht der Ansatz von mir in die richtige Richtung schon?

Okay wenn ich es so machen soll, wie speichere ich dann die Datenstruktur die für die Karte zuständig ist!

Wir dürfen falls wir eine Datenstruktur als Attribut einer Klasse wählen sollen, keine anderen Attribute mehr schreiben.
Deswegen wollte ich das vererben.
 
Okay dann würde ich es so gestalten
:

Class Mars{
Private linkedlist karte = new linkedlist()..;

Public void erstelle(){
Breite breite = new breite(new Integer(80));

Laenge laenge = new laenge(new Integer(20));

//for schleife durchgehen und an jeweilige Position hinzufügen.

}


}



}

Kurz Als Pseudo Code?
 
Mars, Rover, Heyoka955... Dejavu.

Bevor Du zu programmieren beginnst, solltest Du Dir ein Modell überlegen.
Habe ich nur bis gewissen Grad. Also
Ich habe zwei Ideen.

Einmal in Form eines streams also ich lese die Karte als eine Text Datei in eine Datenstruktur ein und dann habe ich in der Datenstruktur die Hindernisse und freienflachen gespeichert.

Nachdem ich das gemacht habe mache ich einen Rover mit einem
Wrapper Chary

Diesen Rover versuche ich dann in der Mitte der Text Datei zu platzieren wo die freie Stelle ist.

Das gute ist wir dürfen die Karte selbst festlegen oder Zufalls Generator.

Meine Idee wären für den Anfang so.
Ich will das nicht zu Ende ausdenken denn ich Muss wissen ob das machbar wäre.

Ich würde dann nur mit streams arbeiten
 
Das ist kein Modell. Du musst Dir überlegen, welche Objekte bzw. Klassen Du brauchst, um das Problem objektorientiert zu beschreiben. Es geht zunächst einmal darum, geeignete Abstraktionen zu finden, deren Aufgaben und Zusammenspiel zu verstehen.

Abgesehen davon: was ist denn die Breite/Länge einer Koordinate?
 
Das ist kein Modell. Du musst Dir überlegen, welche Objekte bzw. Klassen Du brauchst, um das Problem objektorientiert zu beschreiben. Es geht zunächst einmal darum, geeignete Abstraktionen zu finden, deren Aufgaben und Zusammenspiel zu verstehen.

Abgesehen davon: was ist denn die Breite/Länge einer Koordinate?
Die Breite und laenge des Feldes.

Ich könnte das in Komponenten aufteilen

also eine Klasse namens mars und in der Klasse wird das spielfeld gespeichert und hergestellt.
 
Zuletzt bearbeitet von einem Moderator:
Ja Koordinate war überflüssig!!!
Das meinte ich nicht. Du wirst vermutlich Koordinaten brauchen, z. B. um die Position des Rovers anzugeben. Worum es mir ging: wenn eine Koordinate eine Position angibt, warum heißen die Attribute der Koordinate dann breite/laenge und wofür stehen die Klassen Breite und Laenge? Das gibt alles keinen Sinn.
 
Das meinte ich nicht. Du wirst vermutlich Koordinaten brauchen, z. B. um die Position des Rovers anzugeben. Worum es mir ging: wenn eine Koordinate eine Position angibt, warum heißen die Attribute der Koordinate dann breite/laenge und wofür stehen die Klassen Breite und Laenge? Das gibt alles keinen Sinn.
Deswegen, denke habe da drauf losgelegt.

Ich will die Breite des Feldes und dir lange bestimmen.

Und dafür bräuchte ich keine Koordinate es hätte gereicht wenn ich nur.


Class {
Private liste;

Public void(){
Breite b = new breite();
Laenge l = new laenge;
}

Ich könnte die Breite in der Methode initliaieren das für das erschaffen der Karte wäre.



}

Es sollte nicht Koordinate heißen aber ich hatte keinen anderen Namen gefundn.
 
Zuletzt bearbeitet von einem Moderator:
Du definierst einen Datentyp Breite und einen Datentyp Länge. Frage: was ist der Unterschied zwischen diesen Datentypen?

Ich kann keinen Unterschied (außer dem Namen) erkennen. Das Konzept ist das gleiche: eine Länge(nangabe). Daher die Frage: wozu brauchst Du verschiedene Datentypen?
 
Du definierst einen Datentyp Breite und einen Datentyp Länge. Frage: was ist der Unterschied zwischen diesen Datentypen?

Ich kann keinen Unterschied (außer dem Namen) erkennen. Das Konzept ist das gleiche: eine Länge(nangabe). Daher die Frage: wozu brauchst Du verschiedene Datentypen?
Weil wir keine primitive Datentypen verwenden dürfen!

Wir müssen alles wrappen.

Wenn es das ist worauf du hinaus wolltest
 
Ich habe nichts von primitiven Datentypen geschrieben.

Warum brauchst Du einen Datentyp für die Breite und einen anderen Datentyp für die Länge?
Weil wir für die laenge und breite datentypen herstellen soll. Es reicht nicht wenn wir nur Wrapper klasse von Typ ihr verwenden. Mit dem Datentyp muss klar sein wozu der steht und die Aufgabe

Ansonsten weiß ich leider nicht worauf du hinaus willst
 
Ich habe auch einen Datentyp "modeliert": den Strich --> ---
guck mal was ich damit alles machen kann:

----
| |
| |
| |
----

Spontan würde ich sagen, das mihe ungefähr darauf raus will
 
Jaaaaa 🙂 Es ist unglaublich.

Ich würde ja sagen, dass ich euch bemitleide. Aber ich helfe euch, denn ich habe einen Code-Generator gebaut. Der baut für Ihn eine Lösung mit ganz vielen Klassen: Breite1, Breite2, Breite3, ..., Breite1000, Hoehe1, Hoehe2, .... Hoehe1000.
Und dann natürlich noch 1.0000.000 Klassen mi RoverAufXUndY wobei X und Y jeweils von 1...1000 gehen.

Und dann gibt es noch Code, der ein Textfile mit Hindernissen einliest und daraus dann Klassen Erzeugt: HindernisAufXUndY - so da halt auf der Kooridnate X,Y ein Hindernis war.

Ich denke, da haben wir dann eine sehr gute Lösung ... Objektorientiert heißt doch, dass man ein Problem in viele Klassen unterteilen soll...

Und jetzt muss man eigentlich gar keine Instanz mehr erzeugen ... Ach Mist ... Objektorientiert könnte ja bedeuten, dass man auch Objekte erzeugen sollte ... egal!

Und von euch darf jetzt nur keiner Anmerken, dass das Laden einer Klasse ja auch eine Instanz erzeugt. Das wäre gemein und würde meine schöne Lösungsidee zunichte machen...

Und jetzt wäre meine Frage: Ist einer von euch so verrückt, Mal eine Lösung mit diesem Ansatz zu probieren? Mit Reflection sollte das ja gehen... Statt einer Position wird dann halt nur eine Referenz auf eine Klasse geladen. Die Nachbarn und so sind dann halt per String Operationen zu ermitteln ...

UPS ... ich merke gerade ... Rover hat ja nicht nur eine Koordinate sondern auch noch eine Richtung. Also werden das dann 4.000.000 Klassen, die generiert werden müssen (Also Rover<X>Und<Y><Richtung> mit <X> und <Y> halt mögliche Koordinaten und <Richtung> eine Richtungsangabe wie Oben, Unten, Rechts, Links oder so .... Aber evtl. schränken wir uns einfach ein auf eine Karte von 10x10 oder so ... dann muss man weniger generieren ....
 
@Heyoka955 Aber jetzt auch noch einmal ganz kurz an Dich gerichtet:
Der andere Post war mehr als Spass, aber er zeigt ganz überspitzt, wie es eben nicht geht und dass gewisse Dinge Unsinn sind....

Also ehe man irgend etwas entwickelt, muss man sich einen genauen Überblick über den Problembereich machen. Was für Daten werden verwaltet? Was muss mit Ihnen gemacht werden?

Wenn man da eine genaue Vorstellung hat (aber wirklich eine genaue Vorstellung!), dann kann man hingehen und den Problembereich unterteilen. Das wird dann eine Unterteilung in Objekte. Die Objekte haben dann einen gewissen Status (Daten) und gewisse Operationen (man kann etwas mit Ihnen machen). Das findet aber alles noch rein theoretisch statt. Es wird nicht eine Zeile Code geschrieben!

Das Ganze kann man dann irgendwie dokumentieren. Da gab es dann ganz kluge Köpfe (wie z.B. die drei Amigos: Grady Booch mit seiner "booch method" , Ivar Jacobson (Use Cases als Grundlage der Entwicklung) und James Rumbaugh (Object Modeling Technique OMT)) die dich da auch viele Gedanken gemacht haben (Und bezüglich der drei Amigos: dann auch zusammen UML entwickelt haben).
==> Es gibt also auch Möglichkeiten das richtig nach klaren Regeln zu beschreiben. Das muss aber nicht sein. Aber es muss ein klares Verständnis des Problembereichs geben und auch eine klare Übersicht bezüglich der Gliederung / Aufteilung.

Dann, aber auch nur dann, kann man etwas sauber implementieren.

Und so Aussagen von wegen "nur zwei Instanzen" sind lustig. Ich hoffe, das ist nicht so vom Dozenten gesagt worden. Ich habe jetzt nicht nachgelesen, aber es sollte klar sein, dass es mit Start der Java VM schon ganz viele Instanzen gibt ... Und jede Klasse, die du schreibst und dann nutzt, wird vom ClassLoader geladen => eine Instanz wird erzeugt. Aber egal. Ich bin mal gespannt, was Du für eine Zeichnung erstellt hast ...
 
Und so Aussagen von wegen "nur zwei Instanzen" sind lustig. Ich hoffe, das ist nicht so vom Dozenten gesagt worden. Ich habe jetzt nicht nachgelesen, aber es sollte klar sein, dass es mit Start der Java VM schon ganz viele Instanzen gibt ... Und jede Klasse, die du schreibst und dann nutzt, wird vom ClassLoader geladen => eine Instanz wird erzeugt. Aber egal. Ich bin mal gespannt, was Du für eine Zeichnung erstellt hast ...
Dies meint er:
https://williamdurand.fr/2013/06/03/object-calisthenics/ hat gesagt.:
8. No Classes With More Than Two Instance Variables
 
Das Abstraktionsniveau ist höher, wenn Du gleiche/ähnliche Konzepte erkennst und diese zu einer Klasse zusammenfasst. Man darf aber auch nicht zu abstrakt werden.
Ich hatte das erkannt aber wollte es trennen weil ich dachte es wäre sinnvoller. Mein Problem ist eher wie ich die Klasse Schritte und Drehung machen soll?
 

Zurück
Oben