如何插入用户输入的字符串来引导引用?

时间:2013-09-29 02:31:14

标签: java java.util.scanner

(在java中)这可能是也可能是不可能的,我认为这是因为它似乎是短路/容易不存在。基本上我想要做的是让用户插入状态的名称,然后将其添加到该状态的计数器,该计数器存储在不同的类中。我想这样做而不创建50个if / else语句。这是伪代码,表示我期望它如何完成。 (此代码将封装在mainclass.java中的while循环中,计数器和状态名称位于名为state.java的类中。)

Scanner userstate = new Scanner(System.in);
String statename = userstate.nextLine();

state.(statename).counter++;

在state.java中:

 public state(int counter){
}
    public static state Alabama = new state(0);

为了时间的缘故,我希望有一个类似于上面的捷径。

2 个答案:

答案 0 :(得分:2)

在这种情况下,首选的方法是将状态存储在HashMap或类似的地方。这允许您按名称查找状态:

import java.util.*;

class State
{
    static HashMap<String, State> states = new HashMap<String, State>();

    public static State Alabama = new State("Alabama", 0);

    public State(String name, int counter)
    {
        // [ init... ]
        states.put(name, this); // add this state to the collection of states
    }

    public static State getByName(String name)
    {
        return states.get(name);
    }
}

然后你的代码看起来像这样:

State.getByName(statename).counter++;

您也可以使用reflection,但应尽可能避免使用。

答案 1 :(得分:0)

您不希望尝试按其Java名称查找变量(例如,“Alabama”);这是可能的,但比你想要处理的要复杂得多。

如果您可以使用外部库,这非常适合Guava Multiset,它可以跟踪某个元素被看到的次数。否则,您可能希望从州名称Map<String,Integer>到计数器。 (请注意,在这种情况下您必须put(get()+1); ++将不起作用。)