中途返回方法的开始

时间:2019-01-12 22:22:03

标签: java methods

当我完成某种方法时,我希望能够回到其中的某个点,有点像检查点。

运行代码时,有两种选择:写1或2。如果输入1,我只是希望它继续其他操作,但是如果输入2,我希望它检查布尔值是否为true。 。如果该布尔值为true,则再次要求选择1或2。如果布尔值为false,则继续输入更多代码。

boolean temp = true;

我希望它回到这里

Scanner input = new Scanner(System.in);
int choice = input.nextLine;

if(choice==1) 
  System.out.println("Continue code");
else if(choice==2) {
  if(temp) {

在这里,我希望它重新开始

  }
  else {
  System.out.println("Continue code");
  }
}

我可以想象可能有一个函数可以执行此操作,但是我不知道它可能是什么。这是针对具有更复杂内容的实际程序的,其中whiledo while循环并不理想,但是如果是唯一的方法,那么我也很高兴被告知如何工作。 / p>

2 个答案:

答案 0 :(得分:2)

您还可以通过使用递归来做到这一点,在方法中编写递归代码,并在需要循环时调用该方法

public void test(Scanner input, boolean temp) {

    int choice = input.nextInt();

    if (choice == 1)
        System.out.println("Continue code");
    else if (choice == 2) {
        if (temp) {
            test(input, temp);

        } else {
            System.out.println("Continue code");
        }
    }

}

执行代码

public class DemoMain2 {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    test(sc, true);

}

public static void test(Scanner input, boolean temp) {

    int choice = input.nextInt();

    if (choice == 1)
        System.out.println("Continue code");
    else if (choice == 2) {
        if (temp) {
            System.out.println("calling test method again, temp value is : "+temp);
            test(input, temp);
            // you can update temp value as required

        } else {
            System.out.println("Continue code");
            }
        }

    }
 }

输入和输出

2
calling test method again, temp value is : true
2
calling test method again, temp value is : true
2
calling test method again, temp value is : true
2
calling test method again, temp value is : true
1
Continue code

由于温度始终为true,输入为2,因此从if块中调用测试方法,如果输入为1,则它将执行else块

答案 1 :(得分:1)

与某些其他语言不同,Java没有“跳转”语句(例如“ goto”)。 您必须使用循环,然后才能使用带有标签的“ continue”或“ break”语句来引用接下来应执行的语句。

boolean temp = true;

label:
while(true) {
        Scanner input = new Scanner(System.in);
        int choice = input.nextInt();

    if(choice==1) {
        System.out.println("Continue code");
        break;
    }
    else if(choice==2) {
        if(temp) {
            continue label;
        }
        else {
            System.out.println("Continue code");
            break;
        }
    }
    }se if(choice==2) {
if(temp) {
    continue label;
}
else {
    System.out.println("Continue code");
}

}

请注意,这不是一个好习惯 在循环条件中使用一个不错的语句会更好:

boolean temp = true;

Scanner input = new Scanner(System.in);
int choice;
do{
    choice = input.nextInt();
    if(choice==1) {
        System.out.println("Continue code");
        temp=false;
    }
    else if(choice==2) {
        if(!temp){
            System.out.println("Continue code");
            temp=false;
        }
    }
}
while(choice==2 && temp);

另一个选择是递归调用,但是我不建议使用该解决方案,因为它不必要地分配了大量内存并扩展了调用堆栈。