2017-09-29 6 views
0

継承を使用して小さなキャラクタビルダを作成しようとしています。私はCreateCharacter CharacterRaceとDwarfクラスを持っています。私はCreateCharacterでCharacterRace型の変数を作成し、CharacterRaceでDwarf型の変数を作成しました。私は主なメソッドのデモでCreateCharacterのオブジェクトを持っていて、Dwarfクラスのメソッドを呼び出させず、矮星のキャラクターにしています。私はcharacterRaceで矮星オブジェクトを渡すことを考えていますか?私はちょうど方法がわからない。私のコードをheres:(その少し長い私の謝罪)Object Java RPGキャラクタビルダを使用したアクセスクラスの変更

package characterCreation; 

public class CreateCharacter { 
    private CharacterClass characterClass; 
    private CharacterRace characterRace; 
    private Name name; 
    public CreateCharacter(String characterName,CharacterClass characterClass,CharacterRace characterRace) { 
     this.name = new Name(characterName); 
     this.characterClass = characterClass; 
     this.characterRace = characterRace; 
    } 
    public CreateCharacter(){ 

    } 
    public CharacterClass getCharacterClass() { 
     return characterClass; 
    } 
    public void setCharacterClass(CharacterClass characterClass) { 
     this.characterClass = characterClass; 
    } 
    public CharacterRace getCharacterRace() { 
     return characterRace; 
    } 
    public void setCharacterRace(CharacterRace characterRace) { 
     this.characterRace = characterRace; 
    } 
    public Name getName(){ 
     return name; 
    } 
    public void setName(Name name){ 
     this.name = name; 
    } 
    @Override 
    public String toString() { 
     return "CreateCharacter [name=" + name + ", characterRace=" + characterRace + ", characterClass=" 
       + characterClass + "]"; 
    } 



} 


    package characterCreation; 

    public class CharacterRace { 
     protected String raceName; 
     protected double mana; 
     protected double hp; 
     private Dwarf dwarf; 
     public CharacterRace(String raceName,double mana, double hp) { 
      this.raceName = raceName; 
      this.mana = mana; 
      this.hp = hp; 
     } 
     public CharacterRace(){ 

     } 
     public String getRaceName() { 
      return raceName; 
     } 

     public Dwarf getDwarf() { 
      return dwarf; 
     } 

     public void setDwarf(Dwarf dwarf) { 
      this.dwarf = dwarf; 
     } 
     public double getMana() { 
      return mana; 
     } 

     public double getHp() { 
      return hp; 
     } 

     @Override 
     public String toString() { 
      return "CharacterRace [dwarf=" + dwarf + "]"; 
     } 

     } 

    package characterCreation; 

public class Dwarf extends CharacterRace { 



    public Dwarf(String raceName,double mana, double hp) { 
     super(raceName,mana,hp); 

    } 

    public double getMana() { 
     mana = 5; 
     return mana; 
    } 

    public double getHp() { 
     hp = 10; 
     return hp; 
    } 


    public String getRaceName(){ 
     return raceName = "Dwarf"; 
    } 
    @Override 
    public String toString() { 
     return "Dwarf [mana=" + mana + ", hp=" + hp + ", getRaceName()=" + getRaceName() + "]"; 
    } 
} 
package characterCreation; 

import java.util.Scanner; 

public class CharacterDemo { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     CreateCharacter create = new CreateCharacter(); 
     System.out.println("Choose your Race: "); 
     String userRace = input.next(); 

     create.setName(new Name("Daxel")); 
     //create.setCharacterRace(race); 
     System.out.println(create.getName()); 
     //Dwarf dwarf = new Dwarf(); 
     System.out.println(create.getCharacterRace().getDwarf().getRaceName()); 
     //System.out.println(create.getCharacterRace().setDwarf(new Dwarf("dwarf",10,5))); 
    } 

} 

答えて

0

あなたは作成時にsetCharacterRace()を呼び出さなければなりません。次にcharacterRaceでsetDwarf()を呼び出します。それ以外の場合、create.getCharacterRace()はnullになり、create.getCharacterRace()。getDwarf()はNullPointerExceptionをスローします。

私はあなたのコードの背後にあるロジックを理解しますが、以下のコードを試してみません:

public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     CreateCharacter create = new CreateCharacter(); 
     System.out.println("Choose your Race: "); 
     String userRace = input.next(); 

     create.setName(new Name("Daxel")); 

     //***********new code starts****** 
     CharacterRace myRace = new CharacterRace(userRace, 20, 9); 
     myRace.setDwarf(new Dwarf("dwarf",10,5)); 
     create.setCharacterRace(myRace); 
     //***********new code ends******** 

     //create.setCharacterRace(race); 
     System.out.println(create.getName()); 
     //Dwarf dwarf = new Dwarf(); 
     System.out.println(create.getCharacterRace().getDwarf().getRaceName()); 
     //System.out.println(create.getCharacterRace().setDwarf(new Dwarf("dwarf",10,5))); 
    } 
+0

は私がちょうどすべての異なるメソッドを呼び出す方法を把握しようとしていたこの時点では、どうもありがとうございましたオブジェクトを作るためのさまざまなクラスは、後で入力したものに基づいて呼び出すためのユーザー入力を実装するつもりでした。これを設計するより良い方法があるのだろうか、正しい軌道に乗っているのだろうか? – Aaronbob49

+0

CharacterRaceオブジェクトを構築するために私はユーザ入力 "userRace"を使う私の更新されたコードを見てください。繰り返しますが、あなたのゲーム/キャラクター/レースのデザイン方法によってまったく異なります。同様に、Dwarf自体がCharacterRaceを拡張しているのに対し、DwarfをCharacterRaceのプロパティとして配置する理由は何ですか? –

関連する問題