Java Typumwandlung im Taschenrechner

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hi,

ich versuche gerade Java zu lernen und habe ein Problem bei der Umwandlung von Typen.
Anbei mein Code - er funktioniert soweit vollständig, jedoch versuche ich eine Anpassung einzubauen:

Code:
package trywithressourcesdemo;

import java.util.Scanner;

/**
 *
 * @author blackbenji
 */
public class RechnerDemo {
    
    public static void main(String[] args) {
        
        try (Scanner in = new Scanner(System.in)) {
            
            float  ergebnis = 0;
            
            System.out.println("1: Addieren");
            System.out.println("2: Subtrahieren");
            System.out.println("3: Multiplizieren");
            System.out.println("4: Dividieren");
            
            System.out.print("Modus wählen: ");
            int modus = in.nextInt();
                        
            System.out.print("Bitte gib die erste Zahl ein: ");
            float a = in.nextFloat();
            System.out.print("Bitte gib nun die zweite Zahl ein: ");
            float b = in.nextFloat();
            
            switch (modus) {
                case 1:
                    ergebnis = a + b;
                    break;
                case 2:
                    ergebnis = a - b;
                    break;
                case 3:
                    ergebnis = a * b;
                    break;
                case 4:
                    ergebnis =  a / b;
                    break;
                default:
                    ergebnis = 0;
            }
            System.out.println("Ergebnis: " + ergebnis);   
        }
    }
}

Mein Problem ist nun, dass ergebnis ein float ist. für case 3 und 4 notwendig, für 1 und 2 jedoch unwichtig.
ich möchte also im falle von case 1 und 2 den typ nach int umwandeln.

leider scheitere ich daran, da ergebnis ja schon float ist.
gibt es eine möglichkeit ergebnis neu zu überschreiben?

Mein Ansatz:

Code:
                case 1:
                    ergebnis = (int) a + (int) b;
                    break;
                case 2:
                    ergebnis = (int) a - (int) b;
                    break;
hat es leider nicht gebracht.
 
ich möchte also im falle von case 1 und 2 den typ nach int umwandeln.
Möchtest du, dass das Ergebnis ein Integer wird?

Oder soll bei case 1 und 2 eine ganze Zahl rauskommen?
Es gibt einen Befehl zum Runden: Math.round()

Ich versteht, wenn ich ehrlich bin, dein Problem nicht wirklich.
 
Ergebnis ist doch Float, wieso also zusätzlich ins INT cast'en? Wenn die Zahlen zu groß werden, wirst du overflow exception haben (oder zumindest wird dann deine Zahl sehr klein sein)!
 
Das bringt doch alles nichts.

In der Deklaration von "ergebnis" in Zeile 15 sagst du, dass "ergebnis" ein float ist. Und dann bleibt es auch ein float. Wenn dich in der Ausgabe die Nachkommastellen stören, dann kannst du z.B. mit der Klasse "NumberFormat" bestimmen wie eine Zahl zu einem String umgewandelt und formatiert werden soll.

Wenn es dir darum geht, die "Ungenauigkeit" einer Fließkommazahl (float und double) zu eliminieren (um mit dem "ergebnis" später noch weiter ordentlich rechnen zu können), kannst du dir die Klasse "BigDecimal" anschauen. Im Grunde ist es aber für die Weiterverwendung von Rationalen Zahlen wichtig, dass man die Rechenschritte in der richtigen Reihenfolge ausführt, um am Ende eine minimale Abweichung zu erhalten, aber damit taucht man dann schon relativ tief in die Mathematik (bzw. Informatik) ein ;)

Also warum genau willst du einen Integer bei der Addition und Subtraktion?
 
danke für die antworten.

vorweg: mir geht es weniger um den taschenrechner sondern um das umwandeln von typen.
wenn ich eine 4 (als a) und eine 5 (als b) eingebe wird daraus 4.0 + 5.0 = 9.0.
ich habe mir erhofft durch eine typenumwandlung daraus ein 4 + 5 = 9 zu machen.

von Math.* habe ich schon gelesen, bin in meiner Video2Brain Reihe leider aber noch bei Typen/Typenumwandlung. Daher muss ich noch ein wenig warten um das anzuwenden.

Wie gesagt, ob es sinn macht oder nicht, ist an der Stelle nicht relevant, mir ging es nur ums üben & verstehen.
 
Grundlegend machst du beim = auch wieder eine Format conversion to float. Woran das Problem dabei liegt ist mir allerdings unklar. Wennst das Ausgabeformat ändern willst kannst dir ja mal String.format() anschauen.
 
Zurück
Oben