#java #recursion
#java #рекурсия
Вопрос:
Я надеялся, что кто-нибудь сможет взглянуть на это для меня. Я только начал с Java, и это мой первый проект, но в нем есть странная ошибка, которую я не могу понять.
Предполагается, что метод просто возвращает true или false в зависимости от того, что вводит пользователь. Это действительно работает, единственное, что запрашивает пользователя дважды. Он принимает входные данные, но затем запрашивает снова и выполняет оценку для второго ввода. Я не уверен, как это назвать, но если кто-нибудь может сказать, что происходит, я был бы очень признателен!
public static boolean yesOrNo(){
System.out.print("Would you like to roll again? Type 'y' for yes or 'n' for no: ");
char c = screen.next().trim().charAt(0);
if (c == 'y' || c == 'Y' || c == 'n' || c == 'N') {
switch (c) {
case 'y': return (true);
case 'Y': return (true);
case 'n': return (false);
case 'N': return (false);
}
}
else {
System.out.println("Invalid input, try again!!");
yesOrNo();
}
return (true);
}
редактировать: входные данные для сканера
public static Scanner screen = new Scanner(System.in);
который у меня есть в верхней части программы прямо внутри класса. Похоже, это не вызывает у меня проблем ни в одной из других ситуаций ввода. Он больше ничего не печатает, кроме как запрашивает ввод дважды, хотя я могу поместить оператор печати в, чтобы убедиться, что он получает символ с первого раза. Я также попытался изменить вызов самой функции на
return(yesOrNo());
но не повезло. Есть ли какой-нибудь способ снова вызвать функцию без рекурсии?
Комментарии:
1. Можете ли вы показать определение переменной ‘screen’? Этот код в порядке, нам нужно увидеть больше, например, где вы вызываете yesOrNo(), чтобы найти проблему.
2. Вы упоминаете, что он дважды спрашивает вас, печатает ли он «Неверный ввод, повторите попытку» в первый раз или нет?
3. Не используйте здесь рекурсию.
4. Вы обнаружили рекурсию (я полагаю, скорее случайно, чем намеренно). Посмотрите на свой код, в
else
случае повторного вызоваyesOrNo()
. Если вы новичок, просто проигнорируйте это на данный момент и посмотрите на это позже, когда у вас будет немного больше опыта.
Ответ №1:
Хорошо, то, что вы делаете в другом месте, где вы вызываете yesOrNo() изнутри yesOrNo(), является рекурсией.
Чтобы исправить, вам нужно вернуть ответ из следующего вызова;
else {
System.out.println("Invalid input, try again!!");
return yesOrNo();
}
Ответ №2:
в вашем else вы снова вызываете метод.
else {
System.out.println("Invalid input, try again!!");
yesOrNo();
}
Ответ №3:
Здесь вы можете использовать while
цикл, а не рекурсию.
public static boolean yesOrNo(){
boolean run = true;
while(run){
System.out.print("Would you like to roll again? Type 'y' for yes or 'n' for no: ");
char c = screen.next().trim().charAt(0);
if (c == 'y' || c == 'Y' || c == 'n' || c == 'N') {
switch (c) {
case 'y': return true;
case 'Y': return true;
case 'n': return false;
case 'N': return false;
}
run = false;
}
else {
System.out.println("Invalid input, try again!!");
}
}
return true;
}