Kleine Frage zur objektorientierten Programmierung

Pinkman4242

Neues Mitglied
Moin, bin Anfänger und habe mir Coden selbst beigebracht. Habe hier eine kleinen Code und ich arbeite mit mehreren Objekten. Will Bestimmte Daten über "System.out.println();" in der Console rausgeben. Mein Problem. Ich würde gerne statt immer den Objektnamen lieber einen Platzhalter wie zbs. eine Player1 = Glurak, Player2 = Bisaflor nutzen. Ist es möglich ein Objekte einer zbs. Variabel zuzuweisen.

Java:
public class Main {
  public static void main(String[] args) {

    // instanzen der klasse
    // Konstruktor: name, typ, größe, gewicht, lvl, entwicklunglvl, kp, angriff, verteildigung.
    Pokemonklasse Pikachu = new Pokemonklasse("Pikachu", "Elektro", "0,4m", "6,0kg", 1, 1, 15, 35, 30);
    Pokemonklasse Bisaflor = new Pokemonklasse("Bisaflor", "Pflanze Gift", "2,0m", "100kg", 1, 1, 50, 24, 45);
    Pokemonklasse Glurak = new Pokemonklasse("Glurak", "Feuer", "1,7m", "90kg", 1, 1, 45, 60, 40);
    Pokemonklasse Schiggy = new Pokemonklasse("Schiggy", "Wasser", "0,5m", "9,0kg", 1, 1, 16, 32, 25);
    Pokemonklasse Tauboga = new Pokemonklasse("Tauboga", "Veganer", "1,93m", "110kg", 1, 1, 99, 99, 99);

    Glurak.tranieren();
    Glurak.fortschritt();

    System.out.println();
    System.out.println();
    System.out.println(Glurak.getname() + " ist vom Typ " + Glurak.gettyp());
    System.out.println();
    System.out.println("Basisinformation");
    System.out.println("Größe: " + Glurak.getgröße() + "   Gewicht: " + Glurak.getgewicht());
    System.out.println();
    System.out.println("Kraft:");
    System.out.println("Lvl: " + Glurak.getlvl());
    System.out.println("Kp: " + Glurak.getkp());
    System.out.println("Angriff: " + Glurak.getangriff());
    System.out.println("Verteildigung: " + Glurak.getverteildigung());
    System.out.println("Kampfkraft: " + Glurak.kamfkraftrechner());

    Bisaflor.tranieren();
    Bisaflor.fortschritt();

    System.out.println();
    System.out.println();
    System.out.println(Bisaflor.getname() + " ist vom Typ " + Bisaflor.gettyp());
    System.out.println();
    System.out.println("Basisinformation");
    System.out.println("Größe: " + Bisaflor.getgröße() + "   Gewicht: " + Bisaflor.getgewicht());
    System.out.println();
    System.out.println("Kraft:");
    System.out.println("Lvl: " + Bisaflor.getlvl());
    System.out.println("Kp: " + Bisaflor.getkp());
    System.out.println("Angriff: " + Bisaflor.getangriff());
    System.out.println("Verteildigung: " + Bisaflor.getverteildigung());
    System.out.println("Kampfkraft: " + Bisaflor.kamfkraftrechner());
  }
}

public class Pokemonklasse {
  //konstruktor
  public Pokemonklasse(String name, String typ, String größe, String gewicht, int lvl, int entwicklunglvl, int kp, int angriff, int verteildigung) {
    this.name = name;
    this.typ = typ;
    this.größe = größe;
    this.gewicht = gewicht;
    this.lvl = lvl;
    this.entwicklunglvl = entwicklunglvl;
    this.kp = kp;
    this.angriff = angriff;
    this.verteildigung = verteildigung;
  }

  //atribute
  private String name; //basis information
  private String typ;
  private String größe;
  private String gewicht;

  private int lvl; //traningssystem relevant
  private int entwicklunglvl;

  private int kp; //traning eventuell aufwerten
  private int angriff;
  private int verteildigung;

  //metoden
  public void fortschritt() {
    if (lvl >= entwicklunglvl) {
      int i = lvl - entwicklunglvl;
      setkp(getkp() + i * 4);
      setangriff(getangriff() + i * 2);
      setverteildigung(getverteildigung() + i * 3);
    }
  }

  public void tranieren() { setlvl(getlvl() + 100); }

  public int kamfkraftrechner() {
    int kampfkraft = getkp() + getangriff() + getverteildigung();
    return kampfkraft;
  }

  //hilfs metoden

  // name
  public String getname() { return name; }
  public void setname(String name) { this.name = name; }

  //typliste
  public String gettyp() { return typ; }
  public void settyp(String typ) { this.typ = typ; }

  //größe
  public String getgröße() { return größe; }
  public void setgröße(String größe) { this.größe = größe; }

  //gewicht
  public String getgewicht() { return gewicht; }
  public void setgewicht(String gewicht) { this.gewicht = gewicht; }

  //lvl
  public int getlvl() { return lvl; }
  public void setlvl(int lvl) { this.lvl = lvl; }

  //enwicklunglvl
  public int getentwicklunglvl() { return entwicklunglvl; }
  public void setentwicklunglvl(int entwicklunglvl) { this.entwicklunglvl = entwicklunglvl; }
  //kp
  public int getkp() { return kp; }
  public void setkp(int kp) { this.kp = kp; }

  //angriff
  public int getangriff() { return angriff; }
  public void setangriff(int angriff) { this.angriff = angriff; }

  //verteildigung
  public int getverteildigung() { return verteildigung; }
  public void setverteildigung(int verteildigung) { this.verteildigung = verteildigung; }
}

Edit: Formatierung auf Basis von Post 3 korrigiert.
 
Zuletzt bearbeitet von einem Moderator:
Moin, es sieht aus als hättest du den Code in Inline-Codeblöcke gepackt. Kannst du das noch editieren und in einen normalen Java-Codeblock packen? Siehe https://dev-community.de/help/bb-codes/

Zu deiner Frage: Ja klar, das ist möglich. Ich vermute, du benutzt im Moment statische Methoden für deine Objekte? Dadurch arbeitest du nicht wirklich mit Objekten, sondern eher nur mit Klassenmethoden.

Du brauchst einen Konstruktor und Instanzvariablen in einer Pokemon-Klasse. Erst dann kannst du zB 2 Gluraks haben, die unterschiedlich zueinander sind. Dann könntest du sowas machen:

Java:
Glurak glurak1 = new Glurak();
Glurak glurak2 = new Glurak();

System.out.println(glurak1.getLevel()); // LVL 1
System.out.println(glurak2.getLevel()); // LVL 1

glurak1.trainieren();

System.out.println(glurak1.getLevel()); // LVL 2
System.out.println(glurak2.getLevel()); // LVL 1

Kannst ja mal deine Klassen posten. Vererbung wäre auch eine Überlegung wert. ZB mit einer abstrakten Pokemon-Klasse, wenn du ein bisschen mehr mit Objektorientierung und Vererbung üben möchtest. Interfaces wären später auch eine Möglichkeit.
 
jetzt müsste es stimmen :)
Der obere Code ist die main Metode,
der unter die Klasse mit konstruktor, methoden etc.

Java:
public class Main {
  public static void main(String[] args) {

    // instanzen der klasse
    // Konstruktor: name, typ, größe, gewicht, lvl, entwicklunglvl, kp, angriff, verteildigung.
    Pokemonklasse Pikachu = new Pokemonklasse("Pikachu", "Elektro", "0,4m", "6,0kg", 1, 1, 15, 35, 30);
    Pokemonklasse Bisaflor = new Pokemonklasse("Bisaflor", "Pflanze Gift", "2,0m", "100kg", 1, 1, 50, 24, 45);
    Pokemonklasse Glurak = new Pokemonklasse("Glurak", "Feuer", "1,7m", "90kg", 1, 1, 45, 60, 40);
    Pokemonklasse Schiggy = new Pokemonklasse("Schiggy", "Wasser", "0,5m", "9,0kg", 1, 1, 16, 32, 25);
    Pokemonklasse Tauboga = new Pokemonklasse("Tauboga", "Veganer", "1,93m", "110kg", 1, 1, 99, 99, 99);

    Glurak.tranieren();
    Glurak.fortschritt();

    System.out.println();
    System.out.println();
    System.out.println(Glurak.getname() + " ist vom Typ " + Glurak.gettyp());
    System.out.println();
    System.out.println("Basisinformation");
    System.out.println("Größe: " + Glurak.getgröße() + "   Gewicht: " + Glurak.getgewicht());
    System.out.println();
    System.out.println("Kraft:");
    System.out.println("Lvl: " + Glurak.getlvl());
    System.out.println("Kp: " + Glurak.getkp());
    System.out.println("Angriff: " + Glurak.getangriff());
    System.out.println("Verteildigung: " + Glurak.getverteildigung());
    System.out.println("Kampfkraft: " + Glurak.kamfkraftrechner());

    Bisaflor.tranieren();
    Bisaflor.fortschritt();

    System.out.println();
    System.out.println();
    System.out.println(Bisaflor.getname() + " ist vom Typ " + Bisaflor.gettyp());
    System.out.println();
    System.out.println("Basisinformation");
    System.out.println("Größe: " + Bisaflor.getgröße() + "   Gewicht: " + Bisaflor.getgewicht());
    System.out.println();
    System.out.println("Kraft:");
    System.out.println("Lvl: " + Bisaflor.getlvl());
    System.out.println("Kp: " + Bisaflor.getkp());
    System.out.println("Angriff: " + Bisaflor.getangriff());
    System.out.println("Verteildigung: " + Bisaflor.getverteildigung());
    System.out.println("Kampfkraft: " + Bisaflor.kamfkraftrechner());
  }
}

public class Pokemonklasse {
  //konstruktor
  public Pokemonklasse(String name, String typ, String größe, String gewicht, int lvl, int entwicklunglvl, int kp, int angriff, int verteildigung) {
    this.name = name;
    this.typ = typ;
    this.größe = größe;
    this.gewicht = gewicht;
    this.lvl = lvl;
    this.entwicklunglvl = entwicklunglvl;
    this.kp = kp;
    this.angriff = angriff;
    this.verteildigung = verteildigung;
  }

  //atribute
  private String name; //basis information
  private String typ;
  private String größe;
  private String gewicht;

  private int lvl; //traningssystem relevant
  private int entwicklunglvl;

  private int kp; //traning eventuell aufwerten
  private int angriff;
  private int verteildigung;

  //metoden
  public void fortschritt() {
    if (lvl >= entwicklunglvl) {
      int i = lvl - entwicklunglvl;
      setkp(getkp() + i * 4);
      setangriff(getangriff() + i * 2);
      setverteildigung(getverteildigung() + i * 3);
    }
  }

  public void tranieren() { setlvl(getlvl() + 100); }

  public int kamfkraftrechner() {
    int kampfkraft = getkp() + getangriff() + getverteildigung();
    return kampfkraft;
  }

  //hilfs metoden

  // name
  public String getname() { return name; }
  public void setname(String name) { this.name = name; }

  //typliste
  public String gettyp() { return typ; }
  public void settyp(String typ) { this.typ = typ; }

  //größe
  public String getgröße() { return größe; }
  public void setgröße(String größe) { this.größe = größe; }

  //gewicht
  public String getgewicht() { return gewicht; }
  public void setgewicht(String gewicht) { this.gewicht = gewicht; }

  //lvl
  public int getlvl() { return lvl; }
  public void setlvl(int lvl) { this.lvl = lvl; }

  //enwicklunglvl
  public int getentwicklunglvl() { return entwicklunglvl; }
  public void setentwicklunglvl(int entwicklunglvl) { this.entwicklunglvl = entwicklunglvl; }
  //kp
  public int getkp() { return kp; }
  public void setkp(int kp) { this.kp = kp; }

  //angriff
  public int getangriff() { return angriff; }
  public void setangriff(int angriff) { this.angriff = angriff; }

  //verteildigung
  public int getverteildigung() { return verteildigung; }
  public void setverteildigung(int verteildigung) { this.verteildigung = verteildigung; }
}
 
Achso, bei deinem ersten Code fehlte der Anfang. Wegen deiner großgeschriebenen Variablennamen sah es für mich aus wie statische Methoden.

Du kannst ja bereits jetzt Variablen / Platzhalter verwenden und das machst du ja auch. Ob du das jetzt mit Pokemonklasse Glurak = new Pokemonklasse("Glurak", "Feuer", "1,7m", "90kg", 1, 1, 45, 60, 40); initialisierst oder mit Pokemonklasse player1= new Pokemonklasse("Glurak", "Feuer", "1,7m", "90kg", 1, 1, 45, 60, 40); macht keinen großen Unterschied.

Kann auch sein, dass ich deine Frage falsch verstanden habe. Grundsätzlich würde ich Variablennamen in Java in camelCase schreiben (kleiner Buchstabe am Anfang, jedes Neue Wort ein Großbuchstabe)
 
habe ca. 5 Objekt mit dem Konstruktor erstellt. Aktiv nutze ich nur 2 im code. Wenn ich ein Objekt in den Methoden und/oder System.out.println ändern möchte muss ich alle Objektaufrufe ein mal umschreiben. Cool wärs wenn ich einfach irgendwo Player1 = Glurak eingebe und vielleicht beim nächsten mal es mit Schiggy ersetze. So das ich nicht immer das halbe Programm umschreiben muss. Hoffe ich konnte das verständlich erklären 😅
 
Dann sollte das Objekt die Info von sich aus rausgeben, damit du es nicht in deiner Mainmethode alles machen musst. Nehmen wir mal zB deine Ausgabe der Basisinformation:

Ausgabe Basisinformation:
System.out.println(Glurak.getname() + " ist vom Typ " + Glurak.gettyp());
System.out.println();
System.out.println("Basisinformation");
System.out.println("Größe: " + Glurak.getgröße() + "   Gewicht: " + Glurak.getgewicht());
System.out.println();
System.out.println("Kraft:");
System.out.println("Lvl: " + Glurak.getlvl());
System.out.println("Kp: " + Glurak.getkp());
System.out.println("Angriff: " + Glurak.getangriff());
System.out.println("Verteildigung: " + Glurak.getverteildigung());
System.out.println("Kampfkraft: " + Glurak.kamfkraftrechner());

Den Code brauchst du wohl häufiger und dadurch kommt es zu doppeltem Code. Also könntest du in Pokemonklasse eine Objektmethode dafür schreiben:

toString:
public class Pokemonklasse {
  // ...

  @Override
  public String toString() {
    String info = this.getname() + " ist vom Typ " + this.gettyp();
    info += "\nBasisinformation";
    info += "\nGröße: " + this.getgröße() + "\tGewicht: " + this.getgewicht();
    info += "\nKraft:";
    info += "\nLvl: " + this.getlvl();
    // usw ...
    return info;
  }
}

// Dann aufrufen über
Pokemonklasse glurak1 = new Glurak("Glurak", 1, 2, 3, 4, "usw");
System.out.println(glurak1);

Achtung, hab Java schon wieder vergessen, Code ist nicht getestet und auch nicht schön.. toString müsste die Standard-Stringmethode von allen Objekten sein. Die wird in der Pokemonklasse überschrieben, wodurch du beeinflussen kannst, welcher Text da raus kommt. Sonst kommt da nämlich in der Regel nur die ID des Objektes und die Bezeichnung.

PS: Text müsste man mit den neuen Javaversionen auch übersichtlicher formatieren können. Ist hier nur ein Beispiel.
 
Ich war mal so frei und habe die Formatierung von Post 3 in den Mainpost übertragen :)
Übrigens.. getgröße() Wusste gar nicht, dass Java das überhaupt kompiliert o.o Auf jeden Fall solltest du auf Umlaute u.ä. verzichten. Man benutzt i.d.R. nur das Standardalphabet, Unterstrich und arabische Ziffern für Benennungen.
 
Eine frage die ich mir stelle ist. Warum nehmen Menschen sich die zeit und helfen hier im Forum anderen Kollegen. Ist es nur aus dem willen jemandem zu helfen, Prestige im Forum zu erhalten oder kann man sonst noch Vorteile durch einen Punkte erhalten. Würde mich mal Interessieren :)
 
Spontan würde ich sagen, es geht für mich einfach in Richtung Hobby.

Wenn ich es rationalisieren müsste, würde ich es vielleicht so erklären:
Wenn hier jemandem schon mal geholfen wurde, kommt die Person vielleicht mit ihrem nächsten Anliegen auch wieder hier her. Je mehr Leute sich hier im Forum tummeln, desto lebhafter wird das Forum und desto mehr Gelegenheiten bieten sich für den Austausch. Es wird unterhaltsamer und die Wahrscheinlichkeit steigt, dass auch mir bei Fragen geholfen werden kann.

Aber ich denke, da steckt bei mir gar nicht so viel Überlegung dahinter. Ich würde wohl auch unabhängig davon helfen, wenn ich grad Zeit und Lust hab.
 
Zurück
Oben Unten