Anzahl der Argumente einer Funktion in einer Eingabe zählen

Guten Tag

Hat jemand eine Idee, wie an die Anzahl der Argumente einer Funktion in einer Eingabe zählen kann. z.B. bei der Eingabe max(1,2,7) ist die Anzahl 3 aber bei der Eingabe max1(2,3,max2(1,5,6),min(2,4)) sind die Anzahl der Argumente von max1, max2 bzw. min 4, 3, 2. Vor allem die geschachtelte Klammer machen mir Probleme



vielen Dank
 
Hi,

wenn du den Funktionsaufruf als String hast und der definiert immer so aussieht, kannst du das mit String.substring() und String.split() lösen.
Also erst den Namen und die Klammern der äußeren Funktion entfernen, dass du nur den Inhalt in den Klammern hast (die Parameter).

Beispiel: "max1(2,3,max2(1,5,6),min(2,4))" => "2,3,max2(1,5,6),min(2,4)"

Dann mit split am Komma trennen. Du bekommst ein String-Array mit den einzelnen Elementen.
Also in diesem Fall: String[]{"2", "3", "max2(1,5,6)", "min(2,4)"}

Nun kannst du das Array durchgehen und wenn du irgendwo wieder einen Funktionsaufruf hast, machst du für diesen das gleiche.
Am Beispiel deines 3. Parameters "max2(1,5,6)" würde das Parameter-Array so aussehen: String[]{"1", "5", "6"}.
Dieses gehst du wieder durch. Nun hast du hier keinen Funktionsaufruf als Parameter, also kannst du die Funktion mit den Werten aus dem Array ausführen.
Das Ergebnis speicherst du ins Ursprungsarray zurück:
Aus String[]{"2", "3", "max2(1,5,6)", "min(2,4)"} wird String[]{"2", "3", "6", "min(2,4)"}

Analog für deinen vierten Parameter "min(2,4)" bekommst du dann als Gesamtarray String[]{"2", "3", "6", "2"}. Wieder kannst du die Funktion ausführen, da kein Parameter ein Aufruf ist.

Erwartetes Gesamtergebnis: 6 (weil "max1(2,3,max2(1,5,6),min(2,4))" = "max1(2,3,6,2)" = "6")


Viel Spaß beim Implementieren! Bei Unklarheiten einfach nochmal nachfragen ;)

Gruß
Daniel
 

Neue Beiträge

Zurück