2016-07-23 64 views
1

我正在編寫一個簡單的字符創建程序來學習類和Java編程。從A類返回到B類,然後返回Main類的值?

代碼工作正在進行中,無法運行,因爲我不知道如何使其工作。

我的問題是,我不知道如何正確地返回從另一個類到另一個類,然後到主類的細節/信息/值。

我想解決的是如何獲得存儲在weapon.javacharacteristic.java中的信息,以便我可以在player.java中使用它們。因此,讓我們說一個用戶爲戰士輸入1。然後我需要從他們自己的類中獲得武器和特徵的信息,並將SetClass方法的信息返回給Player.java

總之是這樣的:
如果用戶輸入= 1 => classType所是戰士=> weaponType是劍 不管怎麼說

這裏是我到目前爲止的代碼:

主程序:

import java.util.*; 

public class characterCreationProgam { 

    private static Scanner input = new Scanner(System.in); 

    public static void main1(String[] args) { 

     try { 
      System.out.println("Welcome to the super simple character creator "); 
      System.out.println("Choose class: 1: Warrior 2: Wizard 3: Rogue 4: Healer "); 
      int class = input.nextInt(); 

      // creating new OOP 
      Player newCharacter = new Player(class); 

      newCharacter.setClass(class); 

      System.out.println("New character has been made: "); 
      newCharacter.printPlayer(); 

      System.out.println("Print character stats? 1: Yes 2: No "); 
      int answer = input.nextInt(); 
      if (answer == 1) { 
       newCharacter.printClass(); 
      } else if (answer == 2) { 
       return; 
      } 

      System.out.println("Print weapon stats? 1: Yes 2: No "); 
      int answer2 = input.nextInt(); 
      if (answer2 == 1) { 
       newCharacter.printWeapon(); 
      } else if (answer2 == 2) { 
       return; 
      } 

      System.out.println("Shutting down the program."); 
      System.exit(1); 
     } catch (Exception e) { 
      System.out.println("Error! Program closing."); 
      System.exit(1); 
     } 
    } 
} 

Player.Java類

public class Player { 

    private int class; 
    private String sex; 
    private int age; 
    private int weapon; 

    public Player(int class) { 
     this.class = class; 
     this.sex = ""; 
     this.age = 0; 
     this.weapon = 0; 
    } 

    // Method for setting the class 
    public void setClass(int class) { 

     if (class == 1) { // Warrior 
      // something here to return proper character class and weapon 
      // from their own class files 
      this.sex = "Male"; 
      this.age = 45; 

     } else if (class == 2) { // Wizard 
      // something here to return proper character class and weapon 
      // from their own class files 
      this.sex = "Female"; 
      this.age = 30; 

     } else if (class == 3) { // Rogue 
      // something here to return proper character class and weapon 
      // from their own class files 
      this.sex = "Female"; 
      this.age = 25; 

     } else if (class == 4) { // healer 
      // something here to return proper character class and weapon 
      // from their own class files 
      this.sukupuoli = "Male"; 
      this.age = 21; 

     } else { 
      System.out.println("Unkown class selection. "); 
     } 
    } 

    // Method to return/print character info 
    public void printPlayer() { 
     System.out.println("class: " + this.class + "\nGender: " 
      + this.sex + "\nAge: " + this.age + "\nWeapon: " 
      + this.weapon); 
    } 

    // Method to return/print class info 
    public void printClass() { 
     // Something here to return classInfo from CharacterClass.Java 
    } 

    // Method to return/print weapon info 
    public void printWeapon() { 
     // Something here to return weaponInfo from Weapon.Java 
    } 
} 

Characterstics.Java類

public class Class { 

    private String className; 
    private int classLevel; 
    private String specialSkills; 

    public Class(String name, int level, String skills) { 
     this.className = name; 
     this.classLevel = level; 
     this.specialSkills = skills; 
    } 

    public void classType() { 

     if() { // Don't know what to put in here 
      this.className = "Warrior"; 
      this.classLevel = 90; 
      this.specialSkills = "Damage reduction"; 
      // Something to set correct weapon to this classType from 
      // weapon.java 

     } else if() { // Don't know what to put in here 
      this.className = "Wizard"; 
      this.classLevel = 75; 
      this.specialSkills = "Magic "; 
      // Something to set correct weapon to this classType from 
      // weapon.java 

     } else if() { // Don't know what to put in here 
      this.className = "Rogue"; 
      this.classLevel = 55; 
      this.specialSkills = "Dodge"; 
      // Something to set correct weapon to this classType from 
      // weapon.java 

     } else if() { // Don't know what to put in here 
      this.className = "Healer"; 
      this.classLevel = 69; 
      this.specialSkills = "Healing"; 
      // Something to set correct weapon to this classType from 
      // weapon.java 
     } 
    } 

    // Method to return characters details. 
    public void characterInfo() { 
     System.out.println("\nClass: " + this.className + "\nLevel: " 
      + this.classLevel + "\nSkills: " + this.specialSkills); 
    } 
} 

終於...
Weapon.Java類

public class Weapon { 

    // Luokan 
    private int damage; 
    private String type; 
    private String bonus; 

    public Weapon() { 
     this.damage = 0; 
     this.type = ""; 
     this.bonus = ""; 
    } 

    public void weaponType() { 

     if() { // Don't know what to put in here, class is warrior 
      this.type = "Sword"; 
      this.damage = 75; 
      this.bonus = "Armor penetration"; 

     } else if() { // Don't know what to put in here, class is wizard 
      this.type = "Staff"; 
      this.damage = 35; 
      this.bonus = "Spell casting"; 

     } else if() { // Don't know what to put in here, class is rogue 
      this.type = "Daggers"; 
      this.damage = 55; 
      this.bonus = "Poisoning enemies"; 

     } else if() { // Don't know what to put in here, class is healer 
      this.type = "Hammer"; 
      this.damage = 85; 
      this.bonus = "Stunning enemies"; 
     } 
    } 

    // Method to print weapon details. 
    public void weaponInfo() { 
     System.out.println("Weapon type: " + this.type + "\nDamage: " 
      + this.damage + "\nBonus: " + this.bonus); 
    } 
} 
+0

對不起,但我無法真正理解這個問題。儘管如此,我無法接受你的代碼作爲面向對象,你不能使用類作爲變量名稱,因爲它已經與語言有關 –

+0

而且,你需要處理你的縮進請 –

+0

我正在努力解決的問題是如何獲取存儲在weapon.java和特性java中的信息,以便我可以在player.java中使用它們。因此,讓我們說一個用戶爲戰士輸入1。然後,我需要從他們自己的類中獲取武器和特徵的信息,並將這些信息返回給Player.Java – Daniel

回答

2

你總是可以從其他類通過寫Getters得到Atributes 。

此外,正如佩德羅大衛已經說過的,您不能使用「class」命名類和變量,因爲它是Reserved Word

這是說,這是我對你的問題的解決方案(這是遠遠不夠完善,但希望你會看到如何輕鬆共享類之間的信息)

import java.util.*; 

public class CharacterCreationProgam { 

    private static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) { 

     try { 

      System.out.println("Welcome to the super simple character creator "); 
      System.out.println("Choose class: 1: Warrior 2: Wizard 3: Rogue 4: Healer "); 
      int race = input.nextInt(); 

      //creating new Player-Object: 
      Player player = new Player(race); 

      System.out.println("New character has been made: "); 

      //Character stats: 
      System.out.println("Print character stats? 1: Yes 2: No "); 
      int answer = input.nextInt(); 
      if (answer == 1) { 
       System.out.println("Race: " + player.getRace().getraceName() + 
         "\nGender: " + player.getSex() + 
         "\nAge: " + player.getAge()); 
      } 

      //Weapon stats: 
      System.out.println("Print weapon stats? 1: Yes 2: No "); 
      answer = input.nextInt(); 
      if (answer == 1) { 
       Weapon playerWeapon = player.getWeapon(); 
       System.out.println("Weapon Type: " + playerWeapon.getType() + 
         "\nDamage: " + playerWeapon.getDamage() + 
         "\nBonus: " + playerWeapon.getBonus()); 
      } 

     } catch (Exception e) { 
      System.err.println("Error: " + e); 
     }finally{ 
      input.close(); 
     } 


    } 

} 

這是我在Player.java去:

public class Player { 

    private Race playerRace; 
    private String sex; 
    private int age; 
    private Weapon weapon; 


    public Player(int race) throws Exception{ 
     setRace(race); 
     setAtributes(); 
     setWeapon(); 
    } 

    private void setRace(int race) throws Exception{ 
     this.playerRace = new Race(race); 

    } 

    private void setAtributes() throws Exception{ 

     switch (playerRace.getraceName()) { 
      case "Warrior": 
       this.sex = "Male"; 
       this.age = 45; 
       break; 

      case "Wizard": 
       this.sex = "Female"; 
       this.age = 30; 
       break; 

      case "Rogue": 
       this.sex = "Female"; 
       this.age = 25; 
       break; 

      case "Healer": 
       this.sex = "Male"; 
       this.age = 21; 
       break; 

      default: 
       throw new Exception(); 
     } 
    } 

    private void setWeapon() throws Exception{ 
     weapon = new Weapon(playerRace); 
    } 

    public String getSex(){ 
     return sex; 
    } 

    public int getAge(){ 
     return age; 
    } 

    public Weapon getWeapon(){ 
     return weapon; 
    } 

    public Race getRace(){ 
     return playerRace; 
    } 

} 

我Race.java:

public class Race { 

    private String raceName; //Enum would be BP 
    private int raceLevel; 
    private String specialSkill; //Another Class for the skills would be Nice in the long run 

    public Race(int race) throws Exception{ 
     setRace(race); 
    } 


    private void setRace(int race) throws Exception{ 

     switch (race) { 
      case 1: //Warrior 
       this.raceName = "Warrior"; 
       this.raceLevel = 90; 
       this.specialSkill = "Damage reduction"; 
       break; 

      case 2: //Wizard 
       this.raceName = "Wizard"; 
       this.raceLevel = 75; 
       this.specialSkill = "Magic"; 
       break; 

      case 3: //Rogue 
       this.raceName = "Rogue"; 
       this.raceLevel = 55; 
       this.specialSkill= "Dodge"; 
       break; 

      case 4: //Healer 
       this.raceName = "Healer"; 
       this.raceLevel = 69; 
       this.specialSkill= "Healing"; 
       break; 

      default: 
       throw new Exception(); //you should find a fitting Exception for this 
     } 
    } 

    public String getraceName(){ 
     return this.raceName; 
    } 

    public int getraceLevel(){ 
     return this.raceLevel; 
    } 

    public String specialSkill(){ 
     return this.specialSkill; 
    } 

} 

而且Weapon.java:

public class Weapon { 

    private int damage; 
    private String type; 
    private String bonus; 

    public Weapon(Race race) throws Exception{ 
     setWeapon(race); 
    } 

    private void setWeapon(Race race) throws Exception{ 
     switch (race.getraceName()) { 
      case "Warrior": 
       this.type = "Sword"; 
       this.damage = 75; 
       this.bonus = "Armor penetration"; 
       break; 

      case "Wizard": 
       this.type = "Staff"; 
       this.damage = 35; 
       this.bonus = "Spell casting"; 
       break; 

      case "Rogue": 
       this.type = "Daggers"; 
       this.damage = 55; 
       this.bonus = "Poisoning enemies"; 
       break; 

      case "Healer": 
       this.type = "Hammer"; 
       this.damage = 85; 
       this.bonus = "Stunning enemies"; 
       break; 

      default: 
       throw new Exception(); 
     } 
    } 


    public int getDamage(){ 
     return damage; 
    } 

    public String getType(){ 
     return type; 
    } 

    public String getBonus(){ 
     return bonus; 
    } 

} 

所以,你可以看到我使用Switch語句和來自對象的getters。我希望這有些幫助,如果您有任何問題,請詢問;)

+1

這是一個難以置信的給予。你告訴他如何做到這一點,它的工作原理。這就是說這遠不是好的面向對象設計。感謝記住我關於關鍵字「保留」雖然:) –

+0

我同意,這不是很好。我試圖保持接近寫他寫的東西,而不是寫我自己的版本,我自己也不是專家;) –

+0

但我希望它顯示寫一個getter方法是多麼容易,這是我認爲他的原始問題 –