使用用户输入

时间:2017-08-18 23:36:40

标签: java arrays string

所以我已经在互联网上寻找修复,我已经获得了使用地图,反射方法和其他许多东西的提示,但没有任何方法按照我想要的方式工作。

我的目标是做这样的事情:

我有一个分为数组的字符串。示例:“setVal strength 3”

lineArray [0] = setVal

lineArray [1] =力量

lineArray [2] = 3

我想接受lineArray [1]并添加“Feats”。在它的开头,所以它,例如,像“Feats.strength”(我可以用字符串变量做)

然后我想将该变量(Feats.strength,它是Feats类中的一个名为strength的双精度)设置为lineArray [2](这是一个双精度)。

else if(lineArray[0].equals("setVal") && lineArray.length == 2){

    //Take lineArray[1], which is the name of a variable in 
    another class, specifically Feats.strength, Feats.agility, etc.
    //Set that value in lineArray[1] to lineArray[2]

    //Something like
    set("Feats." + lineArray[1], lineArray[2]);

    Feats.resetStat();

}

这有什么意义吗?感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

也许这样的事情可行吗?

// Application.java
public class Application {

    public static void main(String[] args){
        String field = "setVal strength 3";
        Feats.resolveValue(field);

        String field2 = "getVal strength";
        Integer value = Feats.resolveValue(field2);

        String field3 = "clearAll";
        Feats.resolveValue(field3);
    }
}

-

// Feats.java
public class Feats {

    private static final Logger LOGGER = LoggerFactory.getLogger(Feats.class);
    private static final Map<String, Integer> ATTRIBUTES = new HashMap<>();

    public static String resolveString(String fieldInput){

         String response = null;
         String[] values = fieldInput.split(" ");
         Action action; 

         try {
             action = Action.valueOf(values[0].trim().toUppercase());

         } catch(Exception e){
             LOGGER.error("Not a valid Action in input: " + fieldInput);
             return response;
         }
         switch(action){
             case SETVALUE:
                setValue(values[1].trim(), values[2].trim());
                break;

             case CLEARALL:
                clearAll();
                break;

             case GETVALUE:
                response = getValue(values[1].trim());
                break;

             default:
                assert true;
         }

         return response;
    }

    private static void setValue(String attrName, String attrValue){
        ATTRIBUTES.put(attrName, attrValue);
    }

    private static String getValue(String attrName){
         return ATTRIBUTES.get(attrName);
    }

    private static void clearAll(){
        ATTRIBUTES.clear();
    }
}

-

// Action.java
public enum Action {
    SETVALUE, CLEARALL, GETVALUE
}

答案 1 :(得分:0)

所以我解决了。感谢@shmosel告诉我使用字段。

long temp = Long.parseLong(lineArray[2]);

try {
Feats.class.getField(lineArray[1]).set(lineArray[1], temp);;
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e1) {
e1.printStackTrace();
}