Java Code Hilfe?

1 Antwort

Als Screenshot ist das ein bisschen mühsam. Daher nur ein paar Anmerkungen:

  • x3 ist anfangs 0 und bleibt auch auf 0 - es gibt nach der Definition nie eine Zuweisung. Am Schluss der Schleife setzt du also x2 immer wieder auf 0. Das ist wohl nicht, was du willst - damit bleibst du nach der 1. Iteration immer am selben Punkt.
  • Aus einer Schleife bricht man mittels "break" aus. Bitte nicht den Zähler auf 100 setzen.
  • Du suchst offenbar den Betrag der Differenz: Math.abs() tut das.
  • Bitte verwende die automatische Formatierung deiner IDE, damit die Einrückungen passen und man das Zeug halbwegs lesen kann.

UltraYT 
Beitragsersteller
 29.10.2020, 11:56

ja da ist ein Fehler. Ich hab x3 = a * Math.sin(b * x2) + c und nicht x2 = ...

So nimmt x3 dann den Wert an. Während x2 den alten Wert hat. Am Ende wird die Differnz gerechnet. x2 - x3. Ist es kleiner als 10 hoch -7 dann Ausgabe. Ist es nicht dann wird x3 auf x2 übertragen und es wiederholt. So hab ich es mir gedacht.

0
alfredo153  29.10.2020, 12:04
@UltraYT

Deinen Code zu verstehen war mir mühsamer, als das einfach schnell selbst zu implementieren. Du machst es umständlicher als nötig (und sogar diese Lösung könnte man verkürzen, aber es soll lesbar bleiben):

public static void main(String[] args) {
    final double a = 0.4793758254555842;
    final double b = 2.5676932814206115;
    final double c = 0.46336869058102603;

    double x2 = 0.03357264174228247;

    for(int i=0; i<100; i++) {
        double prev = x2;
        x2 = a * Math.sin(b * x2) + c;

        if(Math.abs(x2 - prev) < 1e-7) {
            System.out.printf("Fixwert: %f", x2);
            return;
        }
    }
    System.out.println("kein Fixwert");
}
0
daCypher  29.10.2020, 13:03
@alfredo153

So, wie ich die Aufgabe interpretiere, soll die Schleife in jedem Fall 100 mal laufen und erst bei der letzten Iteration (oder nach der Schleife) prüfen, ob der Wert sich um weniger als 1e-7 verändert hat. Also nicht gleich den Wert zurückgeben, sobald er einmal weniger als 1e-7 Unterschied zum vorigen Wert hatte.

0
alfredo153  29.10.2020, 13:12
@daCypher

Möglich, ich fand das aber etwas fragwürdig - solche Näherungsaufgaben macht man ja üblicherweise nur bis zu einer gewissen Differenz als Abbruchbedingung. Wäre aber auch kein großes Ding, dann zieht man halt den if-Block hinter die Schleife:

public static void main(String[] args) {
    final double a = 0.4793758254555842;
    final double b = 2.5676932814206115;
    final double c = 0.46336869058102603;

    double x2 = 0.03357264174228247;
    double prev = x2;

    for(int i=0; i<100; i++) {
        x2 = a * Math.sin(b * x2) + c;
    }

    if(Math.abs(x2 - prev) < 1e-7) {
        System.out.printf("Fixwert: %f%n", x2);
    } else {
        System.out.println("kein Fixwert");
    }
}

0
alfredo153  29.10.2020, 13:15
@alfredo153

...wobei man natürlich die Aktualisierung von prev nicht vergessen sollte, im Gegensatz zu mir :-)

0