est-il possible de mémoriser le nom de la méthode dans un tableau, et comptez combien de fois il a été appelé?

James Wong:

Je dois simuler une pile d'appel. Maintenant, je l'ai déjà mis en place ma pile, maintenant, je me demande s'il y a un moyen de stocker le nom de la méthode dans le tableau.

Par exemple, j'ai une fonction récursive qui boucle 5 fois, de sorte que la pile sera:

recur() //fifth 
recur() //fourth
recur() //third
recur() //second
recur() //first

mais est-il de toute façon de les stocker dans un tableau et l'afficher sur? Je n'ai pas se soucier de ce qu'il fait dans la fonction récursive, je veux juste afficher le nom de la pile et la séquence et comment il fonctionne.

Ezequiel:

Vous pouvez compter le nombre d'invocations sans passer tout nouveau paramètre à la recurméthode.

recursiveMethodCount filtre la trace de la pile en cours et compte les ocurrences.

import java.util.Arrays;

public class StackTrace {

    public static void main(String[] args) {
        recur();
    }

    public static void recur() {
        long recursionLevel = recursiveMethodCount("StackTrace", "recur");
        if (recursionLevel < 10) {
            System.out.println(String.format("Recursion level is %d, invoking recur() again.", recursionLevel));
            recur();
        } else {
            System.out.println(String.format("Recursion level is %d, no more invocations.", recursionLevel));
        }
        System.out.println(String.format("Recursion level is %d, returning.", recursionLevel));
    }

    public static long recursiveMethodCount(String declaringClass, String methodName) {
        return Arrays.stream(Thread.currentThread().getStackTrace())
                .filter(stackTraceElement -> stackTraceElement.getClassName().equals(declaringClass))
                .filter(stackTraceElement -> stackTraceElement.getMethodName().equals(methodName))
                .count();

    }
}

La sortie de ce code est

Recursion level is 1, invoking recur() again.
Recursion level is 2, invoking recur() again.
Recursion level is 3, invoking recur() again.
Recursion level is 4, invoking recur() again.
Recursion level is 5, invoking recur() again.
Recursion level is 6, invoking recur() again.
Recursion level is 7, invoking recur() again.
Recursion level is 8, invoking recur() again.
Recursion level is 9, invoking recur() again.
Recursion level is 10, no more invocations.
Recursion level is 10, returning.
Recursion level is 9, returning.
Recursion level is 8, returning.
Recursion level is 7, returning.
Recursion level is 6, returning.
Recursion level is 5, returning.
Recursion level is 4, returning.
Recursion level is 3, returning.
Recursion level is 2, returning.
Recursion level is 1, returning.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=338743&siteId=1
conseillé
Classement