Daniel
Daniel

Reputation: 99

Returning values from class A to class B and then to Main class?

I am programming a simple character creation program to study classes and Java programming.

The code is work in progress and not runnable because I don't know how to make it work.

My problem is that I don't know how to properly return details/info/values from another class to another class and then to the main class.

What I am trying to solve is how to get the information stored in weapon.java and characteristic.java , so that I can use them in player.java. So lets say a user inputs 1 for warrior. Then I need to get the information for Weapon and Characteristics from their own classes, and return this information for SetClass Method in Player.java.

In short something like:
If user input = 1 => classType is Warrior => weaponType is Sword Anyways

Here is my code so far:

The main program:

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 class

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 class

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);
    }
}

and finally...
Weapon.Java class

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);
    }
}

Upvotes: 1

Views: 203

Answers (1)

Eric F.
Eric F.

Reputation: 86

You can always get Atributes from other classes by writing Getters.

Also, as Pedro David already said you can't use "class" for naming classes and variables as it is a Reserved Word.

This being said, here is my solution for your problem (It's far from perfect but hopefully you'll see how to easily share information between classes)

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();
        }


    }

}

Here is my go at a 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;
    }

}

My 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;
    }

}

And the 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;
    }

}

So as you can see I use Switch statements with the getters from the objects. I hope this is somewhat helpful, if you have any questions please ask ;)

Upvotes: 2

Related Questions