JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Помогите разобраться в задаче
Иван Хардиков
22 уровень
  • 24.04.2018
  • 4466просмотров
  • 8комментариев

Помогите разобраться в задаче

Вопрос по задаче И снова StackTrace
Java Syntax,  9 уровень,  2 лекция
Решен


Написать пять методов, которые вызывают друг друга.
Каждый метод должен возвращать имя метода, вызвавшего его, полученное с помощью StackTrace.

Требования:
  • В классе должно быть 5 методов (метод main не учитывать).
  • Каждый метод должен вызывать следующий: main вызывать method1, method1 вызывать method2 и т.д.
  • Каждый метод должен возвращать имя метода, вызвавшего его.
  • Для получения имени вызвавшего метода, используй метод getMethodName.
....
package com.javarush.task.task09.task0902; /* И снова StackTrace */ public class Solution { public static void main(String[] args) throws Exception { method1(); } public static String method1() { method2(); StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); //for (int i = 0; i < stackTrace.length; i++) { //System.out.println(stackTrace[i].getMethodName()); // return stackTrace[0].getMethodName(); //напишите тут ваш код } public static String method2() { method3(); StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); /*for (int i = 0; i < stackTrace.length; i++) { System.out.println(stackTrace[i].getMethodName()); }*/ return stackTrace[1].getMethodName(); //напишите тут ваш код } public static String method3() { method4(); StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); /*for (int i = 0; i < stackTrace.length; i++) { System.out.println(stackTrace[i].getMethodName()); }*/ return stackTrace[2].getMethodName(); //напишите тут ваш код } public static String method4() { method5(); StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); for (int i = 0; i < stackTrace.length; i++) { System.out.println(stackTrace[i].getMethodName()); } return stackTrace[3].getMethodName(); //напишите тут ваш код } public static String method5() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); /*for (int i = 0; i < stackTrace.length; i++) { System.out.println(stackTrace[i].getMethodName()); }*/ return stackTrace[4].getMethodName();//напишите тут ваш код } }
0
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2250292
Уровень 41
29 февраля 2020, 09:07
Получаем имя второго индекса массива методом stackTrace[2].getMethodName();
0
Denis Shadrin
Уровень 31
20 мая 2018, 15:08
Почему вообще работает так (ниже кусок кода) public static void main(String[] args) throws Exception { method1(); } public static String method1() { method2(); StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); return stackTraceElements[2].getMethodName(); } ведь если мы берем индекс 2, из последовательности getStackTrace->method2->method1->main возвратится method1 а не main, вызов method2 же тоже должен учитываться? Объясните пожалуйста
+4
Pavlo PlynkoJava-разработчик в CodeGymExpert
24 мая 2018, 14:30
Когда зашли в method2() - он добавился в stackTrace, когда вышли из него - удалился. На момент создания stackTraceElements в нем получается такая цепочка: getStackTrace->method1->main А method2 учитывался бы если бы мы были внутри метода method2().
+3
Ярослав Java Developer Master
24 апреля 2018, 15:23решение
Каждый вызванный метод заносится в стэк. Метод, вызванный последним, вернется первым. Вас не просили выводить циклами записи в методах. И getStackTrace тоже попадает в стэк. Стэк примерно такой у method5: main -> method1 -> method2 -> method3 -> method4 -> method5 -> getStackTrace. 6 - main, 5 - method1, 4 - method2, 3 - method3, 2 - method4, 1 - method5, 0 - getStackTrace. По сути, чтобы вернуть номер вызванного метода, нужно в каждом методе возвращать stackTrace[2], потому что stackTrace[0] - это получение стэка, а stackTrace[1] - это сам метод. Если бы были другие методы в каждом методе, тогда надо было бы ориентироваться на каждый отдельно.
+155
vera
Уровень 26
11 июня 2018, 10:58
спасибо. помогло
0
Ivan Martyniuk
Уровень 19
12 февраля 2020, 21:03
Очень доходчиво, спасибо!
+1
Andrzej Latysz
Уровень 22
22 февраля 2020, 16:31
спасибо, было бы не плохо включить это в теорию
+7
Dmitry
Уровень 18
13 апреля 2021, 10:18
жесть... никак не доходило что делаю не так... пробовал и 1 и 0 индексы масива... разные варианты создания масива и тд... а оно *кря* в обратном порядке считает....
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush