Erste Schritte Java Programm macht nicht was es soll

ccputer

Mitglied
Ich wollte ein Programm schreiben das den Wert einer Reihe (Funktion) ausgibt:
w4k398bv_png.htm
(Directupload.net - w4k398bv.png)

für s= 1. man gibt die Variable n ein und bekommt den Wert der Reihe an der Stelle n zurück.

In Blue J habe ich das hier eingegeben:
Java:
import java.util.Scanner;
public class main
{
// instance variables - replace the example below with your own
 
/**
* Constructor for objects of class main
*/
public static void main(String args[])
{
 
// initialise instance variables
float e = 1.0f; // e ist die Ergebnis-Variable
float y = 1.0f;
float v = 0.0f; // nächster Wert der Reihe wird zum alten Wert hinzu addiert
int n; // Stelle n
Scanner in = new Scanner(System.in);
System.out.println("Enter an integer for n");
n = in.nextInt();   // (s = 1) 
 
for ( int i = 0; i <= n ; i++)
{ e = e + v ;
y++;
v = 1.0f / y ;
}
System.out.println("Die Funktion für s=1 und n = " + n + " ergibt " + e); } 
}


Ich zerbreche mir den Kopf warum das Programm falsche Werte ausgibt:
Übersetzung in Pseudo-Prozesscode:
1. Initialisiere die Variablen e,y,v,n
2. Lese Eingabe für n aus und belege mit eingegebenen Wert
3. solange i <= n führe dieser Reihe nach aus: a) überschreibe e mit dem Wert [e (lese aktuellen Wert e aus) +(addiere) v(aktuell)]
b) erhöhe y um 1
c) überschreibe die Variable v mit 1 / y (ausgelesenen aktuellen Wert)
d) Erhöhe i um 1
e) Prüfe wie am Anfang ob i <= n wenn nicht:
4. Führe aus: System.out.println("Die Funktion für s=1 und n = " + n + " ergibt " + e);

Was mache ich falsch und wie würde das Programm korrekt funktionieren ?
ich erwarte folgenden Output:
n = 1 --> e = 1
n = 2 --> e = 1.5 statt wie im Programm 1.8333334
n = 3 --> e = 1,8333333 statt wie im Programm 2.0833335
n = 4 --> e = 2,166666 statt wie im Programm 2.2833335

usw. (so sollte das Programm laufen - warum tut es so nicht ?)
 

ccputer

Mitglied
Hey ich hab am Programm alle float datentypen durch double ersetzt und jetzt funktioniert das Programm wie es soll :toll: - aber warum nur so, mit float verbraucht es weniger speicher ?
 

Hobbes

Aktives Mitglied
Das glaube ich dir nicht. Das funktioniert sowohl mit double als auch mit float.

Dein Fehler ist der Schleifenzähler i bzw. die Abbruchbedingung. Überlege dir, wie oft deine Schleife für n=1 durchlaufen wird. Wieviele Summanden hat dagegen die Summe aus der Aufgabe?
 

Neue Themen


Oben