重复相同的方法并使用一个参数的新值

时间:2016-10-21 05:48:43

标签: java

我陷入了我的这种困境之中,我很乐意接受任何建议。所以这就是:

我目前正在使用一种方法,在方法的开头部分为某个变量分配一个特定的值。在该方法的过程中,该变量被外部组件用作参数,该外部组件基本上返回结果代码。在其中一个结果代码中,我必须更改前面提到的变量的值,并使用新值重复整个过程。这个概念如下,但我尽可能地简化了它:

public void myMethod (String args[]) {
    String server;

    server = "some value";

    switch (someExternalOperation(server)) {
    case 1:
        //process....
        break;
    case 2:
        server = "new value";
        //repeat myMethod using new value of server String variable
        break;
    }
}

public int someExternalOperation (String str) {
    //after several operation
    return 1; //example purposes
}

顺便说一句,我已经检查过并研究了goto和其他替代方案。我可能忽略了一些结果,最后在这里问。任何帮助将非常感激。谢谢。

2 个答案:

答案 0 :(得分:3)

一个简单的选择是使用server参数进行私有重载 - 然后您可以递归调用它:

public void myMethod(String args[]) {
    myMethod(args, "some value");
}

private void myMethod(String[] args, String server) {
    switch (someExternalOperation(server)) {
        case 1:
            // process....
            break;
        case 2:
            myMethod(args, "new value");
            break;
    }
}

当然,你需要确保不会无限递归。

另一种选择是在你的方法中有一个循环:

public void myMethod (String args[]) {
    String server = "some value";

    while (true) { // Or ideally a different condition...
        switch (someExternalOperation(server)) {
            case 1:
                // process....
                // Done! Exit the method...
                return;
            case 2:
                server = "new value";
                // We'll now continue to the next iteration of the loop
                break;
            default:
                // ?
        }
    }
}

答案 1 :(得分:0)

我想办法解决问题。谢谢大家阅读。我只是简单地使用外部操作并检查它是否会返回案例2.

public void myMethod (String args[]) {
    String server;

    server = "some value";

    if (someExternalOperation(server) == 2)
        server = "new value";


    switch (someExternalOperation(server)) {
    case 1:
        //process....
        break;
    }
}

public int someExternalOperation (String str) {
    //after several operation
    return 1; //example purposes
}

无论如何,谢谢你的帮助。