Java 从这个方法出来

Java 从这个方法出来,java,Java,我已经写了下面的代码,如果这个else如果语句运行,我想突然从这个方法出来,返回到调用这个方法的下一行。我使用了return,但效果不好 else if (balance == 0 && noSolution == 0) { noSolution = 0; return; // it doesn't work. } 方法: public <E> void rand_Fun

我已经写了下面的代码,如果这个
else如果
语句运行,我想突然从这个方法出来,返回到调用这个方法的下一行。我使用了return,但效果不好

else if (balance == 0 && noSolution == 0) {
                noSolution = 0;
                return; // it doesn't work.
            }
方法:

    public <E> void rand_Function(List<E> tree, List<E> array) {

    if (array.isEmpty()) {
        return;
    }
    if (array.size() == 1) {
        preorder = (List<Element>) new ArrayList<E>(tree);
        preorder.addAll((Collection<? extends Element>) array);
        for (Element e : preorder) {
            e.setLevel(0);
        }
        E1 = getAverageAccessTime(preorder);
        listTwo = new ArrayList<Element>(preorder);
        if ((E1 < E) || (rand.nextDouble() <= Math.exp(-(Math.abs(E1 - E)) / 0.5 * T))) {
            E = E1;
            listOne = listTwo;

        } else {
            noSolution++;
        }
        balance--;
        System.out.println("running"); // EDITED
        if (balance == 0 && noSolution ==1) {              
            noSolution = 0;
            T = 0.95 * T;           

        } else if (balance == 0 && noSolution == 0) {
            System.out.println("running");//EDITED
            noSolution = 0;
            return;//it doesn't work.
        }

    } else {
        for (int i = 0; i < array.size(); i++) {
            //create a list without the ith element
            List<E> newList = new ArrayList<E>(array);
            newList.remove(i);
            //create a list by adding the ith element to beginning
            List<E> newBeginning = new ArrayList<E>(tree);
            newBeginning.add(array.get(i));
            rand_Function(newBeginning, newList);
        }
    }

}
但我需要这个,我希望这个:

run:
running
running
running
return
coming out suddenly

您的代码示例使用
break
返回-break无法完成此任务

另外,由于您是递归的:
return
将不会返回多个调用级别。如果要立即退出所有递归调用,则需要向调用者发出信号

例如

公共布尔随机函数(列表树、列表数组){
if(array.isEmpty()){
返回true;
}
if(array.size()==1){
前序=(列表)新数组列表(树);

preorder.addAll((Collection您的代码示例使用了
break;
而不是
return;
)-break不起作用

另外,由于您是递归的:
return
将不会返回多个调用级别。如果要立即退出所有递归调用,则需要向调用方发出信号

例如

公共布尔随机函数(列表树、列表数组){
if(array.isEmpty()){
返回true;
}
if(array.size()==1){
前序=(列表)新数组列表(树);

preorder.addAll((Collection如前所述,您尝试在不在循环或开关内部时使用
中断
返回
正常工作,因为您在列表为空时开始使用它

您还将
noSolution
设置为0,即使该块仅在其已等于0时执行


关于编辑,在命名变量时需要使用约定。您有两个单大写字母的变量。这会使人们认为它是泛型类型,尤其是其中一个是T。此外,由于您只提供了方法,因此我们必须假设所有未定义的变量都是类变量,但可能有不明确的类型或状态。

如前所述,您试图在不在循环或开关内时使用
中断。
返回正常工作,因为您在列表为空时开始使用它

您还将
noSolution
设置为0,即使该块仅在其已等于0时执行



关于编辑,在命名变量时需要使用约定。您有两个单大写字母的变量。这会使人们认为它是泛型类型,尤其是其中一个是T。此外,由于您只提供了方法,因此我们必须假设所有未定义的变量都是类变量,但可能有不明确的类型或状态。

我很困惑。如果这是完整的代码示例,则无论您是否调用break return或nothing,该函数都将返回给调用方。您能详细说明一下吗?我也编辑了我的帖子对不起:)给出显示的代码,返回语句无关紧要,函数无论如何都会立即返回。发布的代码不是真实的代码,或者问题描述中有一些东西没有传达。你能澄清一下“突然出现”的意思吗?你能告诉我们发生了什么而不是你期望的吗?那么当你通过一个调试器时,它会做什么?当它点击了返回的那一行时,它下一步执行哪一行?我编辑了我的帖子,我输入了我期望的输出,但它会打印出不期望的输出!!我很困惑。如果这是完整的代码示例,那么这个函数n将返回给调用方,无论您是否调用break return或nothing。您能详细说明一下吗?我也编辑了我的帖子对不起:)给出显示的代码,返回语句无关紧要,函数无论如何都会立即返回。发布的代码不是真实的代码,或者问题描述中有一些东西没有传达。你能澄清一下“突然出现”的意思吗?你能告诉我们发生了什么而不是你期望的吗?那么当你通过一个调试器时,它会做什么?当它点击返回的那一行时,它下一步执行哪一行?我编辑了我的帖子,我输入了我期望的输出,但它会打印出不期望的输出!!当我写“break”而不是“return”时它将显示此错误:中断外部开关或循环!!!return语句有效。
return
语句是否使用调试器检查此代码以查看真正发生的情况?当然!!它将转到else-if语句,因为它突然出现,但它没有出现,并创建了其他剩余列表。抱歉,我无法理解您的意思,可以吗我的代码中没有这些行吗?是的,现在它真的很有用!!非常感谢,我明白你的意思:)当我写“break”而不是“return”时它将显示此错误:中断外部开关或循环!!!return语句有效。
return
语句是否使用调试器检查此代码以查看真正发生的情况?当然!!它将转到else-if语句,因为它突然出现,但它没有出现,并创建了其他剩余列表。抱歉,我无法理解您的意思,可以吗我的代码中没有这些行吗?是的,现在它真的工作了,它帮助了我!!非常感谢,我明白你的意思:)
run:
running
running
running
return
running
running
running
running
running
coming out suddenly
run:
running
running
running
return
coming out suddenly
 public <E> boolean rand_Function(List<E> tree, List<E> array) {

    if (array.isEmpty()) {
        return true;
    }
    if (array.size() == 1) {
        preorder = (List<Element>) new ArrayList<E>(tree);
        preorder.addAll((Collection<? extends Element>) array);
        for (Element e : preorder) {
            e.setLevel(0);
        }
        E1 = getAverageAccessTime(preorder);
        listTwo = new ArrayList<Element>(preorder);
        if ((E1 < E) || (rand.nextDouble() <= Math.exp(-(Math.abs(E1 - E)) / 0.5 * T))) {
            E = E1;
            listOne = listTwo;

        } else {
            noSolution++;
        }
        balance--;
        System.out.println("running"); // EDITED
        if (balance == 0 && noSolution ==1) {              
            noSolution = 0;
            T = 0.95 * T;           

        } else if (balance == 0 && noSolution == 0) {
            System.out.println("running");//EDITED
            return false;
        }

    } else {
        for (int i = 0; i < array.size(); i++) {
            //create a list without the ith element
            List<E> newList = new ArrayList<E>(array);
            newList.remove(i);
            //create a list by adding the ith element to beginning
            List<E> newBeginning = new ArrayList<E>(tree);
            newBeginning.add(array.get(i));
            if (!rand_Function(newBeginning, newList))
                return false;
        }
    }
    return true;
}