Woher nimmt das Programm die Variablenwerte????

testhoch1

Neues Mitglied
Hi, ich habe für die Uni eine Aufgabe bekommen, 3 Funktionen und ich soll je nach Auswahl der Funktion eine Wertetabelle für ein bestimmtes Intervall erstellen. Den Code hab ich eingebunden.

Leider funktioniert das nicht so ganz wie es soll. Statt einer Fehlermeldung oder einer funktionierenden Abfrage kommt eine Werteliste der Methode f3 in der Konsole:
0
1
1
2
2
3
3

Die stimmt auch für Testwerte die ich mal eingegeben habe aber momentan gelöscht hab. Und jetzt versteh ich nicht warum er erstmal die Abfrage in der main methode komplett übergeht und woher er die der Variablen noch hat.

Bin über jede Hilfe Dankbar.

Java:
import javax.swing.JOptionPane;

public class Aufgabe62
{
    static double ausgabe;
    static int a;
    static int b;
    static int k;
   
    public static double f1 (double x)
    {
        double f1 = a * Math.sin(x+b);
        return f1;
    }
   
    public static double f2 (double x)
    {
        double f2 = a * Math.exp(-1*b*x);
        return f2;
    }
    public static double f3 (int k, double x)
    {
        double f3 = (x/(2*k)+1)*k;
           
        return (int) f3;
    }
   
    public static void wertetabelle (int funktion, int start, int ende, int schrittgroeße)
    {   
        for (double i=start; i<=ende; i=i+schrittgroeße)
        {
            switch(funktion)
            {
                case (1):
                    ausgabe = f1 (a, b, i);
                    break;
                case (2):
                    ausgabe =  f2 (a, b, i);
                    break;
                case (3):
                    ausgabe =  f3 (k, i);
                    break;
            }
           
            System.out.println(ausgabe);
       
        }
    }
   
    public static void main(String[] args)
    {
   
        String sfunktion = JOptionPane.showInputDialog("Bitte geben Sie die Art der Funktion ein (1, 2 oder 3)");
        int funktion = Integer.parseInt(sfunktion);
   
        String sstart = JOptionPane.showInputDialog("Bitte geben Sie den Startwert des Intervalls ein.");
        int start = Integer.parseInt(sstart);
   
        String sende = JOptionPane.showInputDialog("Bitte geben Sie den Endwert des Intervalls ein.");
        int ende = Integer.parseInt(sende);
   
        String sschrittgroeße = JOptionPane.showInputDialog("Bitte geben Sie die Schrittgröße im Intervall an.");
        int schrittgroeße = Integer.parseInt(sschrittgroeße);
   
   
        switch (funktion)
            {
                case (1): case (2):
               
                    String sa = JOptionPane.showInputDialog("Bitte geben Sie den Parameter a ein.");
                    a = Integer.parseInt(sa);
           
                    String sb = JOptionPane.showInputDialog("Bitte geben Sie den Parameter b ein.");
                    b = Integer.parseInt(sb);
           
                    wertetabelle (funktion, start, ende, schrittgroeße);
                break;
                case (3):
               
                    String sk = JOptionPane.showInputDialog("Bitte geben Sie den Parameter k ein.");
                    k = Integer.parseInt(sk);
               
                    wertetabelle(funktion, start, ende, schrittgroeße);
                break;
                   
            }
   
   
    }
}
 
Hast du deinen Code überhaupt kompiliert? Ich bekomme zwei Fehlermeldungen.

Java:
Aufgabe62.java:35: error: method f1 in class Aufgabe62 cannot be applied to given types;
                    ausgabe = f1 (a, b, i);
                              ^
  required: double
  found: int,int,double
  reason: actual and formal argument lists differ in length
Aufgabe62.java:38: error: method f2 in class Aufgabe62 cannot be applied to given types;
                    ausgabe =  f2 (a, b, i);
                               ^
  required: double
  found: int,int,double
  reason: actual and formal argument lists differ in length
2 errors

Auf dem ersten Blick sind mir noch andere unschöne Dinge aufgefallen:
- Fehlendes default in den switch-Statements. Was passiert denn wenn du andere Werte als 1,2,3 einsetzt?
- Die Variablen mit dem Ergebnis in den drei Funktionen heißen wie die Funktion selbst. Klar ist das kein Fehler, aber mehr als unschön. Besser wäre hier z.B. einfach ergebnis
- Warum "for (double i=start; i<=ende; i=i+schrittgroeße)" ?? Ein int addiert mit einem int ergibt immer auch einen int.
- Wenn k in f3 den Wert 0 hat, kommt es zu einem Fehler (Division durch 0). Das Prüfen von Inputs/Outputs ist in der Programmierung sehr wichtig.

Ich hoffe meine Anmerkungen helfen dir weiter. Bist du im 1. Semester?
 
Bin über jede Hilfe Dankbar.
Das sollte Dir helfen:
Java:
import java.lang.reflect.Method;

public class Tabl {
    public static void main(String[] args) throws Exception {
        for (Method method : Tabl.class.getMethods()) {
            if (method.getName().matches("f\\d")) {
                System.out.println(method.toString());
                for (int i = 1; i < 5; i++) {
                    for (int j = 1; j < 5; j++) {
                        if (method.getParameterCount() == 1) {
                            double d3 = (double) method.invoke(Tabl.class, i);
                            System.out.println(i + " " + j + " : " + d3);
                            break;
                        } else {
                            int d3 = (int) (double) method.invoke(Tabl.class, i, j);
                            System.out.println(i + " " + j + " : " + d3);
                        }
                    }
                }
                System.out.println("");
            }
        }
    }

    static int a = 2;
    static int b = 3;

    public static double f1(double x) {
        double f1 = a * Math.sin(x + b);
        return f1;
    }

    public static double f2(double x) {
        double f2 = a * Math.exp(-1 * b * x);
        return f2;
    }

    public static double f3(int k, double x) {
        double f3 = (x / (2 * k) + 1) * k;

        return (int) f3;
    }
}

Code:
public static double connect4ai.Tabl.f3(int,double)
1 1 : 1
1 2 : 2
1 3 : 2
1 4 : 3
2 1 : 2
2 2 : 3
2 3 : 3
2 4 : 4
3 1 : 3
3 2 : 4
3 3 : 4
3 4 : 5
4 1 : 4
4 2 : 5
4 3 : 5
4 4 : 6

public static double connect4ai.Tabl.f2(double)
1 1 : 0.09957413673572789
2 1 : 0.004957504353332717
3 1 : 2.468196081733591E-4
4 1 : 1.228842470665642E-5

public static double connect4ai.Tabl.f1(double)
1 1 : -1.5136049906158564
2 1 : -1.917848549326277
3 1 : -0.5588309963978517
4 1 : 1.3139731974375781


Und jetzt versteh ich nicht warum er erstmal die Abfrage in der main methode komplett übergeht und
Weil Du über funktion switchst.


aber momentan gelöscht hab.
Tja das ist voll ärgerlich.
 

Neue Themen


Zurück
Oben