Я новичок в Java (и программировании в целом), поэтому извиняюсь, если что-то из этого не имеет смысла и / или если код действительно плохой:
Я пытаюсь получить уникальный четырехзначный код из пользовательского ввода (это то, что делает строка Keyboard.readInput
), и я вставил пару условных выражений, чтобы гарантировать, что введенный код может быть только 4 цифры и что каждая цифра должна отличаться от других трех.
Операторы if работают так, как задумано, в том смысле, что они выводят сообщение об ошибке и предлагают ввести их заново (т.е. вызывается метод getPlayerGuess()
). Например, если пользователь вводит 123 (т. Е. userGuess.length() != 4
), он предложит ему войти снова. Если они затем введут 1234, метод завершится.
Однако проблема, с которой я столкнулся, заключается в том, что когда я вызываю этот метод в другом классе, который у меня есть, код, по которому выполняется проверка, - это первый введенный код (т. Е. 123), а не четырехзначный, который я хочу (т. Е. 1234). ) - что приводит к массиву IndexOutOfBoundsException
.
Любые идеи о том, как я могу гарантировать, что возвращаемый код - это четырехзначный код, который проходит условные выражения, а не первый введенный код?
public int[] getPlayerGuess() {
System.out.print("Guess a four digit code: ");
String userGuess = Keyboard.readInput();
if (userGuess.length() != 4) {
System.out.print("Your code must be 4 digits - ");
getPlayerGuess();
}
int[] userCode = createArrayFromGuess(userGuess);
for (int i = 0; i < userCode.length-1; i++){
for (int j = i+1; j < userCode.length; j++){
if (userCode[i] == userCode[j]) {
System.out.print("Code must have four unique digits - ");
getPlayerGuess();
}
}
}
return userCode;
}