if-else Bedingung wird ignoriert

tartagg

Mitglied
Java:
import java.util.Locale;
import java.util.Scanner;

public class cal {
public static void main(String[]args) {
Scanner input = new Scanner(System.in).useLocale(Locale.US);
double n;
System.out.println("Please enter n > 0: ");
    // Bedingung für +- abwechselnde Schleife. Ab 1/1 beginnt die Summierung mit -...Deswegen als erste Aktualisierung ist i-- da
    n = input.nextDouble();
    for (double i = 1.0; i < n; i++) {
        // Wenn i größer und i geteilt durch 2 nicht rest null ergibt, dann ungerade Zahl...und bei ungerade minus
        if(i % 2 != 0) {
           System.out.println(Math.log(2) + (- 1.0/input.nextDouble()));
        } else {
            System.out.println(Math.log(2) + (1.0/input.nextDouble()));
        }
        }}}


Wenn ich für n = 15 eingebe
kommt das richtige raus, nämlich -> 0,6264

Allerdings...Wenn ich 15 nochmal eingebe, rechnet es die else-Aussage durch, obwohl 15 dessen Bedingung nicht erfüllt.

wie sorge ich dafür, dass es beim Eingeben von 15 bei der Ausgabe 0,6264 bleibt? Was ist an meinem Programm falsch?
 
Deine Erwartungshaltung verstehe ich nicht. Du hast eine Schleife, die i hoch zählt. Und daher wird abwechselnd der of Block und der Else Block ausgeführt.

Die zweite Zahl, die eingegeben wird, hat darauf doch gar keinen Einfluss.
 
Deine Erwartungshaltung verstehe ich nicht. Du hast eine Schleife, die i hoch zählt. Und daher wird abwechselnd der of Block und der Else Block ausgeführt.

Die zweite Zahl, die eingegeben wird, hat darauf doch gar keinen Einfluss.
Achse, stimmt...Das wollte ich gar nicht. Wenn ich aber eine Schleife hinzufüge, die die Berechnung immer neu ausführt bei neuer Eingabe n, dann sollte nur if oder else berücksichtigt werden, oder? Ich versuche mit dem Programm folgende Berechnung auszuführen ln(2) + 1/1 - 1/2 + 1/3 -+ ... + ((-1)/n) hoch (n-1). Und ich habe dabei Schwierigkeiten.
 
Also, zunächst einmal ist n eine natürliche Zahl, womit Du schon einmal int statt double verwenden kannst und solltest. Gleiches gilt natürlich für i. Dann wäre die Frage, warum Du in der Schleife nochmal Benutzereingaben erwartest. Und schlussendlich bildest Du auch nirgends eine Summe, sondern lässt Dir einfach das Ergebnis von ln(2) +/- 1/x ausgeben, wobei x die Benutzereingabe einer jeden Iteration kennzeichnet.

Nachtrag: spiel es mal für ein kleines n (3 oder 4) auf Papier durch.
 
Also, zunächst einmal ist n eine natürliche Zahl, womit Du schon einmal int statt double verwenden kannst und solltest. Gleiches gilt natürlich für i. Dann wäre die Frage, warum Du in der Schleife nochmal Benutzereingaben erwartest. Und schlussendlich bildest Du auch nirgends eine Summe, sondern lässt Dir einfach das Ergebnis von ln(2) +/- 1/x ausgeben, wobei x die Benutzereingabe einer jeden Iteration kennzeichnet.

Nachtrag: spiel es mal für ein kleines n (3 oder 4) auf Papier durch.
Danke, das war bei mir ein Denkfehler. Konnte es inzwischen lösen.
 

Zurück
Oben