Java BlueJ Thema : spätes Binden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java BlueJ Thema : spätes Binden

    Hi Leute,

    Ich hab n Problem von dem ich nicht weiß wie ich es lösen soll...und zwar sollen wir in der Schule eine Zug machen zu dem bei Tastendruck (1,2,3,4 oder so) ein Wagon hinzugefügt wird... so weit ist es einfach . Dann soll der Zug aber noch losfahren. Mein Problem is jetz das ich für jeden einzelen Wagon ein neues Objekt machen muss und die ja immer anders heißen oder unter einem Bezeichner zusammengefasst werden müssen damit ich sie ansprechen kann...

    Hier mal mein Hauptprogramm :

    Quellcode

    1. import sum.kern.*;
    2. /**
    3. * @author Philip WOLtersdorf
    4. * @version 1.0
    5. */
    6. public class HP
    7. {
    8. // Objekte
    9. Bildschirm derBildschirm;
    10. Lokomotive Loko;
    11. PersonenWagon Perso;
    12. OelWagon OelW;
    13. HolzWagon HolzW;
    14. Tastatur dieTastatur;
    15. Figur aktiveFigur;
    16. // Konstruktor
    17. public HP()
    18. {
    19. derBildschirm = new Bildschirm(700,700);
    20. Loko = new Lokomotive(250,250);
    21. OelW = new OelWagon(0,0);
    22. HolzW = new HolzWagon(0,0);
    23. Perso = new PersonenWagon(0,0);
    24. dieTastatur = new Tastatur();
    25. aktiveFigur = Loko;
    26. }
    27. // Dienste
    28. public void fuehreAus()
    29. {
    30. // Aktionsteil
    31. aktiveFigur.zeichneDich();
    32. do
    33. {
    34. if(dieTastatur.wurdeGedrueckt())
    35. {
    36. switch(dieTastatur.zeichen())
    37. {
    38. case '1' :
    39. {
    40. Perso = new PersonenWagon(aktiveFigur.nennehPosition()+aktiveFigur.nenneGroesse(),aktiveFigur.nennevPosition());
    41. aktiveFigur = Perso;
    42. aktiveFigur.zeichneDich();
    43. break;
    44. }
    45. case '2' :
    46. {
    47. OelW = new OelWagon(aktiveFigur.nennehPosition()+aktiveFigur.nenneGroesse(),aktiveFigur.nennevPosition());
    48. aktiveFigur = OelW;
    49. aktiveFigur.zeichneDich();
    50. break;
    51. }
    52. case '3' :
    53. {
    54. HolzW = new HolzWagon(aktiveFigur.nennehPosition()+aktiveFigur.nenneGroesse(),aktiveFigur.nennevPosition());
    55. aktiveFigur = HolzW;
    56. aktiveFigur.zeichneDich();
    57. break;
    58. }
    59. case 's' :
    60. {
    61. do
    62. {
    63. Loko.bewegeUm(-5,0);
    64. Perso.bewegeUm(-5,0);
    65. OelW.bewegeUm(-5,0);
    66. HolzW.bewegeUm(-5,0);
    67. }while (aktiveFigur.nennehPosition() > 0 );
    68. break;
    69. }
    70. }
    71. dieTastatur.weiter();
    72. }
    73. }while (aktiveFigur.nennehPosition() > 0);
    74. // Aufraeumen
    75. dieTastatur.gibFrei();
    76. Perso.gibFrei();
    77. OelW.gibFrei();
    78. HolzW.gibFrei();
    79. Loko.gibFrei();
    80. derBildschirm.gibFrei();
    81. }
    82. }
    Alles anzeigen


    jaja ich weiß es ist auf deutsch und hört sich lustig an aber naja...
    Mir ist klar ,dass das nicht funktioniert ,weil der zweite Wagon aus der selben Klasse den Namen vom ersten übernimmt so das der erste sozusagen namenlos ist...
    Ich hab nur leider überhaupt keine Idee wie man es richtig macht
    Danke im Voraus.

    Edit :
    Ich hab mir überlegt man könnte natürlich gleich mehrere Objekte pro Klasse aufrufen aber dann wär erstmal die Anzahl beschränkt und es erscheint mir eigtl. ziemlich unprofessionel ...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von möP ()

  • Welche Methoden hat denn deine Lokomotive-Klasse?

    Die Lokomotive sollte einfach eine List aus Wagons haben.

    Also:
    1. Baue dir eine abstrakte Klasse Wagon.
    2. Alle anderen Wagon-Klassen (PersonenWagon, OelWagon, ...) erben nun von Wagon.
    3. Die Lokomotive-Klasse bekommt nun ein Attribut wie z.B. das hier:

    Quellcode

    1. private List<Wagon> wagons = new LinkedList<Wagon>();

    4. Die Get-Methode nicht vergessen:

    Quellcode

    1. public List<Wagon> getWagons()
    2. {
    3. return wagons;
    4. }

    5. Nun kannst du jeder Lokomotive beliebig viele Wagons hinzufügen.
  • Abstrakte Klasse is da.

    Des hat ich auch schon vorher nur erbt die Lokomotive auch.
    List gibs leider in meiner Version nicht... gibs nicht noch ne andere möglichkeit z.B mit nem normalen Attribut zWagons oder so ?
    Und wenn ich das hab bleibt immer noch mein Problem mit den Namen. Ich kann zwar Wagons hinzufügen ,aber die werden ja erst konstruiert wenn man die Tastaste drückt wie mach ich das die verschiedene Namen bekommen oder kann ich irgendwie den Konstruktor direkt in (als Parameter oder so ? ) in die Methode packen ?
    Bsp:

    public void setzeWagons(double pWagons)
    {
    zWagons = pWagons;
    }

    und dann im HP:

    Loko.setzeWagons(new Wagons(...,...);

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von möP ()

  • Wenn du Listen nicht magst, kannst du auch Arrays verwenden. Allerdings haben Arrays eine feste Größe, was du ja (zu recht) nicht willst und Arrays sind viel unschöner zu handhaben als Listen.

    Die Liste muss logischerweise bei der Lokomotive gesetzt werden, denn an die werden ja auch die Wagons angehängt. Dort ist auch der Platz für die getWagons()-Methode.
    Das schöne an Listen ist ihre einfache Handhabung. Die Methodennamen sind selbsterklärend und wenn das nicht reicht, hier die Erklärungen auf deutsch:
    dpunkt.de/java/Referenz/Das_Paket_java.util/32.html
    Beispiel:

    Quellcode

    1. // Zunächst eine leere Liste erzeugen. In diesem Beispiel soll sie String-Objekte beinhalten. (Bei dir dann Wagons)
    2. // LinkedList ist eine spezielle Liste, das braucht dich aber erstmal nicht näher zu interessieren.
    3. List<String> texte = new LinkedList<String>();
    4. // Wenn man die Lister erstmal hat, kannst du irgendwas rein werfen:
    5. texte.add("ich");
    6. texte.add("du");
    7. texte.add("er");
    8. texte.add("sie");
    9. texte.add("es");
    10. // Nun kann man natürlich auch wieder etwas aus der Liste holen:
    11. System.out.println(texte.get(2)); // Die Ausgabe sollte "er" sein.
    12. System.out.println(texte.get(0)); // Die Ausgabe sollte "ich" sein.
    13. // oder man gibt die gesammte Liste aus:
    14. // texte.size() ist bei unserer Liste 5! Während die indexe von 0 bis 4 gehen! Aufpassen! :-)
    15. for (int i = 0; i < texte.size(); i++)
    16. {
    17. System.out.println(texte.get(i));
    18. }
    Alles anzeigen


    Wenn du weder Arrays noch Listen magst, dann kannst du auch etwas ganz anderes machen. Du gibst der abstrakten Klasse ein Attribut getNaechsterWagon() und der Lokomotive (für den Fall das Lokomotive NICHT von der abstrakten Klasse erbt) ebenfalls. Dann gehst du rekursiv beginnend bei der Lokomotive alle Wagons nacheinander durch und hängst den neuen Wagon am Ende an.
  • Quellcode

    1. import sum.kern.*;
    2. /**
    3. * @author Philip WOltersdorf
    4. * @version 1.0
    5. */
    6. public class HP
    7. {
    8. // Objekte
    9. Bildschirm derBildschirm;
    10. Tastatur dieTastatur;
    11. Maus dieMaus;
    12. Figur dummy;
    13. Lokomotive dieLok;
    14. PersonenWaggon derPer;
    15. OelWaggon derOel;
    16. HolzWaggon derHol;
    17. // Konstruktor
    18. public HP()
    19. {
    20. derBildschirm = new Bildschirm(700,700);
    21. dieTastatur = new Tastatur();
    22. dieMaus = new Maus();
    23. dieLok = new Lokomotive(250,250);
    24. dieLok.zeichneDich();
    25. dummy = dieLok;
    26. }
    27. // Dienste
    28. public void fuehreAus()
    29. {
    30. // Aktionsteil
    31. do
    32. {
    33. if(dieTastatur.wurdeGedrueckt())
    34. {
    35. switch(dieTastatur.zeichen())
    36. {
    37. case '1' :
    38. {
    39. derPer = new PersonenWaggon(0,0); <- neuer Waggon
    40. dummy = dieLok; <-"dummy" durchläuft bis zum letzten Zug
    41. while (dummy.nenneNachfolger() != null)
    42. {
    43. dummy = dummy.nenneNachfolger();
    44. }
    45. dummy.kuppelAn(derPer); <- dann kuppelt er den neuen Waggon an.
    46. break;
    47. }
    48. case 's' :
    49. {
    50. do
    51. {
    52. dieLok.bewegeDich(); <- die Lok hat ne kennt Beziehung zu dem "Nachfolger" und und zieht sie sozusagen mit.
    53. }while (!dieMaus.doppelKlick());
    54. }
    55. }
    56. dieTastatur.weiter();
    57. }
    58. }while (!dieMaus.doppelKlick());
    59. // Aufraeumen
    60. dieTastatur.gibFrei();
    61. derBildschirm.gibFrei();
    62. dieMaus.gibFrei();
    63. derPer.gibFrei();
    64. derOel.gibFrei();
    65. derHol.gibFrei();
    66. dieLok.gibFrei();
    67. }
    68. }
    Alles anzeigen


    Hier mal die Methoden :

    Quellcode

    1. /**
    2. * Kuppelt pWagon an.
    3. */
    4. public void kuppelAn(Figur pWagon)
    5. {
    6. if (kNachfolger == null)
    7. {
    8. kNachfolger = pWagon;
    9. kNachfolger.bewegeBis(this.nennehPosition()+this.nenneLaenge(),this.nennevPosition());
    10. kNachfolger.zeichneDich();
    11. }
    12. }
    13. /**
    14. * Bewegt.
    15. */
    16. public void bewegeDich()
    17. {
    18. this.loescheDich();
    19. hatStift.bewegeUm(-0.01);
    20. this.zeichneDich();
    21. if (kNachfolger != null)
    22. {
    23. kNachfolger.bewegeDich();
    24. }
    25. }
    Alles anzeigen


    Geht bestimmt mit deiner Lösung leichter ^^
  • Optimal Lösung...

    Hier die Optimal-Lösung (jedenfalls für JGS 11 und die Möglichkeiten in BlueJ) ...

    DIE ABSTRAKTE KLASSE :

    Quellcode

    1. import sum.kern.*;
    2. /**
    3. * @author Philip Woltersdorf
    4. * @version 1.0
    5. */
    6. public abstract class Figur
    7. {
    8. // Bezugsobjekte
    9. Buntstift hatStift;
    10. Figur kNachfolger;
    11. Figur dummi;
    12. Maus kMaus;
    13. // Attribute
    14. protected double zLaenge;
    15. // Konstruktor
    16. public Figur(double pLaenge,double pH ,double pV,Maus pMaus)
    17. {
    18. hatStift = new Buntstift();
    19. kMaus = pMaus;
    20. zLaenge = pLaenge;
    21. hatStift.bewegeBis(pH,pV);
    22. }
    23. // Dienste
    24. /**
    25. * Gibt die horizontale Position aus.
    26. */
    27. public double nennehPosition()
    28. {
    29. return hatStift.hPosition();
    30. }
    31. /**
    32. * Gibt die vertikale Position aus.
    33. */
    34. public double nennevPosition()
    35. {
    36. return hatStift.vPosition();
    37. }
    38. /**
    39. * Gibt die Groesse aus.
    40. */
    41. public double nenneLaenge()
    42. {
    43. return zLaenge;
    44. }
    45. /**
    46. * Zeichnet.
    47. */
    48. public abstract void zeichneDich();
    49. /**
    50. * Loescht.
    51. */
    52. public void loescheDich()
    53. {
    54. hatStift.radiere();
    55. this.zeichneDich();
    56. hatStift.normal();
    57. }
    58. /**
    59. * Gibt den Nachfolger aus (Falls vorhanden).
    60. */
    61. public Figur nenneNachfolger()
    62. {
    63. return kNachfolger;
    64. }
    65. /**
    66. * Bewegt.
    67. */
    68. public void bewegeDich(int pG)
    69. {
    70. this.loescheDich();
    71. hatStift.bewegeUm(pG);
    72. this.zeichneDich();
    73. if (kNachfolger != null)
    74. {
    75. kNachfolger.bewegeDich(pG);
    76. }
    77. }
    78. /**
    79. * Kuppelt pWagon an.
    80. */
    81. public void kuppelAn(Figur pWagon)
    82. {
    83. if (kNachfolger == null)
    84. {
    85. kNachfolger = pWagon;
    86. kNachfolger.bewegeBis(this.nennehPosition()+this.nenneLaenge(),this.nennevPosition());
    87. kNachfolger.zeichneDich();
    88. }
    89. }
    90. /**
    91. * Überprüft ob kMaus getroffen hat.
    92. */
    93. private boolean getroffen1()
    94. {
    95. return kMaus.hPosition() < this.nennehPosition() && kMaus.hPosition() > this.nennehPosition() - this.nenneLaenge();
    96. }
    97. private boolean getroffen2()
    98. {
    99. return kMaus.vPosition() < this.nennevPosition() && kMaus.vPosition() > this.nennevPosition() - this.nenneLaenge();
    100. }
    101. public boolean getroffen()
    102. {
    103. return this.getroffen1() && this.getroffen2();
    104. }
    105. /**
    106. * Entfernt den Nachfolger dieses Waggons und ersetzt ihn durch den Folgenden.
    107. */
    108. public void entferneNachfolger()
    109. {
    110. if (kNachfolger != null)
    111. {
    112. Figur pNN;
    113. pNN = kNachfolger.nenneNachfolger();
    114. kNachfolger.gibFrei();
    115. kNachfolger = pNN;
    116. }
    117. }
    118. /**
    119. * Bewegt bis pX , pY.
    120. */
    121. public void bewegeBis(double pX,double pY)
    122. {
    123. hatStift.bewegeBis(pX,pY);
    124. }
    125. /**
    126. * Gibt Frei.
    127. */
    128. public void gibFrei()
    129. {
    130. this.loescheDich();
    131. hatStift.gibFrei();
    132. }
    133. }
    Alles anzeigen

    EIN BEISPIEL WAGGON:

    Quellcode

    1. import sum.kern.*;
    2. /**
    3. * @author Philip WOltersdorf
    4. * @version 1.0
    5. */
    6. public class Lokomotive extends Figur
    7. {
    8. // Bezugsobjekte
    9. // Attribute
    10. // Konstruktor
    11. public Lokomotive(double pH,double pV,Maus pMaus)
    12. {
    13. super(50,pH,pV,pMaus);
    14. }
    15. // Dienste
    16. /**
    17. * Zeichnet die Lokomotive.
    18. */
    19. public void zeichneDich()
    20. {
    21. double x;
    22. double y;
    23. x = hatStift.hPosition();
    24. y = hatStift.vPosition();
    25. hatStift.runter();
    26. hatStift.dreheUm(90);
    27. hatStift.bewegeUm(3);
    28. hatStift.bewegeUm(-6);
    29. hatStift.bewegeUm(3);
    30. hatStift.dreheUm(90);
    31. hatStift.bewegeUm(15);
    32. hatStift.dreheUm(90);
    33. hatStift.bewegeUm(2);
    34. hatStift.zeichneKreis(2);
    35. hatStift.bewegeUm(-2);
    36. hatStift.dreheUm(-90);
    37. hatStift.bewegeUm(20);
    38. hatStift.dreheUm(90);
    39. hatStift.bewegeUm(2);
    40. hatStift.zeichneKreis(2);
    41. hatStift.bewegeUm(-2);
    42. hatStift.dreheUm(-90);
    43. hatStift.bewegeUm(15);
    44. hatStift.dreheUm(-90);
    45. hatStift.bewegeUm(3);
    46. hatStift.bewegeUm(-6);
    47. hatStift.bewegeUm(3);
    48. hatStift.dreheUm(-90);
    49. hatStift.bewegeUm(5);
    50. hatStift.dreheUm(90);
    51. hatStift.bewegeUm(26);
    52. hatStift.dreheUm(-90);
    53. hatStift.bewegeUm(5);
    54. hatStift.dreheUm(-90);
    55. hatStift.bewegeUm(13);
    56. hatStift.dreheUm(90);
    57. hatStift.bewegeUm(10);
    58. hatStift.dreheUm(90);
    59. hatStift.bewegeUm(13);
    60. hatStift.dreheUm(-90);
    61. hatStift.bewegeUm(25);
    62. hatStift.dreheUm(-90);
    63. hatStift.bewegeUm(26);
    64. hatStift.dreheUm(90);
    65. hatStift.hoch();
    66. hatStift.bewegeBis(x,y);
    67. }
    68. }
    Alles anzeigen


    DAS HAUPTPROGRAMM:

    Quellcode

    1. import sum.kern.*;
    2. /**
    3. * @author Philip WOLtersdorf
    4. * @version 1.0
    5. */
    6. public class HP
    7. {
    8. // Objekte
    9. Bildschirm derBildschirm;
    10. Tastatur dieTastatur;
    11. Maus dieMaus;
    12. Stift hatStift;
    13. Knopf Knopf;
    14. Knopf Knopf2;
    15. Figur dummy;
    16. Lokomotive dieLok;
    17. PersonenWaggon derPer;
    18. OelWaggon derOel;
    19. HolzWaggon derHol;
    20. // Konstruktor
    21. public HP()
    22. {
    23. derBildschirm = new Bildschirm(333,333);
    24. dieTastatur = new Tastatur();
    25. dieMaus = new Maus();
    26. hatStift = new Stift();
    27. Knopf = new Knopf(derBildschirm.breite()/3-25 ,derBildschirm.hoehe()-50,25,50,dieMaus,'E');
    28. Knopf2 = new Knopf(derBildschirm.breite()/3*2-25,derBildschirm.hoehe()-50,25,50,dieMaus,'S');
    29. dieLok = new Lokomotive(derBildschirm.breite()/4,derBildschirm.hoehe()/2,dieMaus);
    30. derPer = new PersonenWaggon(derBildschirm.breite()/3-50,derBildschirm.hoehe()/8,dieMaus);
    31. derOel = new OelWaggon(derBildschirm.breite()/3*2-50,derBildschirm.hoehe()/8,dieMaus);
    32. derHol = new HolzWaggon(derBildschirm.breite()/3*3-50,derBildschirm.hoehe()/8,dieMaus);
    33. dieLok.zeichneDich();
    34. dummy = dieLok;
    35. }
    36. // Dienste
    37. public void fuehreAus()
    38. {
    39. // Aktionsteil
    40. hatStift.bewegeBis(0,derBildschirm.hoehe()/4);
    41. hatStift.runter();
    42. hatStift.bewegeBis(derBildschirm.breite(),derBildschirm.hoehe()/4);
    43. hatStift.hoch();
    44. hatStift.bewegeBis(0,derBildschirm.hoehe()/4+10);
    45. hatStift.runter();
    46. hatStift.bewegeBis(derBildschirm.breite(),derBildschirm.hoehe()/4+10);
    47. hatStift.hoch();
    48. hatStift.bewegeBis(0,(derBildschirm.hoehe()/4)*3);
    49. hatStift.runter();
    50. hatStift.bewegeBis(derBildschirm.breite(),(derBildschirm.hoehe()/4)*3);
    51. hatStift.hoch();
    52. hatStift.bewegeBis(0,((derBildschirm.hoehe()/4)*3)-10);
    53. hatStift.runter();
    54. hatStift.bewegeBis(derBildschirm.breite(),((derBildschirm.hoehe()/4)*3)-10);
    55. hatStift.hoch();
    56. do
    57. {
    58. if(dieMaus.doppelKlick())
    59. {
    60. if(derPer.getroffen())
    61. {
    62. dummy = dieLok;
    63. while (dummy.nenneNachfolger() != null)
    64. {
    65. dummy = dummy.nenneNachfolger();
    66. }
    67. dummy.kuppelAn(new PersonenWaggon(0,0,dieMaus));
    68. do
    69. {
    70. dieLok.bewegeDich(-1);
    71. }while (dummy.nennehPosition() > derBildschirm.breite()/2);
    72. }
    73. if(derOel.getroffen())
    74. {
    75. dummy = dieLok;
    76. while (dummy.nenneNachfolger() != null)
    77. {
    78. dummy = dummy.nenneNachfolger();
    79. }
    80. dummy.kuppelAn(new OelWaggon(0,0,dieMaus));
    81. do
    82. {
    83. dieLok.bewegeDich(-1);
    84. }while (dummy.nennehPosition() > derBildschirm.breite()/2);
    85. }
    86. if(derHol.getroffen())
    87. {
    88. dummy = dieLok;
    89. while (dummy.nenneNachfolger() != null)
    90. {
    91. dummy = dummy.nenneNachfolger();
    92. }
    93. dummy.kuppelAn(new HolzWaggon(0,0,dieMaus));
    94. do
    95. {
    96. dieLok.bewegeDich(-1);
    97. }while (dummy.nennehPosition() > derBildschirm.breite()/2);
    98. }
    99. if(Knopf.getroffen())
    100. {
    101. Knopf.aktiviere();
    102. dummy = dieLok;
    103. if(dieLok.nenneNachfolger() != null)
    104. {
    105. while (dummy.nenneNachfolger().nenneNachfolger() != null)
    106. {
    107. dummy = dummy.nenneNachfolger();
    108. }
    109. dummy.entferneNachfolger();
    110. do
    111. {
    112. dummy = dieLok;
    113. while (dummy.nenneNachfolger() != null)
    114. {
    115. dummy = dummy.nenneNachfolger();
    116. }
    117. dieLok.bewegeDich(+1);
    118. }while (dummy.nennehPosition() < derBildschirm.breite()/2);
    119. }
    120. Knopf.deaktiviere();
    121. }
    122. if(Knopf2.getroffen())
    123. {
    124. Knopf2.aktiviere();
    125. do
    126. {
    127. dieLok.bewegeDich(+5);
    128. }while (dieLok.nennehPosition() < derBildschirm.breite()/2);
    129. do
    130. {
    131. dieLok.bewegeDich(-1);
    132. }while (dummy.nennehPosition()+dummy.nenneLaenge()+1 > 0);
    133. Knopf2.deaktiviere();
    134. }
    135. }
    136. }while (dummy.nennehPosition()+dummy.nenneLaenge()+1 > 0);
    137. // Aufraeumen
    138. dieTastatur.gibFrei();
    139. derBildschirm.gibFrei();
    140. dieMaus.gibFrei();
    141. hatStift.gibFrei();
    142. Knopf.gibFrei();
    143. Knopf2.gibFrei();
    144. derPer.gibFrei();
    145. derOel.gibFrei();
    146. derHol.gibFrei();
    147. dieLok.gibFrei();
    148. }
    149. }
    Alles anzeigen

    Edit: Das Programm hat n kleinen Bug... und zwar, wenn man wärend die Schleife abläuft in der die Waggon nach vorne (o. hinten) geschoben werden ,die Maus über nen Button bewegt wird dieser ausgelöst...Ich hatte keine Lust mehr den zu verbessern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von möP ()

  • ähm ... ich weiß nicht ganz was du meins...
    Jedenfalls macht "dieLok" ja eigtl. nichts als die anderen Waggons hinter sich her zu ziehen... das könnte aber eigtl jeder Waggon ,weil sie ja alle von der selben abstrakten Klasse abstammen. Die Lok an sich hat keine besondere Bedeutung man braucht halt nur eine Instanz die einen Namen hat.

    EDIT :
    Ich wollt nochmal nachfragen :
    Gibt es in Java eigtl. ein Zeichen das für "oder" steht ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von möP ()