Pomoc w zadaniu z StackTraceElement

0

Mam prośbę odnośnie tego zadania .W samouczku jest to fatalnie to opisane i nie daje rady czy ktoś pomoze ??? Moje rozwiązanie niestety nie przechodzi sprawdzenia .

"Napisz pięć metod, które wywołują siebie nawzajem.
Każda metoda powinna zwracać nazwę metody, która ją wywołała. Aby uzyskać tę informację, użyj śladu stosu.

• W klasie powinno być 5 metod (oprócz metody main).
• Każda metoda powinna wywoływać następną: main wywołuje method1, method1 wywołuje method2 itd.
• Każda metoda musi zwracać nazwę metody, która ją wywołała.
• Aby uzyskać nazwę metody wywołującej, użyj metody getMethodName.

Kod:


/* 
Zwracanie śladu stosu
*/

public class Solution {
   public static void main(String[] args) throws Exception {
       method1();
   }

   public static StackTraceElement[] method1() {
       method2();
       //tutaj wpisz swój kod
   }

   public static StackTraceElement[] method2() {
       method3();
       //tutaj wpisz swój kod
   }

   public static StackTraceElement[] method3() {
       method4();
       //tutaj wpisz swój kod
   }

   public static StackTraceElement[] method4() {
       method5();
       //tutaj wpisz swój kod
   }

   public static StackTraceElement[] method5() {
       //tutaj wpisz swój kod
   }
}


0

Aby uzyskać tę informację, użyj śladu stosu

Mógłbyś to rozwinąc?

0

No właśnie tylko tyle jest w zadaniu ja próbowałem rozwiązać je w taki sposób ale sprawdzenie wyrzuca "Każda metoda musi zwracać nazwę metody, która ją wywołała nie zostało spełnione ".



/* 
Ślad stosu wita ponownie
*/

public class Solution {
    public static void main(String[] args) throws Exception {
        method1();
    }

    public static String method1() {
        method2();
        StackTraceElement[] element=Thread.currentThread().getStackTrace();
        return element[0].getMethodName();
    }

    public static String method2() {
        method3();
        StackTraceElement[] element=Thread.currentThread().getStackTrace();
        return element[0].getMethodName();
    }

    public static String method3() {
        method4();
        StackTraceElement[] element=Thread.currentThread().getStackTrace();
        return element[0].getMethodName();
    }

    public static String method4() {
        method5();
        StackTraceElement[] element=Thread.currentThread().getStackTrace();
        return element[0].getMethodName();
    }

    public static String method5() {
       
        StackTraceElement[] element=Thread.currentThread().getStackTrace();
        return element[0].getMethodName();
}
}

0

Jest to irytujące i nie rozumiem do końca własnego kodu ale wyswietla dobrze ale i tak nie przechodzi sprawdzenia .....



/* 
Ślad stosu wita ponownie
*/

public class Solution {
    public static void main(String[] args) throws Exception {
      System.out.println(method1());
      System.out.println(method2());
      System.out.println(method3());
      System.out.println(method4());
      System.out.println(method5());
    }

    public static String method1() {
        method2();
       
        return Thread.currentThread().getStackTrace()[2].getMethodName();
    }

    public static String method2() {
        method3();
        return Thread.currentThread().getStackTrace()[1].getMethodName();
    }

    public static String method3() {
        method4();
        return Thread.currentThread().getStackTrace()[1].getMethodName();
    }

    public static String method4() {
        method5();
        return Thread.currentThread().getStackTrace()[1].getMethodName();
    }

    public static String method5() {
       
        return Thread.currentThread().getStackTrace()[1].getMethodName();
}
}

0

Odpowiadam sam sobie nie jest dobrze nie potrafię dla method2 wyswietlić method 1 . Nie rozumiem jak dobiera się te liczby w [] .
Thread.currentThread().getStackTrace()[1].getMethodName();?????

0

Albo to zadanie jest źle zrobione albo czegoś nie łapię: main woła f, f woła y, y woła z, a co z ma wołać, nie może to być main, a jak będzie to jedna z f, y, z, to mamy infinite mutual recursion :)

import java.lang.*;
class Main {
    public static StackTraceElement f() {
    y();
    StackTraceElement el = new StackTraceElement("Main", "main", null, -1);
    return el;
  }
  public static StackTraceElement y() {
    z();
    StackTraceElement el = new StackTraceElement("Main", "f", null, -1);
    return el;
  }

    public static StackTraceElement z() {
    // ????
    StackTraceElement el = new StackTraceElement("Main", "y", null, -1);
    return el;
  }

  public static void main(String[] args) {
    f();
    System.out.println(f().getMethodName());
    System.out.println(y().getMethodName());
    System.out.println(z().getMethodName());
  }
}
0

na z ma się kończyć stos . Z ma być na samej górze stosu . Czyli z wywołała metoda y , y z kolei f . W moim zadaniu pierwszą metodą jest właśnie main . Main wywołuje 1 , 1 wywołuje 2 , 2 wywołuje 3 , 3 wywołuje 4 ,4 wywołuje 5 i mamy sam szczyt stosu .

0

To tak u mnie jest i co?

0

Zostawiam to te głąby(autorzy zadania) pokazały nic nie mówiący przykład na metodach void który w przypadku metod które coś zwracają nie pomaga . I Dwie linijki opisu który też nic nie mówi a ja straciłem 3 h klejąc jakieś czary z własnej niewiedzy . :D :D Nie mam już sił i nerwów

0

Ok byłem w łazience na szybkim resecie i w końcu mnie natchnęło po 4 h walki oto rozwiązanie .....
Stwierdzam że chyba nie jestem za bystry

package pl.codegym.task.task09.task0902;



/* 
Ślad stosu wita ponownie
*/

public class Solution {
    public static void main(String[] args) throws Exception {
       method1();

         
       
           
    
      
    }
    static StackTraceElement[] a;
    public static String method1() {      
        method2();    
         
        return a[6].getMethodName();
    }

    public static String method2() {
        method3();
        return a[5].getMethodName();
    }

    public static String method3() {
        method4();
        return a[4].getMethodName();
    }

    public static String method4() {
        method5();
        return a[3].getMethodName();
    }

    public static String method5() {
        a=Thread.currentThread().getStackTrace();
        return a[2].getMethodName();
         
        }
       
        
}


żeby tyle się z tym męczyć ŻAL

1

Nie ma co uważać ,że nie jesteś za bystry nie siedź nad jednym zadaniem nad codegym po 4 godziny tylko rób następne i idź dalej jak masz materie. Tam jest tak ,że niektóre zadania są banalnie proste ale tak zagmatwane ,że ciężko zrozumieć o co chodzi :)

0

Wiem ale jak czegoś nie rozwiąże to mnie gryzie całą noc i nie mogę przez to spać .. Serio :P lubię kończyć coś czego się podjąłem

1 użytkowników online, w tym zalogowanych: 0, gości: 1