[JAXB] nutzt Standard Konstruktor nicht?

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8485
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Xin » So Okt 25, 2015 9:46 pm

Zenerid hat geschrieben:Ich will ja nur ein Array der Größe 4 anlegen aber er legt ja dann immer ein Array von der Größe an, die ich auch in der XML Datei angegeben habe aber er soll ja ebend immer eines der Größe 4 anlegen. Ich will eines der Größe 4 anlegen, da ich ja auch 4 Richtungen derzeit habe und wenn ich das so mache, dann habe ich bei dem ersten Index ja immer direkt den passenden Raum dazu, also in dem Fall den Raum, der in der Richtung "geradeaus" liegt.

Wenn in einer Richtung kein Raum liegt, dann ist der index an der Stelle ja ebend null aber das ist ja egal.
...und was hindert Dich daran, dort einfach ein Array mit 4 Elementen anzulegen?
dani93 hat geschrieben:Naja ich finde es relativ unschön Platz für Räume zu schaffen die nicht existieren aber egal.... Du kannst sie dir dann ja in eine Map speichern, um direkt über die Richtung darauf zuzugreifen.
Es ist Java. Es sind vier Zeiger. Das ist billiger als eine Verwaltungsstruktur, die regelt, welche Richtungen gültig sind... Es gibt maximal vier Richtungen, also 32 Byte und fertig.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Zenerid
Beiträge: 38
Registriert: Do Feb 05, 2015 4:15 pm

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Zenerid » So Okt 25, 2015 10:25 pm

Ich lege ja deswegen extra im Standard Konstruktor die Ausgänge für die Räume an aber irgendwie scheint das ja immer überschrieben zu werden. Mir ist jetzt nicht klar, wie ich "einfach" dafür sorgen kann, das ebend immer diese 4 Räume angelegt werden. Was meinst du mit "dort"? Sorry aber ich weiß nicht, wie ich jetzt dafür sorge.
Ich will ja jetzt auch nicht immer der Datei extra jeden Ausgang mit angeben, sondern er soll ja immer 4 automatisch (wie im Standardkonstruktor angegeben) erstellen.

Ich finde den Weg übrigens auch besser. Der andere, vielleicht schönere? Weg scheint mir auch eher kostenintensiver zu sein.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8485
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Xin » So Okt 25, 2015 11:03 pm

Zenerid hat geschrieben:Ich lege ja deswegen extra im Standard Konstruktor die Ausgänge für die Räume an aber irgendwie scheint das ja immer überschrieben zu werden. Mir ist jetzt nicht klar, wie ich "einfach" dafür sorgen kann, das ebend immer diese 4 Räume angelegt werden. Was meinst du mit "dort"? Sorry aber ich weiß nicht, wie ich jetzt dafür sorge.
Jow... und ich kapiere endlich, was das Problem ist. :-)

Die Mapper kennt die Datenstruktur "Richtung" nicht und kann deren Bedeutung nicht einschätzen. Es erstellt einfach ein Array, dass so groß ist, wie Daten vorhanden sind und der Mapper kennt auch nicht die Ordnung, die Du Dir da wünschst.
Du wirst wohl einen eigenen Typen anlegen müssen, der je einen Pointer nach Norden, Süden, Osten und Westen hat und der entsprechend in XML verklausuliert wird.
Das ist dann genauso groß wie ein Array, aber es gibt klare Ansagen, welcher Member was bedeutet gehört.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Zenerid
Beiträge: 38
Registriert: Do Feb 05, 2015 4:15 pm

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Zenerid » Mo Okt 26, 2015 12:53 am

Hmm und ich dachte erst, das du das nach meinem zweiten Post dann verstanden hattest aber okay, auch gut. ;)

Ich verstehe nicht ganz, wie du das mit dem eigenem Typen und dem Eintrag dann in der XML Datei meinst? Könntest du das eventuell veranschaulichen? Hört sich ja irgendwie nicht so schwer an aber ich habe da auch schon länger drüber nachgedacht und trotzdem keine Lösung gefunden bzw. nichts, was funktioniert hätte.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8485
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Xin » Mo Okt 26, 2015 11:07 am

Zenerid hat geschrieben:Hmm und ich dachte erst, das du das nach meinem zweiten Post dann verstanden hattest aber okay, auch gut. ;)
Ich weigere ich mich erstens Java zu programmieren und zweitens führt das dazu, dass ich die Fähigkeiten des ORM-Systems nicht kenne.
Da das Objekt dann meinetwegen mit dem Standard-Konstruktur angelegt wird, aber die Nachbarn anschließend wieder überschrieben werden, entsteht auf dem Member nachbarn anschließend ein zu kleines Array, was nicht mit auf Dein Richtungs-Enum passt, womit Du ja bei .ordinal() Dir ein bestimmtes Element aus dem Array rausholen möchtest.... richtig?
Zenerid hat geschrieben:Ich verstehe nicht ganz, wie du das mit dem eigenem Typen und dem Eintrag dann in der XML Datei meinst? Könntest du das eventuell veranschaulichen? Hört sich ja irgendwie nicht so schwer an aber ich habe da auch schon länger drüber nachgedacht und trotzdem keine Lösung gefunden bzw. nichts, was funktioniert hätte.
Du hast ein Array:

Code: Alles auswählen

 private Nachbar[] nachbarn;
Wenn wir daraus eine Klasse machen...

Code: Alles auswählen

class Nachbarn
{
  public Nachbar norden;
  public Nachbar westen;
  public Nachbar osten;
  public Nachbar sueden;

  public get( Richtung ) {}
};
und Du Deinem Raum statt Nachbar[] ein Element Nachbarn verpasst so kannst du das dem ORM-System mitteilen, dass es die Nachbarn doch bitte auch serialisieren soll.
Wenn norden jetzt null ist, dann muss da auch nix serialisiert werden. sueden wird aber immer auf Member sueden zu finden sein und nicht im Array verrutschen.

Problem richtig verstanden? Lösung praktikabel?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Zenerid
Beiträge: 38
Registriert: Do Feb 05, 2015 4:15 pm

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Zenerid » Di Okt 27, 2015 1:55 pm

Aber wenn ich dann das Array entferne, wie kann ich denn dann noch mit dem Ordinal arbeiten bzw. dem Ausgang die richtige Richtung zuordnen? Meinst du dann nachher mit

Code: Alles auswählen

public get( Richtung ) {}
,
das ich das dann für jede Richtung mache oder wie kann ich das dann noch so halten, wie ich das vorher mit dem ordinal gemacht habe?

Könnte man denn dann die Struktur in der Datei auch so beibehalten? Das war mir dann eigentlich nicht so ganz klar, was du damit meinst. Die Klasse würde dann doch so aussehen oder nicht?

Code: Alles auswählen

public class Nachbarn
{	
	public Nachbar norden;
	public Nachbar osten;
	public Nachbar sueden;
	public Nachbar westen;
	
	public Nachbarn()
	{
	}
	
	public Nachbar getNorden() { return this.norden; }
	public Nachbar getOsten()   { return this.osten;  }
	public Nachbar getSueden() { return this.sueden; }
	public Nachbar getWesten() { return this.westen; }	
	
    @XmlElement(name = "norden")
	public Nachbar setNorden(Nachbar norden) { this.norden = norden; }
    @XmlElement(name = "osten")
	public Nachbar setOsten(Nachbar osten)   { this.osten = osten;   }
    @XmlElement(name = "sueden")
	public Nachbar setSueden(Nachbar sueden) { this.sueden = sueden; }
    @XmlElement(name = "westen")
	public Nachbar setWesten(Nachbar westen) { this.westen = westen; }
}
Wie kann ich jetzt aber die Methode mit der getRichtung verallgemeinern, so das ich dann nur eine Methode brauche? Irgendwie muss ich ja jetzt den Nachbarn auch die Richtung zuordnen oder geht das so nicht?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8485
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Xin » Di Okt 27, 2015 2:29 pm

Zenerid hat geschrieben:Aber wenn ich dann das Array entferne, wie kann ich denn dann noch mit dem Ordinal arbeiten bzw. dem Ausgang die richtige Richtung zuordnen? Meinst du dann nachher mit

Code: Alles auswählen

public get( Richtung ) {}
,
das ich das dann für jede Richtung mache oder wie kann ich das dann noch so halten, wie ich das vorher mit dem ordinal gemacht habe?
In C++ würde ich Richtung ja mit einem Methodenzeiger oder noch besser einen Memberpointer ausstatten... sowas gibt's in Java aber nicht.
Also werden wir wohl etwas klassische Programmierung brauchen:

Code: Alles auswählen

Nachbar get( Richtung r )
{
  switch( r.getOrdinal() )
  {
    case 1 /* MAGIC NUMBER DURCH ENUM ERSETZEN */ : return getNorden();
    case 2: return getWesten();
    case 3: return getOsten();
    case 4: return getSueden();

    default: return null;
  }
}
Witzigerweise erlaubt Richtung hier durch den schwach limitierten Einsatz von int, dass man einen default-Fall abfangen muss. Ein Fehlerfall, der mit einem "gefährlichen" Memberpointer gar nicht möglich wäre.

Code: Alles auswählen

Nachbar & get( Richtung r )
{
  return this->**r;
}
Anwendung:

Code: Alles auswählen

Richtung myRichtung = Richtung::Sueden;
auto nachbar = Raum.get( MyRichtung );
oder noch dreister als Typedef, dann sparen wir die get() Funktion gleich mit ein.

Code: Alles auswählen

Richtung myRichtung = Raum::sueden;
auto nachbar = Raum.*myRichtung;
Kein Fehlerfall, syntaktisch vom Compiler sauber und auch nicht zu unterschätzen: Es ist weniger Code, also weniger Fehlermöglichkeiten, weniger erforderliche Test, weniger Wartung.
Java... Sprache der Zukunft... höhö...

Ansonsten sieht der Rest von Dir doch gut aus. Nur um das Switch wirst Du kaum sinnvoll rumkommen. Beim Googlen habe ich Reflection als Ersatz für Methodenpointer bekommen. Aber das ist nur ein Witz für diejenigen gedacht, die schonmal Java und Reflection programmiert haben und definitiv keine Empfehlung das zu tun :-D
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Zenerid
Beiträge: 38
Registriert: Do Feb 05, 2015 4:15 pm

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Zenerid » Do Okt 29, 2015 2:46 am

An sowas hätte ich gar nicht gedacht von daher danke für den Tipp und natürlich für die Hilfe soweit. Das hat mich bis jetzt schon sehr viel weiter gebracht aber ein kleines Problem habe ich jetzt immer noch mit der neuen Klasse.
Ich war wohl ein wenig voreilig mit meinem letzten Post, denn so wie ich es jetzt habe funtkioniert es leider noch nicht. Ich hätte auch noch eine Frage zu einer anderen Sache, wo ich mir nicht sicher bin, ob die eine Methode lieber hier oder dort richtig aufgehoben ist oder ebend nicht. Oder wäre das eher eine Deisgn Entscheidung?

Zuallererst einmal das Problem mit der Klasse:
Wenn ich das so wie in meinem letzten Post mit dem

Code: Alles auswählen

@XmlElement(name = "norden")
public Nachbar setNorden(Nachbar norden) { this.norden = norden; }
dann erkennt er das aber bei dieser XML Struktur nicht:

Code: Alles auswählen

<?xml version="1.0"?>
<karte>
    <raueme>
        <raum id="1">
            <beschreibung>Der erste Raum</beschreibung>
            <nachbarn>
                <nachbar>
                    <richtung>geradeaus</richtung>
                    <ref>2</ref>
                </nachbar>
                <nachbar>
                    <richtung>rechts</richtung>
                    <ref>3</ref>
                </nachbar>
            <nachbarn>
        </raum>
        <raum id="2">
            <beschreibung>Raum 2</beschreibung>
            <nachbarn>
                <nachbar>
                    <richtung>zurück</richtung>
                    <ref>1</ref>
                </nachbar>
            <nachbarn>
        </raum>
        <raum id="3">
            <beschreibung>Der dritte Raum</beschreibung>
            <nachbarn>
                <nachbar>
                    <richtung>links</richtung>
                    <ref>1</ref>
                </nachbar>
            <nachbarn>
        </raum>
    </raueme>
</karte>
Selbst wenn ich das bei dem ersten Raum bspw. zu soetwas abändere:

Code: Alles auswählen

<raum id="1">
<beschreibung>Der erste Raum</beschreibung>
<nachbarn>
	<norden>
	    <nachbar>
	        <richtung>geradeaus</richtung>
	        <ref>2</ref>
	    </nachbar>
	</norden>
	<osten>
		<nachbar>
	        <richtung>rechts</richtung>
	        <ref>3</ref>
	   </nachbar>
	</osten>
<nachbarn>
</raum>
Aber eine andere Struktur wäre mir auch eigentlich lieber. Kann man das irgendwie so regeln, das man dass so wie in dem ersten XML Code lässt und das man das dann anhand der Richtung irgendwie richtig zuweist oder geht das nicht?

Meien Klasse sieht jetzt so aus:

Code: Alles auswählen

@XmlRootElement(name = "nachbarn")@XmlAccessorType(XmlAccessType.NONE)
public class Nachbarn
{   
   public Nachbar norden;
   public Nachbar osten;
   public Nachbar sueden;
   public Nachbar westen;
   
   @XmlElementWrapper(name = "nachbarn")@XmlElement(name = "nachbar")
   private Nachbar[] nachbarn;
   
   public Nachbarn()
   {
	   nachbarn = new Nachbar[] {norden, osten, sueden, westen};
   }
   
   public Nachbar getNorden() { return this.norden; }
   public Nachbar getOsten()  { return this.osten;  }
   public Nachbar getSueden() { return this.sueden; }
   public Nachbar getWesten() { return this.westen; }   
   
   @XmlElement(name = "norden")
   public Nachbar setNorden(Nachbar norden) { this.norden = norden; }
   @XmlElement(name = "osten")
   public Nachbar setOsten(Nachbar osten)   { this.osten = osten;   }
   @XmlElement(name = "sueden")
   public Nachbar setSueden(Nachbar sueden) { this.sueden = sueden; }
   @XmlElement(name = "westen")
   public Nachbar setWesten(Nachbar westen) { this.westen = westen; }
   
   public Nachbar get(Richtung r)
   {
		switch(r.ordinal())
		{      	
			case 1: return getNorden();
			case 2: return getWesten();
			case 3: return getOsten();
			case 4: return getSueden();
			
			default: return null;
		}
   }
   
   public String getAlle()
   {
       Richtung[] richtung = Richtung.values();
       String retString = "Nachbarn:";
       
       for(int i = 0; i < nachbarn.length; i++)
       {
           if(nachbarn[i] != null)
        	   retString += " " + richtung[i].name().toLowerCase();
       }
       
       return retString;
   }
   
   public Nachbar[] getArray()
   {
	   return nachbarn;
   } 
}
Ich habe daas jetzt auch so gemacht, das ich das Array da behalte, da ich da auch so einfach drüber iterieren kann und so nicht bei jedem einzelnen so prüfen msus, ob dieser null ist usw. Da kann man das ja dann ohne Probleme so machen oder nicht?
Da kommen wir dann auch zum zweiten Problem. Die Methode getAlle war vorher in der Raum Klasse aber da ja da die Nachbarn für den Raum zurückgegeben werden, passt das doch dann eigentlich am besten in die Nachbarn Klasse oder nicht? Wobei ich dafür jetzt auch noch eine Weiterleitungsmethode erstelle habe, die sich dann in der Raum Klasse die Nachbarn von der Nachbarn Klasse holt:

Code: Alles auswählen

public String getNachbarn()
{
    return nachbarn.getAlle();
} 
Denn eigentlich sollte ja dann auch nur der Raum mit der Nachbarn Klasse zusammenarbeiten oder nicht? Das Spiel braucht ja von der Nachbarn Klasse sozusagen eigentlich gar nichts zu wissen?
Ich habe jetzt aber auch noch ein paar Klassen, die vorher ebend mit dem Nachbarn Array gearbeitet haben, weswegen ich das mit dem Array auch noch so beibehaltne wollte und das macht ja auch wohl Sinn oder?
Bpsw. eine der Klassen:

Code: Alles auswählen

public Richtung getZufaelligeFluchtrichtung()
{
    int richtIndex = new Random().nextInt(nachbarn.getArray().length);	
    Richtung[] richtungen = Richtung.values();
   
    return richtungen[richtIndex];  
}
Damit der Spieler bspw. einen Richtung kriegt, in die er fliehen könnte, falls er den Kampf verlassen möchte oder ähnliches. Die gehört ja eigentlich weiterhin in die Raum Klasse oder nicht? Ansonsten bräuchte ich ja auch noch eine Instanz der Nachbarn Klasse in einer meiner anderen Klassen. Da ist es ja ebend auch wieder am besten, wenn ich weiterhin das Array habe, da ich da ja so auch einfach einen Zufallswert erzeugen kann.

Es gibt auch noch andere Methoden um z.B einen zufälligen Raum zurückzugeben usw. Die gehören dann ja auch eigentlich eher in die Raum Klasse, würde ich zumindest mal sagen.

Das C++ zu großen Teilen auch wohl einfacher ist, habe ich schon an vielen Stellen gehört bzw. gelesen. Mit C++ kenne ich mich auch ein wenig aus aber ich wollte mir auch mal Java anschauen. C++ ist an Stellen wirllich viel kürzer und auch einfacher, wenn man weiß wie aber C++ finde ich auch eigentlich ein wenig abstrakter mit den ganzen Pointern usw.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8485
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Xin » Do Okt 29, 2015 11:20 am

Zenerid hat geschrieben:An sowas hätte ich gar nicht gedacht von daher danke für den Tipp und natürlich für die Hilfe soweit. Das hat mich bis jetzt schon sehr viel weiter gebracht aber ein kleines Problem habe ich jetzt immer noch mit der neuen Klasse.
Ich war wohl ein wenig voreilig mit meinem letzten Post, denn so wie ich es jetzt habe funtkioniert es leider noch nicht. Ich hätte auch noch eine Frage zu einer anderen Sache, wo ich mir nicht sicher bin, ob die eine Methode lieber hier oder dort richtig aufgehoben ist oder ebend nicht. Oder wäre das eher eine Deisgn Entscheidung?
Welche Methode? ^^

Und ja, das sind Designentscheidungen, aber ohne zu wissen, worüber wir reden, kann ich auch keine brauchbare Antwort geben. :D
Zenerid hat geschrieben:Zuallererst einmal das Problem mit der Klasse:
Wenn ich das so wie in meinem letzten Post mit dem

Code: Alles auswählen

@XmlElement(name = "norden")
public Nachbar setNorden(Nachbar norden) { this.norden = norden; }
dann erkennt er das aber bei dieser XML Struktur nicht: [...]
Ich arbeite mit Norden, Süden usw., Du mit "geradeaus" und "zurück".
Ansonsten ist die Struktur natürlich auch eine andere. <nachbarn> besteht nicht mehr aus eine Anzahl von <nachbar>, sondern hat Elemente wie eben <norden> oder <sueden>. Die XML-Struktur passt hier so nicht mehr.
Zenerid hat geschrieben:Selbst wenn ich das bei dem ersten Raum bspw. zu soetwas abändere:
Vielleicht schreibst Du so ein Konstrukt erstmal in XML auf die Platte weg und prüfst die Unterschiede.
Zenerid hat geschrieben:Aber eine andere Struktur wäre mir auch eigentlich lieber. Kann man das irgendwie so regeln, das man dass so wie in dem ersten XML Code lässt und das man das dann anhand der Richtung irgendwie richtig zuweist oder geht das nicht?
Ich denke schon... nun bin ich aber kein Java-Fachmann und schon gar nicht für XML-Attribute. :-D

Ziel so einer Sache ist aber auch, dass Du möglichst wenig selbst schreiben musst. Wenn Du das Mapping der Daten also wieder von Hand machst, dann könntest Du den Parser auch gleich selbst schreiben ;)
Zenerid hat geschrieben:Ich habe daas jetzt auch so gemacht, das ich das Array da behalte, da ich da auch so einfach drüber iterieren kann und so nicht bei jedem einzelnen so prüfen msus, ob dieser null ist usw. Da kann man das ja dann ohne Probleme so machen oder nicht?
Erstens würde ich mir da überlegen einen Iterator in die Klasse einzubauen und zweitens... einem Array kann doch ebenso 'null' enthalten sein.
Zenerid hat geschrieben:Da kommen wir dann auch zum zweiten Problem. Die Methode getAlle war vorher in der Raum Klasse aber da ja da die Nachbarn für den Raum zurückgegeben werden, passt das doch dann eigentlich am besten in die Nachbarn Klasse oder nicht? Wobei ich dafür jetzt auch noch eine Weiterleitungsmethode erstelle habe, die sich dann in der Raum Klasse die Nachbarn von der Nachbarn Klasse holt:

Code: Alles auswählen

public String getNachbarn()
{
    return nachbarn.getAlle();
} 
Klingt sinnvoll, würde ich wohl ähnlich machen.
Zenerid hat geschrieben:Denn eigentlich sollte ja dann auch nur der Raum mit der Nachbarn Klasse zusammenarbeiten oder nicht? Das Spiel braucht ja von der Nachbarn Klasse sozusagen eigentlich gar nichts zu wissen?
Ich habe jetzt aber auch noch ein paar Klassen, die vorher ebend mit dem Nachbarn Array gearbeitet haben, weswegen ich das mit dem Array auch noch so beibehaltne wollte und das macht ja auch wohl Sinn oder?
Da widerspreche ich jetzt mal. :)
Wenn Du Daten redundant aufbewahrst, musst Du das laufend synchronisieren. Das bietet hohes Potential für Fehler - gerade wenn mehr als eine Klasse daran beteiligt ist.
Zenerid hat geschrieben: Bpsw. eine der Klassen:

Code: Alles auswählen

public Richtung getZufaelligeFluchtrichtung()
{
    int richtIndex = new Random().nextInt(nachbarn.getArray().length);	
    Richtung[] richtungen = Richtung.values();
   
    return richtungen[richtIndex];  
}

Code: Alles auswählen

  Raum r;

  Nachbar n = r.get( getZufaelligeFluchtrichtung() );
Designmässig würde ich hier auch eher eine statische Funktion in Richtung einbauen: raum.get( Richtung.getRandom() );

Ansonsten würde ich mich mal auf eine Sprache festlegen und Denglisch ist keine Sprache ;)
Zenerid hat geschrieben:Es gibt auch noch andere Methoden um z.B einen zufälligen Raum zurückzugeben usw. Die gehören dann ja auch eigentlich eher in die Raum Klasse, würde ich zumindest mal sagen.
Die Entscheidung welcher Nachbar es ist, ist abhängig von der Klasse Nachbarn. Also würde ich das da reinpacken und der Raum fragt halt seine Nachbarn.
Zenerid hat geschrieben:Das C++ zu großen Teilen auch wohl einfacher ist, habe ich schon an vielen Stellen gehört bzw. gelesen. Mit C++ kenne ich mich auch ein wenig aus aber ich wollte mir auch mal Java anschauen. C++ ist an Stellen wirllich viel kürzer und auch einfacher, wenn man weiß wie aber C++ finde ich auch eigentlich ein wenig abstrakter mit den ganzen Pointern usw.
Amüsant ist, dass Leute Pointer abstrakt finden und dann Java programmieren...

Bitte versuche folgendes Programm

Code: Alles auswählen

public class MeineKlasse
{
  int a;

  static void main( String[] argv )
  {
    MeineKlasse mk;

    mk.a = 1;
  }
}
Bitte lass das Programm laufen, kopiere die Ausgabe hier rein und erkläre mir, was Du daraus liest.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Zenerid
Beiträge: 38
Registriert: Do Feb 05, 2015 4:15 pm

Re: [JAXB] nutzt Standard Konstruktor nicht?

Beitrag von Zenerid » Fr Okt 30, 2015 12:59 am

Das war ja weiter unten die Methode geZufaelligeFluchtrichtung. Ich wollte das nur unten zusammenfassen und erst einmal sagen, was grade das Problem ist. Sorry übrigens für die ganzen Rechtschreibfehler aber meine Tastatur spinnt aktuell.

Ich habe nur auf Norden etc. umgestellt, weil du das auch gemacht hattest. ;)
Ich bleibe dann jetzt mal bei dem, wie ich es bei mir im Programm habe. Bei mir steht also weiterhin anstatt norden noch geradeaus usw. Ich habe das ja auch so

Code: Alles auswählen

<?xml version="1.0"?>
<karte>
    <raueme>
        <raum id="1">
            <beschreibung>Der erste Raum</beschreibung>
            <nachbarn>
                <geradeaus>
                    <richtung>geradeaus</richtung>
                    <ref>2</ref>
                </geradeaus>
                <rechts>
                    <richtung>rechts</richtung>
                    <ref>3</ref>
                </rechts>
            <nachbarn>
        </raum>
        <raum id="2">
            <beschreibung>Raum 2</beschreibung>
            <nachbarn>
                <zurueck>
                    <richtung>zurück</richtung>
                    <ref>1</ref>
                </zurueck>
            <nachbarn>
        </raum>
        <raum id="3">
            <beschreibung>Der dritte Raum</beschreibung>
            <nachbarn>
                <links>
                    <richtung>links</richtung>
                    <ref>1</ref>
                </links>
            <nachbarn>
        </raum>
    </raueme>
</karte>
bspw. probiert aber dennnoch ist das Array und auch die variablen leer. Ich gebe die Nachbarn ja dann auch nachher noch für jeden Raum aus aber da steht immer nur "null" und das wars.

Zu dem Array.:
Meinst du den java.util.Iterator? Wieso das denn? Man kann doch auch so eb end mit einer Schleife drüber iterieren, wie ich es grade mache oder etwa nicht? Das an einzelnen Stellen in Array auch ein null-Wert drin sein kann ist schon klar, aber besser dann mit einem Laufindex prüfen, als jedes Element da so hinschreiben zu müssen oder nicht?

Das ich das Array sozusagen an 2 Orten halte, war wohl etwas schlecht ausgedgrückt, denn das stimmt so nicht. Ich habe das Array jetzt halt nur in die Nachbarn Klasse verschoben und hole mir das bspw. für die getZufaelligeRichtung Methode. Das sollte doch wohl so okay sein? Da muss ja nichts synchronisiert werden, also auch keine redundante Aufbewahrung.
Xin hat geschrieben:

Code: Alles auswählen

  Raum r;

  Nachbar n = r.get( getZufaelligeFluchtrichtung() );
Höh, so könnte ich meine Methode mit dem zufälligen Raum um einiges vereinfachen. Da habe ich nicht einmal dran gedacht ... tzz ...
Xin hat geschrieben:Designmässig würde ich hier auch eher eine statische Funktion in Richtung einbauen: raum.get( Richtung.getRandom() );

Ansonsten würde ich mich mal auf eine Sprache festlegen und Denglisch ist keine Sprache ;)
Auch wohl eine gute Idee aber ich brauche ja auch eine Instanz des Raumes, um festzustellen ob sich in der Richtung überhaupt ein Raum befindet oder nicht? Davon weiß die Richtungsklasse ja gar nichts und sollte wohl auch nicht so sein, w+rde ich mal behaupten.

Tut mir Leid wegen der gemischten Sprache aber wie ich ja glaube ich schon mal gesagt habe, wollte ich auch Englisch umstellen und da kann ich das get ja schon einmal dalassen. :D
Demnchst fange ich dann auch immer direkt mit Enlgischen Bezeichnern an, denn Englisch ist ja sowieso die Sprache, die im allgemeinen in Programmiersprachen verwendet wird bzw. in Projekten, wo auch mehrere Leute mit unterschiedlicher Herkunft arbeiten.
Xin hat geschrieben:Die Entscheidung welcher Nachbar es ist, ist abhängig von der Klasse Nachbarn. Also würde ich das da reinpacken und der Raum fragt halt seine Nachbarn.
Stimmt, da hast du Recht. Eigentlich müsste die Methode auch wohl getZufaelligerNachbar oder so heißen und nicht getZufaelligerRaum.
Xin hat geschrieben:Amüsant ist, dass Leute Pointer abstrakt finden und dann Java programmieren...

Bitte versuche folgendes Programm

Code: Alles auswählen

public class MeineKlasse
{
  int a;

  static void main( String[] argv )
  {
    MeineKlasse mk;

    mk.a = 1;
  }
}
Bitte lass das Programm laufen, kopiere die Ausgabe hier rein und erkläre mir, was Du daraus liest.
Naja, es ist ja auch abstrakt oder nicht? Das ist ja nicht nur meine Meinung, sondern das wird auch in vielen Vorlesungen, die man online findet erwähnt oder das schreiben auch viele Autoren in ihren Büchern. Mag ja sein, das es einige nicht abstrakt finden aber wieso ist da amüsant? Nur weil ich das jetzt gesagt habe?

So wie das Programm jetzt ist, würde es wohl nicht laufen, würde ich zumindest sagen. ;)
Wenn ich das in Eclipse reinkopiere, dann kriege ich die Meldung:
The local variable mk may not have been initialized.
Das Programm würde so auch nichts ausgeben, da da eine Ausgabe fehlt?

Das soll doch eine Klasse in Java sein oder? In C++ gibt es ja schließlich keinen Typ String, jedenfalls nicht das ich wüsste. So wäre die main Funktion ja in C++:

Code: Alles auswählen

int main(int argc, char* argv[])
oder so:

Code: Alles auswählen

int main(int argc, char** argv)

Antworten