Erste Schritte Wie kann ich einen String in eine If einbauen :)?

JavaAddict

Mitglied
Hi ich beschäftige mich schon seit 1 Woche mit Java und arbeite gerade die Insel durch. Da gab es ja so eine Aufgabe zum Thema Zinsrechnung und ich hab einfach mal einen Zinsrechner gebaut.

Java:
package myinterestrates;

import java.util.*;

public class MyInterestRates {
    public static void main(String[] args){
      
double capital2;                                                //capital+totalInterest
double i;                                                       //monthly precentual interest increase
double helpCapital;                                             //Just a helping variable in my for-loop
  

System.out.println("Kapital in Euro?");
double capital= new Scanner( System.in ).nextDouble();

System.out.println("Jährlicher Zinssatz in Prozent?");
double interestRate= new Scanner( System.in ).nextDouble();

System.out.println("Anlagedauer in Monaten?");
int m= new Scanner( System.in ).nextInt();

System.out.println("Werden die Zinsen monatlich oder jährlich ausbezahlt");
String monthlyOrYearly=new Scanner(System.in ).nextLine();


if (monthlyOrYearly="monatlich") {                                 //Java doesn't accept strings in if clause apparantly
    double actualInterestRate = ( interestRate / 100 ) + 1;
    capital * actualInterestRate = capital * ( 1 + i )^m;                  //solve after i. but how?
   
    helpCapital=capital;
  
            for (int z=0; z<m; z++) {                              //using for loop to get the zinseszins
                helpCapital * ( i + 1 );
            }
           
  
} else if (monthlyOrYearly="jährlich") {
                                                                     //just calculate that yearly zins thing
  
} else       {                                                       //here I wanna give an error message if the word entered in my Scanner is not
                                                                     //"monthly" or "yearly"

}
}
}

Der Code ist noch nicht ganz fertig!
Aber trotzdem kriege ich schon einige Fehlermeldungen :O.

1. Frage: Wie kann ich den String den ich vom Scanner bekomme "monatlich" oder "jährlich" in eine If einbauen?
2.Frage: Meine Formel "capital * actualInterestRate = capital * ( 1 + i )^m; " dürfte soweit stimmen, aber ich weiß schon, dass es das "^" nicht gibt in Java, naja hab es mal trotzdem verwendet damit jeder weiß was ich meine.

Wie löse ich das jetzt nach i auf? Ich muss ja im Prinzip die m-te Wurzel ziehen, aber wie geht das nochmal 😱. Hilfeeee
 
So Leute ich hab meinen code mal geupdated (ist leider nicht alles auf meinem Mist gewachsen, aber ich hab es wenigstens verstanden):

Java:
package myinterestrates;

import java.util.*;

public class MyInterestRates_1 {
   public static void main(String[] args) {
     double capital2; //capital+totalInterest  
     

     System.out.println("Kapital in Euro?");
     double capital = new Scanner(System.in).nextDouble();

     System.out.println("Jährlicher Zinssatz in Prozent?");
     double interestRate = new Scanner(System.in).nextDouble();

     System.out.println("Anlagedauer in Monaten?");
     int months = new Scanner(System.in).nextInt();

     System.out.println("Werden die Zinsen monatlich oder jährlich ausbezahlt");
     String monthlyOrYearly = new Scanner(System.in).nextLine();


     double newInterestRate = interestRate / 100 + 1;
     double interestRate2 = interestRate;
     double newInterestRateYearly = interestRate2 / (100 * 12) + 1;

     double monatPotenz = Math.pow(newInterestRate, 1.0 / 12);

     //System.out.println(potenz);
     double newCapital = capital;
     double newCapital2 = capital;

     if(monthlyOrYearly.equalsIgnoreCase("monatlich")) {
       for (int z = 0; z < months; z++) {
         newCapital = newCapital * monatPotenz;
       }
       System.out.println("Sie haben " + capital + " Euro. Nach der Anlagedauer von " + months + " Monaten haben Sie " + newCapital + ".");
     } else if (monthlyOrYearly.equalsIgnoreCase("jährlich")) {
       for (int z = 0; z < months; z++) {
         newCapital2 = newCapital2 * newInterestRateYearly;
       }
       System.out.println("Sie haben " + capital + " Euro. Nach der Anlagedauer von " + months + " Monaten haben Sie " + newCapital2 + ".");
     } else {
       System.out.println("Geben sie bitte monatlich oder jährlich als Auszahlungsperiode an.");
     }
   }
}

Bin schon relativ zufrieden mit dem Code, vielleicht hätte ich meine Variablen eindeutiger definieren können, aber das ist gar nicht das Hauptproblem.

Das Hauptproblem ist, dass ich bei meiner else if clause einen ziemlichen Rundungsfehler bekomme und ich irgendwie nicht weiß wie ich den rauskriege, weil grundsätzlich ja meine Rechnung stimmt.

Kann mir da mal einer helfen?
lg
 
Zuletzt bearbeitet:
Generell sollte man bei Währungen nicht mit double rechnen. Da bekommst du immer Fehler. Währung rechnet man immer in cent oder wenn man noch runden muss in 1/10cent. Damit hast du eine int und keine Rundungsfehler.
 
Ah okay, ja ich krieg auch kleine Rundungsfehler, weil mit double gerechnet wird, aber das ist nicht weiter schlimm, weil ein Einsatz dieser "Software" niemals in Betracht kommen würde. 🙂
Ist eigentlich nur eine kleine Übungsaufgabe gewesen.
für diejenigen die es interessiert, hier ist der working code für den "Zinsrechner mit Rundungsfehlern":
Java:
package myinterestrates;                                      //Paketname

import java.util.*;                                           //Importanweisungen

public class MyInterestRates_1                                //Name der Klasse
{
    public static void main(String[] args){
      
                                                                                                      


System.out.println("Kapital in Euro?");                                             //Die Konsole gibt "Kapital in Euro?" aus
double capital= new Scanner( System.in ).nextDouble();                              //Der Benutzer wird darum gebeten einen Wert vom Datentyp double einzugeben

System.out.println("Jährlicher Zinssatz in Prozent?");                              //Die Konsole gibt "Jährlicher Zinssatz in Prozent?" aus
double interestRate= new Scanner( System.in ).nextDouble();                         //Der Benutzer wird darum gebeten einen Wert vom Datentyp double einzugeben

System.out.println("Anlagedauer in Monaten?");                                      //Die Konsole gibt "Anlagedauer in Monaten?" aus
int months= new Scanner( System.in ).nextInt();                                     //Der Benutzer wird darum gebeten einen Wert vom Datentyp int einzugeben

System.out.println("Werden die Zinsen monatlich oder jährlich ausbezahlt?");         //Die Konsole gibt "Werden die Zinsen monatlich oder jährlich ausbezahlt" aus
String monthlyOrYearly=new Scanner(System.in ).nextLine();                          //Der Benutzer wird darum gebeten einen Wert vom Typ String einzugeben

double helpCapital=capital;                                                         //Hilfsvariable bekommt den momentanen Wert von der Variable capital zugewiesen
double helpCapital2=capital;                                                        //Hilfsvariable2 bekommt den momentanen Wer von der Variable capital zugewiesen

double shapedInterestRate= interestRate/100+1;                                      //Die Variable interestRate wird umgeformt, damit wir besser mit ihr rechnen können
double monthlyExpCapitalGrowth=Math.pow(shapedInterestRate, 1.0/12);                //Rechnung um den unterjährigen Zinssatz zu berechnen


double i=interestRate;                                                              //Der Hilfsvariable i wird der momentane Wert von interestRate zugewiesen
double linearInterestRatePerMonth= i/(100*12);                                      //Rechnung um auf den prozentualen linearen Zinssatz zu kommen

                                                                                    //die monatlichen Zinsen werden berechnet
                                                                                    //System.out.println(monthlyLinCapitalGrowth);
                                  
if(monthlyOrYearly.equalsIgnoreCase("monatlich")) {                                  //if-Abfrage wird gestartet

for (int z=0; z<months; z++) {                                                       //for-Schleife wird gestartet
  
    helpCapital = helpCapital * monthlyExpCapitalGrowth;                             //Formel zur Berechnung des (Zinses)Zins
  
}                                                                                    //Ende der for-Schleife
System.out.println("Sie haben " + capital + " Euro. Nach der Anlagedauer von "+ months + " Monaten haben Sie "
+ helpCapital + " Euro.");
} else if (monthlyOrYearly.equalsIgnoreCase("jährlich")) {                           //Die else-if Anweisung wird gestartet wenn der Benutzer "jährlich" eingibt
  
for (int z=0; z<months; z++) {
  
    helpCapital2 = helpCapital2 + ( capital * linearInterestRatePerMonth );
   
}
System.out.println("Sie haben " + capital + " Euro. Nach der Anlagedauer von "+ months + " Monaten haben Sie " + helpCapital2+ " Euro.");
  
} else {                                                                             //Die else Anweisung wird gestartet wenn ein unzulässiger Text eingegeben wird
    System.out.println("Geben sie bitte monatlich oder jährlich als Auszahlungsperiode an.");
}

    }
}
 
Zuletzt bearbeitet:
Hallo,

ich hab dir das mal berichtigt und validiert, bei mir rechnet er nicht falsch:
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication5;

import java.util.*;

/**
* @author DW on 2016/09/07
*/
public class JavaApplication5 {

    /**
     * Calcs some things ....
     *
     * @param args images a, b, and c.
     * @throws java.io.IOException
     */
    public static void main(String[] args) {
        System.out.println("Kapital in Euro?");                                             //Die Konsole gibt "Kapital in Euro?" aus
        double capital = new Scanner(System.in).nextDouble();                              //Der Benutzer wird darum gebeten einen Wert vom Datentyp double einzugeben

        System.out.println("Jährlicher Zinssatz in Prozent?");                              //Die Konsole gibt "Jährlicher Zinssatz in Prozent?" aus
        double interestRate = new Scanner(System.in).nextDouble();                         //Der Benutzer wird darum gebeten einen Wert vom Datentyp double einzugeben

        System.out.println("Anlagedauer in Monaten?");                                      //Die Konsole gibt "Anlagedauer in Monaten?" aus
        int months = new Scanner(System.in).nextInt();                                     //Der Benutzer wird darum gebeten einen Wert vom Datentyp int einzugeben

        System.out.println("Werden die Zinsen monatlich oder jaehrlich ausbezahlt?");         //Die Konsole gibt "Werden die Zinsen monatlich oder jährlich ausbezahlt" aus
        String monthlyOrYearly = new Scanner(System.in).nextLine();                          //Der Benutzer wird darum gebeten einen Wert vom Typ String einzugeben

        double newCapital = capital;

        //die monatlichen Zinsen werden berechnet
        //System.out.println(monthlyLinCapitalGrowth);
        if (monthlyOrYearly.equalsIgnoreCase("monatlich")) {                                  //if-Abfrage wird gestartet

            for (int i = 0; i < months; i++) {
                newCapital += newCapital * interestRate / (100 * 12);
            }
            //Ende der for-Schleife
            System.out.println("Sie haben " + capital + " Euro. Nach der Anlagedauer von " + months + " Monaten haben Sie "
                    + newCapital + " Euro.");
        } else if (monthlyOrYearly.equalsIgnoreCase("jaehrlich")) {                           //Die else-if Anweisung wird gestartet wenn der Benutzer "jährlich" eingibt

            for (int i = 0; i < months / 12; i++) {
                newCapital += newCapital * interestRate / 100;
            }
            newCapital += newCapital * interestRate / (100 * 12) * (months % 12);
            System.out.println("Sie haben " + capital + " Euro. Nach der Anlagedauer von " + months + " Monaten haben Sie " + newCapital + " Euro.");

        } else {                                                                             //Die else Anweisung wird gestartet wenn ein unzulässiger Text eingegeben wird
            System.out.println("Geben sie bitte monatlich oder jaehrlich als Auszahlungsperiode an.");
        }
    }
}

Code:
Kapital in Euro?
1500
Jährlicher Zinssatz in Prozent?
5
Anlagedauer in Monaten?
600
Werden die Zinsen monatlich oder jaehrlich ausbezahlt?
jaehrlich
Sie haben 1500.0 Euro. Nach der Anlagedauer von 600 Monaten haben Sie 17201.09967863051 Euro.

--

Kapital in Euro?
1500
Jährlicher Zinssatz in Prozent?
5
Anlagedauer in Monaten?
601
Werden die Zinsen monatlich oder jaehrlich ausbezahlt?
jaehrlich
Sie haben 1500.0 Euro. Nach der Anlagedauer von 601 Monaten haben Sie 17272.770927291473 Euro.

--

Kapital in Euro?
1500
Jährlicher Zinssatz in Prozent?
5
Anlagedauer in Monaten?
606
Werden die Zinsen monatlich oder jaehrlich ausbezahlt?
jaehrlich
Sie haben 1500.0 Euro. Nach der Anlagedauer von 606 Monaten haben Sie 17631.127170596275 Euro.

----

Kapital in Euro?
1500
Jährlicher Zinssatz in Prozent?
5
Anlagedauer in Monaten?
600
Werden die Zinsen monatlich oder jaehrlich ausbezahlt?
monatlich
Sie haben 1500.0 Euro. Nach der Anlagedauer von 600 Monaten haben Sie 18179.07481710924 Euro.

--

Kapital in Euro?
1500
Jährlicher Zinssatz in Prozent?
5
Anlagedauer in Monaten?
601
Werden die Zinsen monatlich oder jaehrlich ausbezahlt?
monatlich
Sie haben 1500.0 Euro. Nach der Anlagedauer von 601 Monaten haben Sie 18254.820962180525 Euro.

--

Kapital in Euro?
1500
Jährlicher Zinssatz in Prozent?
5
Anlagedauer in Monaten?
606
Werden die Zinsen monatlich oder jaehrlich ausbezahlt?
monatlich
Sie haben 1500.0 Euro. Nach der Anlagedauer von 606 Monaten haben Sie 18638.312204675647 Euro.

Ich kann dir nicht zu 100 % richtig sagen, ob die Sparkasse das bei MONATLICHER Verzinsung genau so rechnet. (jährliche Verzinsung ist Ok)

Zur eigentlichen Frage, wie vergleicht man Strings, genauso. 🙂

Wie kann ich auch runden auf Centbeträge, das kostete extra Geld. 😉

Sollte ich Scanner so verwenden? NEIN.

Sind obige Kommentare nützlich. Naja. :/

Bitte gib mir mal 'ne kurze Rückmeldung, ob dein Zinseszinsrechner deiner Bank dasselbe zurückgibt.
 
Ich weiß, dass 5 % (für die Sparkasse) utopisch ist. Aber ich wollte, dass sich der Wert wenigstens etwas ändert. 🙂 Das ist natürlich noch nicht inflationsbereinigt. 🙁

BTW ist mir aufgefallen, dass man das mit double nicht genauer berechnen kann - also etwa genau bis zur zehnten Nachkommastelle. Cents sind im Bankengeschäft aber auch völlig Wurst. Andere Geschütze wollte ich nu nicht auffahren.

Ich weiß, dass es nicht in deinen Produktivcode einfließen wird, aber könntest du bitte genausten darlegen, was du mit monatlicher Verzinsung beim jährlichen Zinssatz meinst? Bei monatlicher Verzinsung hab ich ein paar Euro mehr, ich bin begeistert. 🙂 (Weil die Bank bei unganzen Jahren nicht die Mogelkarte ziehen kann)
 
Ok bei der monatlichen Verzinsung vom jährlichen Zinssatz habe ich mich vielleicht unverständlich ausgedrückt.

Im Prinzip geht es darum, ob das Wachstum linear oder exponentiell ist. Und die Formel dazu musste ich selbst bauen.

x ist der Wachstumsfaktor beim exponentiellen Wachstum


Gesucht ist x

(x)^12=c^(1/12)

c steht dabei für das Kapital was man nach einem Jahr hat.
 
Das Wachstum ist natürlich nicht linear? Wieso nicht die Formel nehmen, welche seit 5000 Jahren bekannt ist?

Java:
for (int i = 0; i < months; i++) {
    newCapital += newCapital * interestRate / (100 * 12);
}

...

for (int i = 0; i < months / 12; i++) {
    newCapital += newCapital * interestRate / 100;
}
newCapital += newCapital * interestRate / (100 * 12) * (months % 12);

oder auch

newCapital += newCapital * interestRate * (months % 12) / (100 * 12);

aber nicht genauer

Sooooooooo - ich möchte wissen, ob ersterer Fall (monatliche Verzinsung/Ausschüttung bei jährlichem Zinssatz) genau das ist, was dir oder deiner Bank vorschwebt.

Bitte versteh mich nicht falsch, nichts für ungut. 😀
 

Neue Themen


Zurück
Oben