Обратите внимание, что
if (a.equals ("n") || a.equals("N"))
{CPUcolor() ;}
System.out.println ("I am "+s) ;
должно быть:
if (a.equals ("n") || a.equals("N"))
{CPUcolor() ;}
else
{System.out.println ("I am "+s) ;}
Таким образом, вы печатаете только цвет в единственном экземпляре , когда пользователь действительно ответил Yes
(вы не хотите печатать цвет для этих случаев, когда пользователь ответил No
, случаи, к которым вы обращаетесь в обратном порядке, когда вы раскручиваете свою рекурсию - причина обратного порядка, в котором были напечатаны другие ответы.)
Также обратите внимание, что вам не нужна (и не нужна) рекурсия в этом конкретном примере: после добавления else
ваш метод становится хвост-рекурсивным , и вы можете достичь тот же эффект итеративно . Устраняя рекурсию, вы также устраняете проблему с уязвимостью, то есть возможность того, что злонамеренный пользователь введет No
на неопределенный срок до тех пор, пока ваша программа в конечном итоге не выйдет с StackOverflow
Exception
:
public static String CPUcolor ()
{
while (true) {
System.out.println ("What color am I?") ;
String s = getIns() ;
System.out.println ("are you sure I'm "+s+"? (Y/N)") ;
String a = getIns() ;
while (!((a.equals ("y")) || (a.equals ("Y")) || (a.equals ("n")) || (a.equals ("N"))))
{
System.out.println ("try again") ;
a = getIns () ;
}
if (a.equals ("y") || a.equals("Y")) {
System.out.println ("I am "+s) ;
return s ;
}
}
}