Как перепрыгнуть в другое место того же метода?
Возник такой вопрос... Как вернуться в определённое место того же метода?
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 шт):
В 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);
}
}
Можно сделать "проще" :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;
}
}
}