Почему:Рекурсия Если заявление помощь
public static void splat(String s)
{
if (s.length() < 8)
{
splat(s+s);
}
System.out.println(s);
}
не распечатайте ********
, когда знак ("**") называется
Почему:Рекурсия Если заявление помощь
public static void splat(String s)
{
if (s.length() < 8)
{
splat(s+s);
}
System.out.println(s);
}
не распечатайте ********
, когда знак ("**") называется
каждый раз, когда знак будет называемые System.out.println (s); выполнена таким образом, выход будет
********
****
**
распечатать только ******** сделать так:
public static void splat(String s)
{
if (s.length() < 8)
{
splat(s+s);
}
else
{
System.out.println(s);
}
}
Это ужасно. Скопируйте свой код правильно. –
Почему он начинается с печати ******** вместо того, чтобы начинаться с ** – Rolando
@Rolando, потому что println после вызова метода, он будет продолжать удваивать ', пока он не станет меньше 8. Затем будет выполнен первый println. – Spencer4134
Я предполагаю, что ваш результат:
********
******
****
...
Поскольку вы печатаете внутри функции.
При перемещении Println из функции, которую вы должны получить желаемый результат с возвращением
public static void main(String[] args){
System.out.println(splat("**"));
}
public static String splat(String s){
if (s.length() < 8){
s = splat(s+s);
}
return s;
}
Вы должны включили выход. Я запускаю это и поставит его здесь:
********
****
**
Причина заключается в том, что при вызове метода, как это, первый раз, если заявление выходит ложь, он будет печатать «****** **' как и ожидалось. Но он будет забрать, где он остановился на последнем звонке, что означает, что он будет запускать этот println снова с s '****'. Наконец, он выполнит первоначальный вызов, где s - «**».
Вместо того, чтобы напомнить метод, вы должны использовать цикл, чтобы фактически изменить значение с с s = s + "**";
Например, использовать это вместо того, если заявление:
while (s < 8)
s += "**";
Это будет работать до тех пор, 's' is '********'
Надеюсь, это поможет!
Вы отлаживали его, чтобы посмотреть, что происходит? –
будет, но он также будет печатать '****' и' ** 'впоследствии. Возьмите совет @JonSkeet и отлаживайте его –
Это, по-видимому, печатает много вещей ... –