Repeat same method and using new value of one parameter

I'm trapped within this certain predicament of mine and I would gladly accept any suggestion. So here it is:

I'm currently working in a method where a certain variable is assigned a specific value in the beginning part of the method. During the course of the method, that variable is used as a parameter by an external component which basically returns a result code. In one of those result codes, I have to change the value of the prior mentioned variable and repeat the whole process using the new value. The concept is as follows but I have simplified it as much as possible:

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
}

By the way, I have checked and researched things like goto and other alternative. I may have overlooked some results and ended up asking here. Any help would be much appreciated. Thank you.

Jon Skeet
people
quotationmark

One simple option is to have a private overload taking the server parameter - then you can call it recursively:

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

You need to make sure that isn't going to recurse infinitely, of course.

Another option would be to just have a loop inside your method:

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:
                // ?
        }
    }
}

people

See more on this question at Stackoverflow