2017-12-28 53 views
0

Nur als Referenz, ich habe wie eine High-School-Klasse auf Java genommen, so sollte diese Frage super einfach sein, darauf zu reagieren. Ich habe nur Schwierigkeiten, einen Weg zu finden, eine Klassenmethode, den Konstruktor, als neues Objekt aufzurufen, ohne neue Werte für die Parameter einzugeben. Der Konstruktor sieht wie folgt aus:Auf einen Konstruktor verweisen, ohne Parameterwerte zurückzusetzen?

public Skills(int courage, int intelligence, int stamina, int crafting, 
    int blacksmithery, int herbalism, int slingSkill, 
    int bowSkill, int swordSkill, int armor, int stealth, int 
    lifeForceSkill){ 
     this.courage = courage; 
     this.intelligence = intelligence; 
     this.stamina = stamina; 
     this.crafting = crafting; 
     this.blacksmithery = blacksmithery; 
     this.herbalism = herbalism; 
     this.slingSkill = slingSkill; 
     this.bowSkill = bowSkill; 
     this.swordSkill = swordSkill; 
     this.armor = armor; 
     this.stealth = stealth; 
     this.lifeForceSkill = lifeForceSkill; 
} 

Und wenn ich es mir vom Hauptmethode etablieren ich dies tun:

Skills skills = new Skills(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); 

Um alle Ebenen auf 1 gesetzt und dann habe ich die Objekt Fähigkeiten für die Arbeit mit später. (Bekomme ich die Begriffe "Konstruktoren" und "Objekte" durcheinander? Wenn es falsch ist, wechsle einfach alle in Gedanken), denke ich, dass ich zumindest damit einverstanden bin.

Das Problem ist, ich habe eine toString() -Methode in der Klasse Skills, die ich in einer separaten Methode in der Hauptklasse aufrufen möchte.

Natürlich wirft das Objekt, das ich hier erstelle, einen Fehler, weil ich Skills() nicht einfach schreiben kann; ohne alle zwölf Werte für den Parameter einzugeben. Wie kann ich die Methode aus der Skills-Klasse aufrufen, wenn ich dafür kein Objekt erstellen kann? Es ist zwingend erforderlich, dass sich die Werte nicht ändern, und da sie variabel sind und sich mit dem Programm ändern, kann ich keinen Wert für sie eingeben.

Ich weiß, es ist wahrscheinlich eine super grundlegende Frage, aber das ist das Niveau, auf dem ich bin, so würde jede super grundlegende Antworten hilfreich sein. Sollte nicht zu viel Zeit in Anspruch nehmen. Danke im Voraus!

+0

Dies könnte bei Stackoverflow besser sein, da es mehr Implementierungsebene ist. Frage: Wollen Sie ein neues 'Skills' Objekt erstellen, nur um' toString() 'zu aktivieren? Wenn Sie am Anfang Änderungen vornehmen, werden Sie diese nicht sehen, selbst wenn Sie Ihren Kompilierungsfehler beheben sollten. Auch "System.out.println (skills)" funktioniert genauso gut, da 'println()' ein 'Objekt' annehmen kann. Für ein 'Objekt' ruft es automatisch' toString() 'auf. –

+0

Kann nützlich sein: https://study.com/academy/lesson/static-vs-nn-static-methods-in-java.html – algrid

Antwort

1

Warum machen Sie Ihr Skill-Objekt nicht einfach zu einem statischen Feld, anstatt es innerhalb der Hauptmethode zu erstellen?

public class WhateverYourClassIsCalled { 
    static Skills skills = new Skills(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); 

    public static void main(String[] args) { 
     // ... 
    } 

    void yourOtherMethod() { 
     // ... 
     else if (optionChoice.equalsIgnoreCase("View Skills")) { 
      System.out.println(skills.toString()); 
      break; 
     } 
    } 
} 
+1

Oder Sie könnten statische Globals vermeiden, indem Sie die Methode übergeben, was sie benötigt: yourOtherMethod (skills); – CandiedOrange

Verwandte Themen