如何使用户输入与变量相关?

时间:2012-07-19 12:20:06

标签: java variables input user-input

我不知道如何准确地说出这个问题,但这就是我想要实现的目标 (我正在使用堆栈实现河内塔的插图:

这是在main()函数内部:

System.out.println("Type the source pole number and the destination pole number");
int a = reader.nextInt();
int b = reader.nextInt();
boolean move = moveDics(a, b);

这些是代表3极的堆栈:

    Stack<Integer> pole1 = new Stack<Integer>();
    Stack<Integer> pole2 = new Stack<Integer>();
    Stack<Integer> pole3 = new Stack<Integer>();

我想根据用户输入更改堆栈,为此我需要与变量pole1,pole2,pole3相关(以执行任何操作,如pole1.pop())。

这是我的问题:除了多个if()语句或switch case语句之外,我如何使用用户输入 - 一个整数 - 与极点相关联?像pole + "x".pop()

这样的东西

1 个答案:

答案 0 :(得分:3)

良好的解决方案

不要做那么多变数。

你可以将它们全部放在一个数组中:

Stack[] poles = new Stack[3];
for (int i=0; i<poles.length; i++) poles[i] = new Stack<Integer>();

然后,您可以使用poles[yourInteger]访问您的极点。

变种(基于杰弗里的评论):

List<Stack<Integer>> poles = new ArrayList<Stack<Integer>>();
for (int i=0; i<poles.size(); i++) poles[i] = new Stack<Integer>();

然后,您可以使用poles.get(yourInteger)访问您的极点。

请注意,一旦你开始在这些极点上做更复杂的事情,你就必须考虑将它们嵌入到一个类中。我个人试图避免收集集合或集合数组,因为它们往往令人困惑。

不是很好的解决方案

您可以使用开关:

public Stack<Integer> getPole(int i) {
    switch(myInteger) {
    case 1:
        return pole1;
    case 2:
        return pole2;
    case 3:
        return pole3
    }
    return null;
}

一起使用
Stack<Integer> pole = getPole(yourInteger);

疯狂解决方案

如果需要,您可以使用反射按名称访问变量。

为此,首先要获取班级的Field实例:

Field stackField = MyClass.class.getField("pole"+myInteger);

然后你必须得到这个字段值的方法,然后调用它们。这将很慢,许多LOC和许多尝试/捕获。