Hallo, ich habe Probleme beim Lösen einer Aufgabe. Ich soll bei dem folgenden Code mit einer Method aus einer anderen Klasse die Methoden 'summe(int, int)', 'fakultaet(int)' und fakultDifferenz(int, int)' auf die Funktionalität testen lassen. Ich verstehe das nicht ganz komme auch mit Tutorials sowie meinen Vorlesungen nicht wirklich weiter..
Dabei sollen wir nicht mit Unit-Tests arbeiten. Um diese Aufgabe zu lösen habe ich von einem Benutzer bereits einen Lösungsansatz bekommen der wie folgt aussieht. Aber dieser funktioniert nicht wirklich, weil ich keine statischen Methoden habe und ich soll auch keine statischen Methoden haben laut Dozent.
Danke schonmal für eure Hilfe!
Java:
public class Rechner
{
private double ergeb, a, b;
public Rechner()
{
ergeb = 0;
}
public void setA(double neuerAWert){ // a kann ein Wert des Types double vergeben werden
a = neuerAWert;
}
public void SetB(double neuerBWert){ // b kann ein Wert des Types double vergeben werden.
b = neuerBWert;
}
//Mit den folgenden Methoden kann man einen Wert für jeweils a und b vergeben.
//Mit diesen wird dann die ausgewählte Rechenoperation durchgeführt und das Ergebnis wird ausgegeben.
public double addiere(double a, double b){ // Methode zur Addition der Werte
return a + b;
}
public double subtrahiere(double a, double b){ // Methode zur Subtraktion der Werte
return a - b;
}
public double multipliziere(double a, double b){ // Methode zur Multiplikation der Werte
return a*b;
}
public double dividiere(double a, double b){ // Methode zur Division der Werte
if (a == 0 || b == 0) { // if-Anweisung: falls einer der Variablen den Wert 0 hat, wird eine Fehlermeldung ausgegeben.
System.err.println();
System.err.println ("Fehler! Sie haben versucht mit 0 zu teilen."); // Alternative print Anweisung, Error wird ausgegeben
return ergeb = 0;
}
else // Ansonsten wird das Ergebnis einer "normalen" Rechnung (ohne "0" als Wert) ausgegeben.
return a/b;
}
public double getErgebnis(){ // Mit dieser Methode kann das Ergebnis nochmal aufgerufen werden.
System.out.println("Das vorherige Ergebnis lautet: " + ergeb + "."); // Das Ergebnis der letzten Rechenoperation wird angezeigt.
return ergeb;
}
public double summe(int a, int b){ // Diese Mehode gibt die Summe aller Ganzzahlen von der ersten bis zur zweiten Ganzzahl aus.
// a und b können Werte des Types Integer vergeben werden
int ergeb = 0;
if(a > b){ // Wenn a größer 0 ist werden die Werte a und b getauscht. Das soll bei der Berechnung und Aufzählung Fehler vermeiden.
int temp = a;
a = b;
b = temp;
}
for (; a <= b; a++){ // Die for-Schleife, die die Summe aller Ganzzahlen von der ersten bis zur zweiten Ganzzahl ausgibt.
ergeb = (int)addiere(a, ergeb); // Greift dabei auf die Methode addiere(double, double) zu.
System.out.println(ergeb);
}
return (double)ergeb;
}
public double fakultaet(int f) { // diese Methode gibt die Fakultät des Übergabeparameters zurück.
int fakult = 1; // außerhalb der Schleife anlegen und Wert zuweisen
int faktor = 1;
while (faktor <= f) {
fakult = (int)multipliziere(fakult, faktor); // Greift dabei auf die Methode multipliziere(double, double) zu.
faktor++;
}
System.out.println("Die Fakultät von " + f + " ist: " + fakult);
return fakult;
}
public double fakultDifferenz(int a, int b) { // Gibt die Differenz zweier Fakultäten
ergeb = subtrahiere(fakultaet(a), fakultaet(b)); // Greift dabei auf die Methode subtrahiere(double, double) zu.
if ( ergeb < 0) // If-Anweisung, damit das Ergebnis, also die Differenz immer positiv ist.
{
ergeb = 0 - ergeb;
}
return ergeb;
}
}
Dabei sollen wir nicht mit Unit-Tests arbeiten. Um diese Aufgabe zu lösen habe ich von einem Benutzer bereits einen Lösungsansatz bekommen der wie folgt aussieht. Aber dieser funktioniert nicht wirklich, weil ich keine statischen Methoden habe und ich soll auch keine statischen Methoden haben laut Dozent.
Java:
public class TestItem {
public enum FUNC_TYPE {
SUM, FACT, FACDIFF
};
public final int[] param;
public final int result;
public final FUNC_TYPE type;
public TestItem(FUNC_TYPE type, int a, int result) {
this.type = type;
param = new int[1];
param[0] = a;
this.result = result;
}
public TestItem(FUNC_TYPE type, int a, int b, int result) {
this.type = type;
param = new int[2];
param[0] = a;
param[1] = b;
this.result = result;
}
@Override
public String toString() {
String str = "[";
for (Integer i : param)
str += i + " ";
return str + "-> " + result + "]";
}
}
Java:
public class Test {
public TestItem[] tests = { new TestItem(TestItem.FUNC_TYPE.SUM, 2, 5, 14),
new TestItem(TestItem.FUNC_TYPE.FACT, 7, 5040), new TestItem(TestItem.FUNC_TYPE.FACDIFF, 3, 5, -114) };
public void main(String[] args) {
for (TestItem t : tests)
System.out.println(t.type + "\t" + testen(t) + "\t" + t);
}
public boolean testen(TestItem test) {
switch (test.type) {
case FACT:
return Rechner.fakultaet(test.param[0]) == test.result;
case FACDIFF:
return Rechner.fakultDifferenz(test.param[0], test.param[1]) == test.result;
case SUM:
return Rechner.summe(test.param[0], test.param[1]) == test.result;
}
return false;
}
}
Danke schonmal für eure Hilfe!
Zuletzt bearbeitet von einem Moderator: