[JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Defenz0r

BIOS-Overclocker(in)
[JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Hallo Leute, mein Problem sieht wiefolgt aus:

Ich habe eine Klasse namens Moveconstructor -> Parameter -> private int AtackStrength;
private String AtackName;

Er wird wiefolgt initialisiert:

Code:
public Moveconstructor()    { this(0,"" ); }

Danach das übliche:

Code:
 public Moveconstructor(   int AtackStrength, String AtackName   )
  
  {
    this.AtackStrength    =         AtackStrength;
    this.AtackName        =         AtackName;
  }

Dann die ganzen Getter und Setter vom MoveConstructor... könnt ihr euch denken

Mein Problem ist nun das wenn ich nun neue Instanzen in einer andren Klasse generiere und setze:

Code:
 class Moves {
  
  Moveconstructor Hieb = new Moveconstructor();

  public void  SetzeDieStrings() {
    Hieb.setAtackName("Hieb");
    }
  
  
  public String SpuckDieStringsAus(){
    
    return Hieb.getAtackName();
    }
  
}


Das ich immer wieder einen leeren Rückgabewert zurückbekomme, also der MoveConstructor an sich hat ja eigentlich schon getter usw aber es will nicht funktionieren.

Immer leerer Rückgabewert



Gruß
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Hi, warum rufst Du im Default-Konstruktor den parameterisierten Konstruktor auf?
Das habe ich so in der Art noch nie gesehen. Der Sinn dahinter erschließt sich mir nicht.

Vielleicht postest Du mal Deine kompletten Klassen? Dann ist der Fehler bestimmt schnell gefunden.
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Okay, ich poste euch die 2 SubKlassen:

Code:
class Moveconstructor
{
  
  // Anfang Attribute
  private int AtackStrength;
  private String AtackName;
  // Ende Attribute
  
  
  public Moveconstructor()    { this(0,"" ); }
  
  public Moveconstructor(   int AtackStrength, String AtackName   )
  
  {
    this.AtackStrength    =         AtackStrength;
    this.AtackName        =         AtackName;
  }

  // Anfang Methoden
  public int getAtackStrength() {
    return AtackStrength;
  }

  public void setAtackStrength(int AtackStrength) {
    this.AtackStrength = AtackStrength;
  }

  public String getAtackName() {
    return AtackName;
  }

  public void setAtackName(String AtackName) {
    this.AtackName = AtackName;
  }

  // Ende Methoden
  
}


Code:
 class Moves {
  
  Moveconstructor Hieb = new Moveconstructor();

  public void  SetzeDieStrings() {
    Hieb.setAtackName("Hieb");
    }
  
  
  public String SpuckDieStringsAus(){
    
    return Hieb.getAtackName();
    }
  
}
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Hi, warum rufst Du im Default-Konstruktor den parameterisierten Konstruktor auf?
Das habe ich so in der Art noch nie gesehen. Der Sinn dahinter erschließt sich mir nicht.
Das ist schon okay so, auch gar nicht mal so unüblich. Du kannst dann im Default-Constructor einen parametrisierten Constructor mit Standardwerten aufrufen.

Zum Thema: Soweit sieht das eigentlich gut aus. Rufst du denn bei Moves die SetzeDieStrings() überhaupt auf? Der Konstruktor erzeugt ja einen leeren String und wenn du den String nicht mit was anderem belegst, bleibt der auch leer.

So am Rande: Soll das nicht "attack" heißen? ;-)
 
Zuletzt bearbeitet:
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Jo
Ich gebe den AtackNamen in einem seperaten Menu aus
Wundere mich aber warum die Ausgabe immer Leer ist
Ja ich habe eine Hauptklasse^^
Wie meinst du das? Der String ist schon belegt?
Kannst du mir das mal eben zeigen?

Bin Total verwundert warum da nen leerer String rauskommt


Gruß
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Du setzt den String ja erst in der Methode SetzeDieStrings(). Wenn du die nicht irgendwann mal aufrufst (oder eine andere, die einen String setzt), wird ja nur der im Konstruktor gesetzte Wert ausgegeben.
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Wie ruf ich den auf?
Ich hab doch Hieb.setAtackName("Hieb"); gesetzt.

Warum kann ich dann nicht in einer anderen Klasse z.B AtackMenu soetwas machen:

Moves AtackList = new Moves();

System.out.println(AtackList.SpuckDieStringsAus());

Es kommt immer nichts raus
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Code:
class Moves {
    Moveconstructor Hieb = new Moveconstructor();

    // rufst du diese Methode irgendwo mal auf?
    public void  SetzeDieStrings()
    {
        Hieb.setAtackName("Hieb");
    }

    public String SpuckDieStringsAus(){
        return Hieb.getAtackName();
    }
}
Siehe Kommentar

Nur weil du die Methode definiert hast, rufst du sie noch nicht auf. Wenn du das in der Form Moves m = new Moves() automatisch haben willst, musst du das im Konstruktor der Moves Klasse machen. Ich habe aber jetzt irgendwie die Vermutung, mit einem objektorientierten Ansatz würdest du da besser fahren (hängt aber von deinem genauen Vorhaben ab).

Code:
// Abstrakte Basisklasse für Angriffsbewegungen
abstract class AttackMove {
     // muss von abgeleiteter Klasse implementiert werden
    public abstract String getName();
}

// abgeleitete Klasse für Hieb-Angriffe
class HiebMove extends AttackMove {
    // implementierung für "Hieb"
    public String getName() {
        return "Hieb";
    }
}
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Also ich bin im ersten Ausbildungsjahr, und ja wir lernen Objektorientiertes Programmieren.
Kenne die Commands abstract und extends leider noch nicht.
Das wäre doch aber sehr dürftig, für jeden Move ne eigene Klasse zu schreiben.
Schließlich sind es ja nur AttackName + AttackStrength
Dachte mir eher das ich die überall mit der Instanz die ich in der Klasse Moves angelegt habe mit
Instanz.getAtackName generisch abrufen kann.

Merkwürdig, ich habe auch noch einen Attribs Constructor der int übermittelt, bei dem Funktioniert alles Problemlos.
Der Unterschied ist, das da alles in der Hauptklasse gesetted wird -> Jede Klasse kann mit einer neuen Instanz Problemlos darauf zugreifen warum auch immer
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Ah okay. Na dann lassen wir das besser erst mal mit dem Objektorientierten ^^

Wenn du die Werte passend initialisierst, kannst du das aber auch so abrufen. Meine Vermutung ist halt, dass du die Werte nicht setzt. Wenn du die SetzDieStrings() Methode im Konstruktor der Moves Klasse aufrufst, müsste das aber funktionieren.
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Habs ...

Musste vor dem ausgeben den Setter ausführen

Funktioniert
 
AW: [JAVA] Neue Instanz eines Constructors, Rückgabewert Problem

Sicher musst Du den Setter vor dem Getter ausführen, sonst wird ja kein Wert gesetzt.
Du solltest Dich trotzdem mal mit "abstract" und besonders mit "extends" beschäftigen.
Auch wenn es jetzt funktioniert, ist mir der Sinn Deiner Klassen nicht ganz klar geworden.
 
Zurück