Berechnung

Status
Nicht offen für weitere Antworten.

toxictype

Mitglied
Hello again,

kaum mit der ersten Aufgabe fertig, kommt auch schon die zweite und die dritte... :?

Wir sollen nun eine Eingabe (positive Zahl und nicht Null) folgendermaßen berechnen:

1+1/2+1/3+ .. + 1/n

Wenn also eine 3 eingegeben wird, soll 1+1/2+1/3 berechnet werden.

Ich denke, eine for Schleife wäre dafür geeignet!
Ich weiß nur nicht, wie ich es machen soll, dass sich die Zahlen addieren!

Meine Schleife sieht so aus:

Code:
...
for (n = 1; n <= eingabe; n++) {
ergebnis = (1/(1+n));
System.out.println ("Bei n = "+ n +" ergibt sich "+ ergebnis +".");
}

Ich bekomme immer nur 0.0 als Ergebnis, obwohl ich ergebnis mit double deklariert habe!

Hat jemand von euch einen Tipp für mich?

Gruß
 

mic_checker

Top Contributor
Mach ne for Schleife von 1 bis Zahl, vorher deklarierst du ne Summen -Variable (oder wie auch immer du die nennen willst), in der for schleife addierst du auf den aktuellen Wert der Variable 1/i (wobei i die Zählvariable der Schleife ist)...
 

mic_checker

Top Contributor
Ist n bei dir ein int oder double? Wenn du die Zählvariable als int hast kannst du entweder in double casten oder du machst die Zählvariable als double
 

bazz-dee

Aktives Mitglied
Code:
double ergebnis = 0;
for (int i=1; i<eingabe; i++){
   ergebnis = ergebnis + (1/i);
}
System.out.println(ergebnis);


Wenn ich deine Frage nicht falsch verstanden habe.
 

toxictype

Mitglied
@bazz-dee:
Wenn ich es so mache, bekomme ich die Summe von i und 1/i.
Für die Berechnung benötige ich allerdings nur die Summe von 1/i, also 1/1 + 1/2 + 1/3 +1/4 bei einer Eingabe von der Zahl 4. Wie kann ich die Werte addieren? Muß ich mit return arbeiten?
 

toxictype

Mitglied
O.K., return fällt flach (main-Methode)!
Aber irgendwie muß ich doch das vorherige Ergebnis speichern bzw. wiedergeben, um es mit dem neuen zu addieren!
 

Corcovado

Bekanntes Mitglied
Code:
public class Aufgabe {
    public Aufgabe(int eingabe){
        Berechnung(eingabe);
    }

    private double Berechnung(int eingabe){
        double ergebnis=0.0;
        
        for (int n=eingabe; n>0; n--) { 
            ergebnis += (1/((double) n)); 
            System.out.println ("Bei n = "+ n +" ergibt sich "+ ergebnis +"."); 
        }
        
        return ergebnis;
    }
    
    ///////////////////////////////////////////////////////////////
    public static void main(String[] args){
        Aufgabe a = new Aufgabe(5);
    }
}

Wir sollen nun eine Eingabe (positive Zahl und nicht Null) folgendermaßen berechnen:

Imo hatte die Rechnung nen Fehler (warum +1 ???),
Natuerlich bekommst Du nur 0 wenn Du das mit int Werten machst und das Ergebnis kleiner als 0 ist.
Ich hab die Schleife gegen 0 gemacht, weils besser absichert, dass keiner 0 eingegeben hat oder was negatives, was Du ja nicht willst (wie ich das verstanden hab?!)

Ich hoffe so stimmts (?)

Cheers
 

toxictype

Mitglied
Hi Corcovado,

vielen Dank für Deine Antwort!
Ich werde mich da mal durcharbeiten!
Das sieht echt professionell aus!

Mal interessehalber:
Würde das ganze auch ohne ein return funktionieren bzw. könnte man das ganze ohne return-Anweisung umsetzen?
 

mic_checker

Top Contributor
Man schreibt Methoden übrigens klein...

Kommt drauf an ob du in main nach Aufruf der Methode noch was mit dem Wert machen willst....wenn du es nur in der Methode brauchst (du willst es z.B. ausgeben), dann brauchst du kein return...
 

toxictype

Mitglied
Sozusagen brauche ich die Berechnung mit dem vorherigen Wert nur in der main-Methode!
Aber wie sollte man es ohne return umsetzen???

Was meinst Du mit, man schreibt main-Mehoden klein?
 

mic_checker

Top Contributor
Corcovado hat in seinem Source die Methode Berechnung groß geschrieben....das meinte ich.

Du könntest auch den Sichtbarkeitsbereich von ergebnis verändern, z.B. das es so aussieht:

Code:
public class Aufgabe {
     private double ergebnis=0.0;
    public Aufgabe(int eingabe){
        berechnung(eingabe);
    }

    private void berechnung(int eingabe){   
        for (int n=eingabe; n>0; n--) {
            ergebnis += (1/((double) n));
            System.out.println ("Bei n = "+ n +" ergibt sich "+ ergebnis +".");
        }
    }
   
    ///////////////////////////////////////////////////////////////
    public static void main(String[] args){
        Aufgabe a = new Aufgabe(5);
    }
}

Aber wieso willst du unbedingt ohne return arbeiten?
 

toxictype

Mitglied
Hi, ich wollte nur wissen, ob es ohne return möglich ist!
Ich bedanke mich erstmal bei euch! Der Schlüssel für mich war:
Code:
ergebnis += (1/((double) n))
bzw. bei mir:
Code:
ergebnis += (1/n)
da ich n vorher schon deklariert habe.

Was genau macht +=?
Habt ihr eine Eigendefinition für mich?

Ich bin ein absoluter Neuling und versuche mich dadurch zu wühlen.

Was ich bei euch so klasse finde, ist, dass ihr den Code so kurz haltet.
Z.B. deklariert ihr die Attribute erst, wenn es darauf ankommt!
Da bin ich noch etwas vorsichtig, werde es mir aber früher oder später angewöhnen.
Außerdem benutzt ihr mehrere Metoden in einer Klasse und wißt genau, wie ihr sie benennen und behandeln sollt.
Und ihr erzeugt neue Objekte von Methoden, wo ich mich noch gar nihct rantraue und es auch nicht so ganz verstehe.

Wenn ihr Lust und Zeit habt, könnt ihr euch einer euren, von mir kommentierten, Codes mal ansehen und mich verbessern.

Code:
// Klasse Aufgabe wird deklariert
public class Aufgabe { 

    // Attribut ergebnis wird deklariert und instanziiert mit dem Wert 0.0
    // Warum habt ihr private und nicht public gewählt?
     private double ergebnis=0.0; 

    // Wozu diese Methode?
    // Ich würde hier sofort die main-Methode anwenden. Das hier ist mir noch zu hoch!
    public Aufgabe(int eingabe){ 
        berechnung(eingabe); 
    } 

    // Methode berechnung mit der for-Schleife, Berechnung und Ausgabe
    // Ihr benutzt zweimal den Bezeichner eingabe??? Puhhh, zu hoch!    
    private void berechnung(int eingabe){    
        for (int n=eingabe; n>0; n--) { 
            ergebnis += (1/((double) n)); 
            System.out.println ("Bei n = "+ n +" ergibt sich "+ ergebnis +"."); 
        } 
    } 
    
    /////////////////////////////////////////////////////////////// 
    public static void main(String[] args){ 
        Aufgabe a = new Aufgabe(5); 
    } 
}

Naja, ihr seht, dass ich nicht allzu firm bin! :-((
 
B

Beni

Gast
Code:
// Klasse Aufgabe wird deklariert
public class Aufgabe { 

    // Attribut ergebnis wird deklariert und instanziiert mit dem Wert 0.0
    // Warum habt ihr private und nicht public gewählt?
     private double ergebnis=0.0;
Muss sonst noch jemand wissen was ergebnis für einen Wert hat? (nein).
Darf jemand anders die Erlaubnis haben, ergebnis zu verändern? (NEIN!!)
-> darum private

Code:
    // Wozu diese Methode?
    // Ich würde hier sofort die main-Methode anwenden. Das hier ist mir noch zu hoch!
    public Aufgabe(int eingabe){ 
        berechnung(eingabe); 
    }
Das ist der Konstruktor. Ohne Konstruktor kann man kein Objekt von Aufgabe anlegen, deshalb benötigt man ihn.
Würde man nur mit main arbieten, müsste "berechnung" und "ergebnis" static (frei übersetzt, "einmalig") sein. Es gibt aber sicher mehr als nur ein einziges Ergebnis, deshalb ist static hier unpassend -> ein Objekt muss daher -> ein Konstruktor muss implementiert werden. (ok, dafür dass Aufgabe nur ein "int" als Variable hat, ist das ein *bisschen* übertreiben, den könnte man auch direkt speichern).

Code:
    // Methode berechnung mit der for-Schleife, Berechnung und Ausgabe
    // Ihr benutzt zweimal den Bezeichner eingabe??? Puhhh, zu hoch!    
    private void berechnung(int eingabe){    
        for (int n=eingabe; n>0; n--) { 
            ergebnis += (1/((double) n)); 
            System.out.println ("Bei n = "+ n +" ergibt sich "+ ergebnis +"."); 
        } 
    }
Wo zweimal?
Meinst du auch noch das "eingabe" vom Konstruktor? Das hat nix, aber rein gar nix, mit dem "eingabe" zu tun, das in "berechnung" verwendet wird.
Die Gültigkeitsbereiche der beiden Variablen überlappen sich nicht:
Code:
irgendwas( int variable ){
  // Gültigkeitsbereich von "variable"
}

// ausserhalb des Gültigkeitsbereiches von "variable".
 

mic_checker

Top Contributor
toxictype hat gesagt.:
Was genau macht +=?

Das ist nur ne verkürzte Schreibweise.

Statt:

Code:
ergebnis += 2;

kannst du auch schreiben:

Code:
ergebnis = ergebnis + 2;

Ich finde die obere Schreibweise aber schöner da kürzer ;)
 

toxictype

Mitglied
Schön, dass es euch gibt!

Ich werde mir morgen mal die Konstruktor-Sache ansehen!
Und dann kann ich mich auch schon an die dritte Aufgabe machen!

Vielen Dank für eure Mühen!

Gruß
Tox
 

toxictype

Mitglied
Hallo,

wie gesagt, beschäftige ich mich nun mit den Konstruktoren bzw. noch mal mit den Methoden.
Es wird gesagt, dass folgende Variante
Code:
public int addiere (int x, int y){
   return x+y;
  }
wesentlich flexibler ist als diese
Code:
 public int addiere(){
   int x = 12;
   int y = 5;
   return x+y;
 }

Warum ist das so?
 

mic_checker

Top Contributor
weil du der oberen methode die werte mitgeben kannst, du kannst also flexibler bestimmen wovon die summe berechnet wird, in der unteren methode musst du jeweils die werte für x und y per Hand ändern um zu einem andern Ergebnis zu kommen.
 

Anselmus

Bekanntes Mitglied
die werden von da mitgegeben wo du die methode aufrufst:

zB:

Code:
...
int zahl1, zahl2, ergebnis;

zahl1 = //zahl1 einlesen;
zahl2 = //zahl2 einlesen;

ergebnis = addiere(zahl1, zahl2)
...
 

toxictype

Mitglied
Hallo stephan,

in Deinem Fall wäre es also so, dass die Methode addiere aufgerufen wird.
In dieser Methode könnte dann die Berechnung von zahl1 und zahl2 stattfinden.
Die Methode addiere müßte natürlich deklariert werden.

Etwa so:
Code:
...
public addiere (int zahl1, int zahl2) {
summe = zahl1 + zahl2;
}
...

Dann wird quasi der Wert für summe an ergebnis weitergegeben.

Ist das so korrekt?

Ferner müßte man auch noch ein Objekt der Klasse erzeugen.
Sagen wir mal, dass die Klasse Berechnung heißt:
Code:
Berechnung addiere = new Berechnung ();

Ist das auch korrekt?

Gruß
Tox[/quote]
 

mic_checker

Top Contributor
In dem Fall musst du die Variable summe aber noch deklarieren um sie nutzen zu können. Außerdem müsstest du noch einen Rückgabewert spezifiizeren (bzw. "void" für keine Rückgabe)

Der Name des Objekts vom Typ Berechnung hat nichts mit der Methode addiere zu tun. Ansonsten einfach Objekt erzeugen und damit die Methode aufrufen.
 

Anselmus

Bekanntes Mitglied
deine addiere methode müßte so aussehen:

Code:
public static int addiere(int x, int y){
		return x+y;
	}

sie muß int zurückgeben weil du sie ja mit
Code:
ergebnis = addiere(zahl1, zahl2);
aufrufts

in deinem fall würde ich die methode static machen, dann brauchst du auch kein objekt davon zu "machen"

hab natürlich mal wieder net zu endegelesen: klar kannste auch deine methode in die klasse Berechnungen packen... würd sie dann aber trotzdem static machen. und dann so aufrufen:
Code:
ergebnis = Berechnungen.addiere(zahl1, zahl2);

natürlich kannste auch die methode nicht-static machen und dann ein objekt damit machen und die methode aufrufen, aber da entgeht mir igrnedwie grade der sinn für... ich schreibs aber trotzdem mal auf =)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
Jamie logische Verknüpfung zur Schaltjahr-Berechnung Java Basics - Anfänger-Themen 30
Stephan_kl Reihenwert-Berechnung, Ergebnis mit vorherigem Ergebnis vergleichen Java Basics - Anfänger-Themen 11
Abraham42 Berechnung der Kühlung Java Java Basics - Anfänger-Themen 12
S Hashcode-Berechnung + ^ Java Basics - Anfänger-Themen 2
J Median-Berechnung von 2D-Teilarrays Java Basics - Anfänger-Themen 56
F Tabelle - Berechnung Rang Java Basics - Anfänger-Themen 2
B Berechnung der Position von Kinderelemente von einem Elternknoten Java Basics - Anfänger-Themen 23
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
S Switch-Case zur Berechnung der Einkommensteuer Java Basics - Anfänger-Themen 15
F Berechnung der Rektaszension und Deklination eines Sterns Java Basics - Anfänger-Themen 7
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
V Erste Schritte Pi Berechnung Java Basics - Anfänger-Themen 47
M Berechnung der Reststrecke bei Graphen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
B Berechnung zu einer Schleife formen Java Basics - Anfänger-Themen 6
B Berechnung Median mit Methode Java Basics - Anfänger-Themen 7
CptK Methoden Berechnung von Anfangsgeschwindigkeit und Winkel Java Basics - Anfänger-Themen 27
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Erste Schritte Berechnung des Paketportos - Problem/Frage Java Basics - Anfänger-Themen 52
J Gleitkommazahlen, Berechnung von pi Java Basics - Anfänger-Themen 4
J Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
Salo Berechnung von Winkeln Java Basics - Anfänger-Themen 28
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
Ghostman1711 Pi berechnung Methode aufrufen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
beatles Operatoren Operatoren - Berechnung Java Basics - Anfänger-Themen 40
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
N Verzögerte Berechnung "Lazy" Java Basics - Anfänger-Themen 8
J Erste Schritte Rundungsproblem - Berechnung Notendurchschnitt Java Basics - Anfänger-Themen 13
S Variablen Vektor zur Berechnung verwenden Java Basics - Anfänger-Themen 4
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
M Berechnung in Java Java Basics - Anfänger-Themen 4
S Berechnung der Arbeitstage in einem Zeitraum Java Basics - Anfänger-Themen 9
E Problem bei rekursiver Berechnung des Binomialkoeffizienten Java Basics - Anfänger-Themen 5
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
E Berechnung für Shop einbinden Java Basics - Anfänger-Themen 8
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
P Schleife zur Berechnung von einer Summe Java Basics - Anfänger-Themen 16
F Berechnung einer linearen Abschreibung Java Basics - Anfänger-Themen 5
E Berechnung von Punkten Java Basics - Anfänger-Themen 4
D Berechnung des Abstandes von zwei Punkten in einem Koordinatensystem Java Basics - Anfänger-Themen 14
A Methoden PI-Berechnung Java Basics - Anfänger-Themen 22
S Erste Schritte Berechnung mit Daten aus CSV und Date Objekt Java Basics - Anfänger-Themen 2
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
A Erste Schritte Steuer Berechnung, Alters Abhängig Java Basics - Anfänger-Themen 5
T Erste Schritte Berechnung von gerade und ungerade Zahlen Java Basics - Anfänger-Themen 10
J Erste Schritte Berechnung Ratten vermehrung Java Basics - Anfänger-Themen 4
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
T Iterative Berechnung einer Satellitenbahn Java Basics - Anfänger-Themen 20
M Java Berechnung mit mehreren Lösungen? Java Basics - Anfänger-Themen 9
D Nullstellen-Berechnung Java Basics - Anfänger-Themen 10
L Fehlermeldung bei falscher Berechnung anzeigen Java Basics - Anfänger-Themen 31
A berechnung multiplikatives inverses Java Basics - Anfänger-Themen 5
J Berechnung des aktuellen Alters auf Basis des Geburtstags Java Basics - Anfänger-Themen 45
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
G Berechnung von Winkeln mit Cosinussatz Java Basics - Anfänger-Themen 2
B Arrays verwenden für Berechnung Java Basics - Anfänger-Themen 3
R Merkwürdige Modulo Berechnung Java Basics - Anfänger-Themen 7
B Hausaufgabe Berechnung quadratischer Funktion Java Basics - Anfänger-Themen 16
U Alter Berechnung + sortierung Java Basics - Anfänger-Themen 6
P Berechnung wird nicht durchgeführt Java Basics - Anfänger-Themen 2
D Berechnung von Ostern und Ramadan! Java Basics - Anfänger-Themen 24
N Algorithmus für Berechnung einer Quersumme Java Basics - Anfänger-Themen 9
D Berechnung von Geldausgabe Java Basics - Anfänger-Themen 22
F Berechnung von Kugeln! Java Basics - Anfänger-Themen 9
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
S Hausaufgabe: Java-Programm schreiben zur Berechnung von x und y Java Basics - Anfänger-Themen 9
Y Ergebnis einer Berechnung an die Main Methode übergeben Java Basics - Anfänger-Themen 11
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
J Logarithmische Berechnung und Arrays Java Basics - Anfänger-Themen 2
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6
B Berechnung von Preisen per Java-Programm Java Basics - Anfänger-Themen 27
M Alters berechnung aus Geburtsjahr aus dem Buch Java Basics - Anfänger-Themen 5
O Fehler in der String-Distanz-Berechnung Java Basics - Anfänger-Themen 5
-horn- "Berechnung vorwärts, Optimierung rückwärts?" - Wie würdet ihr das machen? Java Basics - Anfänger-Themen 8
P iterative Berechnung Java Basics - Anfänger-Themen 9
1 Berechnung von PI mithilfe von Buffons Nadelproblem Java Basics - Anfänger-Themen 2
G Berechnung zwei Komplexen Zahlen Java Basics - Anfänger-Themen 34
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
J Programm für interaktive Berechnung von Temperaturverläufen Java Basics - Anfänger-Themen 9
K Annährende ganzzahlige Berechnung der Wurzel Java Basics - Anfänger-Themen 8
L Berechnung von Perioden Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
S Euklid Klasse mit Methoden zur Berechnung des ggT Java Basics - Anfänger-Themen 23
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
G Berechnung von N-Tageslinien von Aktienkursen Java Basics - Anfänger-Themen 13
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
W Schaltjahr Berechnung Java Basics - Anfänger-Themen 24
A Probleme mit Programm zur Pi-Berechnung Java Basics - Anfänger-Themen 6
X Temperatur-Berechnung /Array(?) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben