Hi, probier grad an meiner Praktikumsaufgabe rum und komme bei einer Fehlermeldung nicht weiter.
Hab diese auch gegoogelt und verstanden das obige Fehlermeldung bedeutet dass auf ein array zugegriffen wird der null ist. Das zeigt mir der debugger auch in eclipse an, aber ich versteh nicht warum das so ist und warum das schlimm ist; da nämlich der Konstruktor den pe array ja aus der main beziehen sollte.
Wenn ich die initialisierung in pe[]; am Anfang weglasse kriege ich einen Fehler bei n = pe.length; , allerdings brauch ich für das Programm die Länge des eingegeben Strings... komme nicht weiter !?!
Code:
//---------------------------------------------------------------------------
// Praktikumsaufgabe2.3
// Jörn Wilhelm
//---------------------------------------------------------------------------
public class Polynom {
int[] p;
int[] pe;
int n; // Länge eingegebenes Polynom
int i = 1;
int k = 0;
double x;
double zw;
public Polynom(int[] pe) {
while (i <= pe.length) {
p[i] = pe[i];
i++;
}
}
public double evaluate(double x) {
n = pe.length;
zw = p[n];
while (n > 0) {
zw = p[n] * x + p[n - 1];
n--;
}
return zw;
}
public static void main(String[] args) {
int[] f = { 3, 4, 2, 1 };
Polynom p = new Polynom(f);
System.out.print(p.evaluate(2));
System.out.print(f.length);
};
}
1. Problem:
Du initialisert das Array int[] p nicht. Deswegen funktioniert schonmal die Zuweisung p = pe nicht.
2. Problem:
Initialisert man dieses Array, so funktioniert die Methode evaluate(double x) nicht, da du dort n = pe.length aufrufst. int[] pe ist in diesem Falle aber noch null, da hier die Variable benutzt wird und nicht das im Konstruktor übergebene Array. Hier würde vermutlich n = p.length besser passen. Dann musst du aber auch beachten, dass du eine Stelle zuweit bist, da ein Array nur bis p.length - 1 geht.
Weitere Probleme: int k = 0 wird nie benutzt int i = 1. Wieso nicht = 0? Die erste Stelle eines Arrays ist immer 0 und die letzte die Länge des Arrays - 1.
Wieso kopierst du im Konstruktor das Array so umständlich von int[] pe auf int[] p?
Wozu benutzt du soviele Variablen? Das meiste kann man auch innerhalb der Methoden definieren.
Du weißt in der while-Schleife in evaluate immer zu. Damit ist zw nur das letzte Ergebnis und da addierst nicht alle zusammen.
Einfachere Lösung
Code:
package de;
//---------------------------------------------------------------------------
// Praktikumsaufgabe2.3
// Jörn Wilhelm
//---------------------------------------------------------------------------
public class Polynom {
int[] p;
public Polynom(int[] pe) {
p = pe;
}
public double evaluate(double x) {
int n = p.length -1;
double zw = p[n];
while (n > 0) {
zw = p[n] * x + p[n - 1];
n--;
}
return zw;
}
public static void main(String[] args) {
int[] f = { 3, 4, 2, 1 };
Polynom p = new Polynom(f);
System.out.println(p.evaluate(2));
System.out.println(f.length);
};
}
Gibt bei mir als Ausgabe
Code:
11.0
4
Wobei ich nicht genau verstehe, was du generell damit machen möchtest. Eine Erklärung der AUfgabenstellung wäre doch sehr hilfreich.
Generell solltest du dir zu Klassen und der Verwendung von Variablen in Klassen/Methoden nochmal etwas anschauen.
Danke fuer die Tips - hab versucht alles umzusetzten und hat denk ich geklappt.
Was die Aufgabenstellung angeht: geht es darum ein Polynom beliebiger groesse zu programmieren und von diesem eine ableitung zu machen. In der main soll mit x=-2.5 ausprobiert werden ob es korrekt funktioniert. Bei mir kommt allerdings 0 und 40 raus - es sollte allerdings 0 und 85 rauskommen fuer das Beispielpolynom (siehe im code in main funktion)
Code:
/**
* ---------------------------------------------------------------------------
* // Praktikumsaufgabe2.3 Joern Wilhelm
* //---------------------------------------------------------------------------
*
* @author Joern
*/
public class Polynom {
/**
* Definition von Laufindizes und arrays.
*/
private int[] p;
int[] pe;
int n;
int i = 0;
int k = 0;
double x;
double zw;
/**
* Setzt p auf Werte des eingegebenen arrays.
*
* @param pe
*/
public Polynom(int[] pe) {
this.p = pe;
}
/**
* Diese Funktion erzeugt aus dem eingegeben Array ein Polynom.
*
* @param x
* @return double mit Inhalt Polynom mit eingesetztem x.
*/
public double evaluate(double x) {
double end = 0;
n = p.length - 1;
zw = p[n];
while (n < 0) {
zw = p[n];
while (k < 0)
zw *= x;
end = end + zw;
n--;
}
return end;
}
/**
* Funktion leitet Polynom ab. Dabei unterscheidet sie zwei faelle. Naemlich
* einstellig und mehrstellige Polynome.
*
* @return
*/
public Polynom derivative() {
if (p.length > 1) {
int[] pe = new int[p.length - 1];
for (int i = p.length - 1; i > 0; i--) {
pe[i - 1] = p[i] * i;
}
return new Polynom(pe);
} else {
int[] pe = new int[1];
return new Polynom(pe);
}
};
/**
* Main Funktion ueberprueft fuer eingegebenes Polynom f ob die Funktionen
* evaluate und derivative fuer x= -2.5 den korrekten Wert ergeben.
*
* @param args
*/
public static void main(String[] args) {
int[] f = { 75, 0, -2, 4 };
Polynom p = new Polynom(f);
System.out.print(p.evaluate(-2.5) + " ");
System.out.print(f.length);
System.out.print(p.derivative().evaluate(-2.5));
};
}
Wollte die Aufgabenstellung nicht posten damit mir das nicht als "Loesung erschleichen" ausgelegt wird tummelt sich bestimmt der eine oder andere uebungsgruppenleiter hier.