Hilfe bei einer Aufgabe

jonathanpizza

Mitglied
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..

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:
Richtig. Die einzige statische Methode, die Du haben solltest und auch haben musst, ist main. In main erzeugst Du dann ein Objekt (ggf. auch mehrere), das (die) die Arbeit übernimmt.
Also habe das jetzt bisher so, nur wie mache ich jetzt weiter weil die Methoden sind ja keine statischen Methoden

Java:
public class Teste
{ 

    private double a, b;

    public boolean testenSumme(){
        if (Rechner.summe(2, 5) == 14&&Rechner.summe){
            return true;
        } 
        else{
            return false;
        }

    }

    public boolean testenFak(){
        if (Rechner.fakultaet(5) == 120&&Rechner.fakultaet){
            return true;
        }

        else{
            return false;
        }
    }

    public boolean testenFakDif(){
        if (Rechner.fakultDifferenz(5, 2) == 118&&Rechner.fakultaet){
            return true;
        }

        else{
            return false;
        }
    }
}
 

Zurück
Oben