1

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

由于时间关系,希望有类似上述的捷径。

4

2 回答 2

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++;

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

于 2013-09-29T02:40:07.277 回答
0

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

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

于 2013-09-29T02:41:00.273 回答