Вернитесь к началу метода, когда пройдете половину пути - PullRequest
0 голосов
/ 13 января 2019

Когда я на полпути к методу, я хотел бы иметь возможность вернуться к определенной точке в нем, что-то вроде контрольной точки.

При запуске кода возможны два варианта: запись 1 или 2. Если 1 - это ввод, я просто хочу, чтобы он продолжал с чем-то другим, но если 2 - это ввод, я хочу проверить, является ли логическое значение истинным , Если это логическое значение истинно, попросите еще раз выбрать 1 или 2. Если логическое значение ложно, продолжайте с большим количеством кода.

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

Я могу представить, что для этого может быть функция, но я понятия не имею, что это может быть. Это для реальной программы с более сложными вещами, где цикл while или do while не был бы идеальным, но если это единственный способ, я также был бы признателен, если бы мне сказали, как это будет работать.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

В отличие от некоторых других языков, в 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);

Другим вариантом является рекурсивный вызов, но я бы не рекомендовал это решение, так как оно без необходимости выделяет много памяти и расширяет стек вызовов.

0 голосов
/ 13 января 2019

Вы также можете сделать это с помощью рекурсии, написать рекурсивный код внутри метода и вызывать этот метод, когда вам нравится цикл

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

Поскольку temp всегда true, а input - 2, метод теста вызывается из блока if, если input - 1, он будет выполнять блок else

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...