Objekt als Attribut speichern

Hieu

Aktives Mitglied
Hallo ich habe eine Klasse die heißt Superhero und die hat als Attribut Superpower nun hab ich auch eine Klasse die Superpower heißt und da ist der Name und die Fähigkeitsbeschreibung als Attribut festgelegt. Hab auch Getter und Setter erstellt. Dann hab ich ein Objekt super1 als Superpowerobjekt erzeugt und hab versucht meinem erzeugten Helden das Attribut Superpower zu geben mit Hero.setSuperpower(super1); aber es funktioniert nicht
 
Was funktioniert nicht? Fehlermeldung? Minimaler Code? Bitte Codetags verwenden: Die drei Punkte rechts vom Smiley - Code - Java ...
 
Code:
private static void createSuperhero(){
        //Abfrage nach Namen
        System.out.println("\nWelchen Namen soll der Held haben?");
        //Scannerobjekt erstellen
        Scanner scanner = new Scanner(System.in);
        //Scannervariable erstellen
        String name2 = scanner.nextLine();
        //Scanner schließen
        scanner.close();
        
        //Held erstellen
         Superhero hero  = new Superhero(name2);
         hero.setID();
         hero.setHealthpointsCurrent(50);
         hero.setHealthpointsMax(50);
         hero.setExperiencePoints(0);       
         hero.setReadytofight(true);
         hero.setInFight(false);
         hero.setAlive(true);
        
         //Superpower bestimmen
         System.out.println("Was soll die erste Superpower sein?");
         Scanner scanner2 = new Scanner(System.in);
         String Auswahl = scanner2.nextLine();
        
         switch(Auswahl) {
         case "1" : hero.setSuperpower1(super1);  // hier liegt der Fehler
Code:
public static void main(String[] args) {

              
        //Superpower erstellen
                Superpower super1 = new Superpower("Eispickel");
                Superpower super2 = new Superpower("Feurball");
                Superpower super3 = new Superpower("Blattschwert");
                Superpower super4 = new Superpower("Wasserstoß");
                Superpower super5 = new Superpower("Dunkelnebel");
                Superpower super6 = new Superpower("Lichtsstrahl");
                
                //Superpowerattribute setzen
                super1.setactionDescription("schießt Eisplitter auf den Gegner");
                super1.setid();
                
                super2.setactionDescription("schießt einen Feuerball auf den Gegner");
                super2.setid();
                
                super3.setactionDescription("greift den Gegner mit einem Blattschwert an");
                super3.setid();   
                
                super4.setactionDescription("Durchstößt den Gener mit Wasser");
                super4.setid();
                
                super5.setactionDescription("Umhüllt den Gegner mit Nebel");
                super5.setid();
                
                super6.setactionDescription("Durchdringt den Gegner mit einem Lichtstrahl");
                super6.setid();
 
Code:
public class Superpower {
    
    // Attribute
    private String id;
    private String name;       
    private String actionDescription;
    
    //Konstruktor
    public Superpower(String name) {
        this.name = name;
    }
    
    //setter
    public void setid() {
    id = UUID.randomUUID().toString();     
        }
    
    public void setname(String value) {   
    name = value;
    }

    public void setactionDescription(String value) {     
    actionDescription = value;
    }
    
    //getter
    public String getID() {
       return id;
    }
    
    public String getName() {
       return name;
    }
  
    public String getActiondescription() {
       return actionDescription;
    }
}

und hier hab ich die Klasse Superpower erstellt
 
Code:
public class Superhero {
    
    //Attribute
            private String id;
            private String name;
            private int healthPointsCurrent;
            private int healthPointMax;
            private int experiencePoints;
            private Superpower superpower1;
            private Superpower superpower2;
            private Superpower superpower3;
            private boolean readyToFight;
            private boolean inFight;
            private boolean alive;
            
            //Anzahl der Heroes bestimmen
            static int anzahlHeroes = 0;
    
    //Konstruktor       
    public Superhero(String name) {
        this.name = name;
        anzahlHeroes++;
    }
    
    //setter
    
    public void  setID() {
                id = UUID.randomUUID().toString();
                         }   
    
    public void setHealthpointsCurrent(int value) {
        healthPointsCurrent = value ;
                                                  }   
      
    public void setHealthpointsMax(int value) {
        healthPointMax = value;
                                              }

    public void setExperiencePoints(int value) {
        experiencePoints = value;
                                               }

    public void setSuperpower1(Superpower value){
        superpower1 = value;
                                                }
    
    public void setSuperpower2(Superpower value){
        superpower2 = value;
    }
    
    public void setSuperpower3(Superpower value){
        superpower3 = value;
    }
    
    public void setReadytofight(boolean value) {
    readyToFight = value;
                                                }
    
    public void setInFight(boolean value) {
        inFight = value;
                                          }
    
    public void setAlive(boolean value) {
        alive = value;
                                        }
    
    // getter
    
    public String getID() {
        return id;
                          }
    public     String getName() {
        return name;
    }
    
    public int getHealthpointCurrent() {
        return healthPointsCurrent;
    }
    
    public int getHealthpointsmax() {
        return healthPointMax;
    }
    
    public int getExperiencePoints() {
        return experiencePoints;
    }
    
    public Superpower getSuperpower1() {
        return superpower1;
    }
    
    public Superpower getSuperpower2() {
        return superpower2;
    }
    
    public Superpower getSuperpower3() {
        return superpower3;
    }
    
    public boolean getReadytofight() {
        return readyToFight;
    }
    
    public boolean getInFight() {
        return inFight;
        }
    
    public boolean getAlive() {
        return alive;
    }
    
    //Operationen
    
    public void attack(Superpower value) {
    
    }
    
    public void takeDamage() {}
    
    public void flee() {}
    
    public void dance() {
        System.out.println("Dein Held fängt an zu tanzen!");
                        }
    
    public void sleep() {}
}
 
Vermutlich sind die Variablen super1-x nicht mehr in ihrem Gültigkeitsbereich. Wenn du sie in einer Methode anlegst, dann werden sie am Ende dieser Methode ungültig und du kannst sie nicht innerhalb einer anderen Methode verwenden.
 
Generell würde ich dir auch empfehlen auf die Setter wie z.B. bei Superpower für ID und Description zu verzichten und diese Werte direkt beim Konstruktor mit zu initialisieren. Ein Konstruktor sollte eine voll funktionsfähige Klasse erzeugen.
 
Du könntest sowas machen.

Java:
public class Superspiel {
   
    private ArrayList<Superpower> powerList = new ArrayList<>();
   
    public static main(String[] args) {
        powerList.add(new Superpower("Blitz", "Schleudert Blitze.."));
        // usw.
    }
}

Aus dieser Liste kannst du sie dann anzeigen und in den Superhelden übernehmen. Schau dir dazu in der Doku mal die Methoden von ArrayList an.
 

Neue Themen


Zurück
Oben