замена goto в java
можете пожалуйста подсказать как можно заменить goto в данном примере
createAccount:
System.out.print("впишите логин и пароль через пробел: ");
login = in.next();
password = in.next();
for(int i = 0; i < accounts.size(); i++){
if(accounts.get(i).login == login) {
System.out.println("простите этот акаунт занят");
goto createAccount;
}
}
accounts.add(new Account(login, password));
Ответы (2 шт):
Если совсем прямолинейно действовать, то метку можно добавить к циклу и делать continue <метка>;. В конце цикла break;.
createAccount:
while (true) {
System.out.print("впишите логин и пароль через пробел: ");
String login = in.next();
String password = in.next();
for (int i = 0; i < accounts.size(); ++i){
if (accounts.get(i).login.equals(login)) {
System.out.println("простите этот акаунт занят");
continue createAccount;
}
}
accounts.add(new Account(login, password));
break;
}
Чуть лучше выделить поиск аккаунта в отдельную функцию:
public static Acccount getAccount(List<Account> accounts, String login) {
for (Account a : accounts) {
if (a.login.equals(login)) {
return a;
}
}
return null;
}
...
while (true) {
System.out.print("впишите логин и пароль через пробел: ");
String login = in.next();
String password = in.next();
if (getAccount(accounts, login) == null) {
accounts.add(new Account(login, password));
break;
}
System.out.println("простите этот акаунт занят");
}
P.S. В Java не стоит сравнивать строки оператором ==. Используйте equals.
Как известно, goto в Java существует исключительно как зарезервированное слово.
Однако в данном случае использование переходов по метке излишне.
Можно упростить код, переписав его с помощью единственного цикла do-while без оператора break, сохраняя всю логику. Также можно избавиться от внутреннего цикла для определения существующего аккаунта, например, используя хэш-таблицу аккаунтов с ключами-логинами вместо списка:
Map<String, Account> accounts = loadExistingAccounts();
boolean accountUsed;
String login;
String password;
do {
System.out.print("впишите логин и пароль через пробел: ");
login = in.next();
password = in.next();
accountUsed = accounts.containsKey(login);
if (accountUsed) {
System.out.println("простите этот акаунт занят");
}
} while (accountUsed);
accounts.put(login, new Account(login, password));