Как перепрыгнуть в другое место того же метода?

Возник такой вопрос... Как вернуться в определённое место того же метода?

public static void registration() throws IOException {
    System.out.println("Регистрация нового пользователя");
    System.out.print("Введите логин: ");
    String loginReg = reader.readLine();         // Пользователь вводит имя пользователя
    
    // >>> Вернуться сюда <<<        
    System.out.print("Введите пароль: ");
    String passwordReg = reader.readLine();      // Пользователь вводит пароль
    System.out.print("Введите пароль ещё раз: ");
    String passwordReg1 = reader.readLine();     // Пользователь вводит пароль ещё раз

    // Проверка правильности повторно введённого пароля
    if(!(passwordReg1.equals(passwordReg))) {
        System.out.println("Неверный пароль.");
    // Из этого места надо вернуться на место ">>> Вернуться сюда <<<", чтобы прога снова запросила 
    ввести пароль
    }
}

И есть ли способ не вернуться, а наоборот переместиться в определённое место метода?


Ответы (3 шт):

Автор решения: Aziz Umarov

В java существует операторы перехода

public class Break {

  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second;// выход из блока second

          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}

Если немного изменить то вы получите желаемый результат.

PS. Но в java как и вдругих языках не рекомендуют использование операторов перехода за исключением switch. Поскольку они затрудняют читабельность кода. Вы всегда можете оператор перехода обойти условным оперетором (if else) или методами либо же циклами.

→ Ссылка
Автор решения: ЮрийСПб

Разбейте код на отдельные методы примерно так:

public static void registration() throws IOException {
    System.out.println("Регистрация нового пользователя");
    System.out.print("Введите логин: ");
    String loginReg = reader.readLine();         // Пользователь вводит имя пользователя
    
    passwordsHandling(loginReg);
}

public static void passwordsHandling(String loginReg) {
    System.out.print("Введите пароль: ");
    String passwordReg = reader.readLine();      // Пользователь вводит пароль
    System.out.print("Введите пароль ещё раз: ");
    String passwordReg1 = reader.readLine();     // Пользователь вводит пароль ещё раз

    // Проверка правильности повторно введённого пароля
    if(!(passwordReg1.equals(passwordReg))) {
        System.out.println("Неверный пароль.");
        passwordsHandling(loginReg);
    }
}
→ Ссылка
Автор решения: Yakov

Можно сделать "проще" :D. Cделайте цикл с условием прохождения определенного числа шагов, для переключения на нужный шаг используйте switch(), меняйте по условию переменную которая хранит шаг, и переходите на него в начале цикла. таким образом можете легко вернуться как в начало так и на "шаг назад", так и на "три вперед".

public static void registration() throws IOException {
    int step = 0;
    while(step<4) {
        switch (step) {
            case 0:
                System.out.println("Регистрация нового пользователя");
                System.out.print("Введите логин: ");
                String loginReg = reader.readLine();         // Пользователь вводит имя пользователя
                step++;
            break;
            case 1:
            // >>> Вернуться сюда <<<        
                System.out.print("Введите пароль: ");
                String passwordReg = reader.readLine();      // Пользователь вводит пароль
                step++;
                break;
            case 2:
                System.out.print("Введите пароль ещё раз: ");
                String passwordReg1 = reader.readLine();     // Пользователь вводит пароль ещё раз
                step++;
                break;
            case 3:
            // Проверка правильности повторно введённого пароля
            if (!(passwordReg1.equals(passwordReg))) {
                System.out.println("Неверный пароль.");
                // Из этого места надо вернуться на место ">>> Вернуться сюда <<<", чтобы прога снова запросила 
                step = 1;
            } else step++;
            break;
        }
    }
}
→ Ссылка