haLLO ihr lieben, ich versuche mir grad eine Klasse zusammen zu bauen, die mir die Ableitung einer Funktion ausgibt! Da es nicht nur einfache Funktionen sein sollen sondern auch größere, verkettete...
habe ich grad eine Methode geschrieben, die mir die funktion,in mehrere Teilfunktionen splittet.
Es ist noch nicht die ganze logik drin aber mein JUnit test müsste eigentlich aber schon gehen. Kriegt aber immer wieder eine StringIndexOutOfBoundsException
ich sehe auch bei debugen wo das passiert, also das der endindex< index ,doch das soll nicht passieren und verstehe auch nicht wieso!HIer mein Test
und meine Klasse
Also wenn ich es debugge, dann funktioniert das auch alles soweit, bis die restFunktion null ist, weil die ganze Funktion schon durch gegangen ist.
wenn mein compiler in zeile 49 ist und restFunktion ==null, dann geht er zum return ableitungen;
so damit müsste das ganze doch vorbei sein oder nicht????
er soll mir nun nur das String[] mit den Ableitungen zurück geben aber irgendwie springt er immer in zeile 59, wenn die restFunktion null ist! Und dann fängt wieder von vorne an?!?!?!?!?!
Und ich verstehe einfach nicht wieso !!!Kann mir jemand weiter helfen?
???:L
habe ich grad eine Methode geschrieben, die mir die funktion,in mehrere Teilfunktionen splittet.
Es ist noch nicht die ganze logik drin aber mein JUnit test müsste eigentlich aber schon gehen. Kriegt aber immer wieder eine StringIndexOutOfBoundsException
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1958)
at funktionen.Funktionssplitter.zerlegeFunktionen(Funktionssplitter.java:37)
at funktionen.TestFunktionssplitter.testTestName(TestFunktionssplitter.java:48)
ich sehe auch bei debugen wo das passiert, also das der endindex< index ,doch das soll nicht passieren und verstehe auch nicht wieso!HIer mein Test
Java:
@Test
public void testTestName()throws Exception{
String function = "Math.sin(x)+Math.cos(x)";
ableitung = new ErsteAbleitung(function);
splitter = new Funktionssplitter(function, ableitung);
String[] zerlegeFunktionen = splitter.zerlegeFunktionen(function);
assertThat(zerlegeFunktionen[0], is("Math.cos(x)"));
assertThat(zerlegeFunktionen[1], is("-Math.sin(x)"));
}
und meine Klasse
Java:
package funktionen;
public class Funktionssplitter {
String function;
ErsteAbleitung ableitung;
public Funktionssplitter( String function,
ErsteAbleitung ableitung) {
super();
this.function = function;
this.ableitung = ableitung;
}
final char JOCKER_OPEN = '(';
final char JOCKER_CLOSE = ')';
final char JOCKER_MATH = 'M';
String teilFunktion;
String[] ableitungen = new String[2];;
String[] regulärenAusdrücke = new String[5];
private String art;
private String restFunktion;
int count = 0;
String[] zerlegeFunktionen(String function) {
if(function != null){
for (int i = 0; i < function.length(); i++) {
// wenn es eine mathematische Funktion ist...
if (function.charAt(i) == JOCKER_MATH) {
// ermittelt was das für eine funktion ist(cos, sin,exp...)
int index = i + 5;
art = function.substring(index, index + 3);
// wo endet die mathematische funktion?
int endIndex = function.indexOf(JOCKER_CLOSE)+1;
//die gefundene Funktion die abgeleitet werden soll
teilFunktion = function.substring(i, endIndex );
//die Ausdrücke zwischen den Funktionen, aber nur wenn noch danach eine Funktion vorhanden ist
if(endIndex != function.length()){
regulärenAusdrücke[count] = function.substring(endIndex, endIndex+1);
//die Funktion mit der weiter gearbeitet werden muss
restFunktion = function.substring(endIndex+1, function.length());
}
else restFunktion = null;
// cosinus
if (art.equals("cos")) {
ableitungen[count] = ableitung.cosAbleitung(teilFunktion);
count++;
if(restFunktion == null)
return ableitungen;
else
zerlegeFunktionen(restFunktion);
}
// sinus
if (art.equals("sin")) {
ableitungen[count] = ableitung.sinAbleitung(teilFunktion);
count++;
if(restFunktion != null)
zerlegeFunktionen(restFunktion);
else
return ableitungen;
}
// exponential
if (art.equals("exp")) {
ableitungen[count] = ableitung.expAbleitung(teilFunktion);
count++;
if(restFunktion != null)
zerlegeFunktionen(restFunktion);
else
return ableitungen;
}
// logarithmus
if (art.equals("log")) {
ableitungen[count] = ableitung.lnAbleitung(teilFunktion);
count++;
if(restFunktion != null)
zerlegeFunktionen(restFunktion);
else
return ableitungen;
}
// potenzieren
if (art.equals("pow")) {
ableitungen[count] = ableitung.potenzAbleitung(teilFunktion);
count++;
if(restFunktion != null)
zerlegeFunktionen(restFunktion);
else
return ableitungen;
}
// //wurzel
// if(art == "sqr"){
// ableitungen[count] =
// ableitung.cosAbleitung(function.substring(i, endIndex));
// count ++;
// }
}
}
}
return ableitungen;
}
}
wenn mein compiler in zeile 49 ist und restFunktion ==null, dann geht er zum return ableitungen;
so damit müsste das ganze doch vorbei sein oder nicht????
er soll mir nun nur das String[] mit den Ableitungen zurück geben aber irgendwie springt er immer in zeile 59, wenn die restFunktion null ist! Und dann fängt wieder von vorne an?!?!?!?!?!
Und ich verstehe einfach nicht wieso !!!Kann mir jemand weiter helfen?
???:L
Zuletzt bearbeitet von einem Moderator: