Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2016, 16:59   #1
Maks_Andreev
 
Регистрация: 18.03.2016
Сообщений: 6
По умолчанию Как работает этот метод?

Здравствуйте.
Взгляните на этот код:
Код:
class Backwards {
  String str;
  
  Backwards(String s) {
    str = s;
  }
   void backward(int idx) {
     if(idx != str.length() - 1) backward(idx+1);
	 System.out.print(str.charAt(idx));
   }
}
class BWDemo {
  public static void main(String args[]) {
    Backwards s = new Backwards("This is a test");
	s.backward(0);
	}
}
В моем понимании он должен выводить "This is a test". Ну потому что:

Код:
if(idx != str.length() - 1) backward(idx+1);
//если текущий символ не последний перейти к следующему
Код:
System.out.print(str.charAt(idx));
//отобразить текущий символ

Код:
s.backward(0);
//перейти к началу (отобразить 'T' в слове 'This')

Помогите понять почему этот код выдает результат:
Код:
tset a si sihT
Заранее спасибо.

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 13.04.2016 в 17:04.
Maks_Andreev вне форума Ответить с цитированием
Старый 13.04.2016, 17:08   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Ну потому что:
Код:
if(idx != str.length() - 1) backward(idx+1);
Так именно поэтому вывод и будет с конца. Рекурсия ж.
До строчки с print дойдет в самом конце рекурсивных вызовов.

В отладчике поставьте breakpoint тут, запустите и посмотрите что происходит если непонятно.

И форматируйте нормально код
Код:
class Backwards {
    String str;
  
    Backwards(String s) {
        str = s;
   }
  
    void backward(int idx) {
        if(idx != str.length() - 1)
            backward(idx+1);
        System.out.print(str.charAt(idx));
    }
}

class BWDemo {
    public static void main(String args[]) {
        Backwards s = new Backwards("This is a test");
	s.backward(0);
    }
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 13.04.2016 в 17:18.
Alex11223 вне форума Ответить с цитированием
Старый 14.04.2016, 15:42   #3
Maks_Andreev
 
Регистрация: 18.03.2016
Сообщений: 6
По умолчанию

Я пишу в notepad, и компилирую через командную строку. Какой отладчик имеется ввиду?
Maks_Andreev вне форума Ответить с цитированием
Старый 14.04.2016, 15:49   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В любой IDE.
Ну или jdb в командной строке http://docs.oracle.com/javase/7/docs...ndows/jdb.html
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.04.2016, 16:29   #5
Maks_Andreev
 
Регистрация: 18.03.2016
Сообщений: 6
По умолчанию

Спасибо.
Maks_Andreev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться - не работает файл со скриптом. При загрузке из консоли этот же скрипт работает Kazik JavaScript, Ajax 6 27.11.2015 16:09
Что то не понимаю как этот код работает? Denis19061989 Помощь студентам 0 26.05.2013 10:33
[TASM]как работает этот код для сортировки знаков методом подсчета Ciaran Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.02.2012 09:39
почему этот код интерфейса не работает. KWN, lnc Помощь студентам 5 30.01.2010 10:54
этот код первый раз то окно сначала сворачивается, а потом сразу восстанавливается, а когда вызываешь второй, окно сворачивается? Аlex Общие вопросы Delphi 4 16.08.2008 11:51