Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写基于用户输入的构造函数?_Java_Project - Fatal编程技术网

Java 如何编写基于用户输入的构造函数?

Java 如何编写基于用户输入的构造函数?,java,project,Java,Project,我希望有多个类,并希望根据用户输入构建一个类。 具体地说,我正在写一篇文本冒险,并且为玩家可以成为的每种类型的“玩家类”都有一个类。我的三个类扩展了一个父“stats”类 以下是我代码的一部分: (为了提高写作效率,我正在使用打印构造函数) 可能是这样的 public interface Character { // here is all common method of your Character } public class CharacterFactory { priva

我希望有多个类,并希望根据用户输入构建一个类。 具体地说,我正在写一篇文本冒险,并且为玩家可以成为的每种类型的“玩家类”都有一个类。我的三个类扩展了一个父“stats”类

以下是我代码的一部分: (为了提高写作效率,我正在使用打印构造函数)


可能是这样的

public interface Character {
  // here is all common method of your Character
}

public class CharacterFactory {
    private class CharacterMage implements Character {
       // here is implementation
    }

    private class CharacterAssasin implements Character {
       // here is implementation
    }

    public Character createCharacter(String characterName) {
         switch (characterName) {
             case "Mage": 
                 return new CharacterMage();

             case "Assasin":
                 return new CharacterAssasin();

             default:
                 throw new IllegalArgumentException("Incorrect character type " + characterName);
    }
}

我将假定这三个子类的父类称为
MainCharacter

首先,
mainharacter
需要是
mainharacter
类型,除非您愿意在每次使用
mainharacter
时执行
instanceof
检查和强制转换。您需要在
mainCharacter
上执行的每个操作都需要在
mainCharacter
中定义,而不是在子类中定义

其次,您需要在
开关
外部声明
main字符
,然后在
开关
中定义它:

MainCharacter mainCharacter; // Declare it outside
switch (answer) {
        case 1:
            {
                adv.print("you are a mage");
                mainCharacter = new MainCharacterMage(); // Then define it on the inside
                break;
            }
        case 2:
            {
                adv.print("you are an assasin");
                mainCharacter = new MainCharacterAssasin();
                break;
            }
        case 3:
            {
                adv.print("you are a fighter");
                mainCharacter = new MainCharacterFighter();
                break;
            }
        default:
            adv.print("error wrong answer");
            break;
    }

根据类之间的差异,对于每个类,只能使用一个
main字符类
和不同的工厂方法

e、 g设置如下所示的MainCharacter类:

public class MainCharacter{
    public int health;
    public int damage;
    // etc.
    public static MainCharacter buildMage(){
        health = 5;
        damage = 20;
        // etc.
    }
    public static MainCharacter buildAssassin(){
        health = 10;
        damage = 10;
        // etc.
    }
    public static MainCharacter buildMage(){
        health = 20;
        damage = 5;
        // etc.
    }
}
switch (answer) {
    case 1:
        {
            adv.print("you are a mage");
            MainCharacter main_character = MainCharacter.buildMage();
            break;
        }
    case 2:
        {
            adv.print("you are an assasin");
            MainCharacter main_character = MainCharacter.buildAssassin();
            break;
        }
    case 3:
        {
            adv.print("you are a fighter");
            MainCharacter main_character = MainCharacter.buildFighter();
            break;
        }
然后像这样创建主角色:

public class MainCharacter{
    public int health;
    public int damage;
    // etc.
    public static MainCharacter buildMage(){
        health = 5;
        damage = 20;
        // etc.
    }
    public static MainCharacter buildAssassin(){
        health = 10;
        damage = 10;
        // etc.
    }
    public static MainCharacter buildMage(){
        health = 20;
        damage = 5;
        // etc.
    }
}
switch (answer) {
    case 1:
        {
            adv.print("you are a mage");
            MainCharacter main_character = MainCharacter.buildMage();
            break;
        }
    case 2:
        {
            adv.print("you are an assasin");
            MainCharacter main_character = MainCharacter.buildAssassin();
            break;
        }
    case 3:
        {
            adv.print("you are a fighter");
            MainCharacter main_character = MainCharacter.buildFighter();
            break;
        }

注意:这减少了您必须创建的类的数量,但是,只有当类之间的差异只是不同的初始统计数据时,这才是合适的。如果不同的类实际上有本质上不同的方法,那么就需要Inheritance。

@Carcigenicate我有一个扩展到gme中所有字符(包括三个类)的主类,我是否需要使用父类构造它,并在开关中指定?