# Taschenrechner



## thor_norsk (22. Aug 2021)

Guten Tag,
Aufgabe: Programmieren Sie einen einfachen Taschenrechner. Es soll zwei werte von der Tastatur einlesen und das Ergebnis einer Rechenoperation auf dem Bildschirm ausgeben. Als Rechenoperationen sollen Addition, Subtraktion, Division und Multiplikation möglich sein. Fragen Sie die gewünschte Rechenoperation ebenfalls über eine Tastatureingabe und führen Sie die Berechnungen in eigenen Methoden durch.

Ich habe meinen Code getestet und führt Alle Rechenarten durch. Es wäre sehr nett, wenn ich von euch einen Feedback bekäme, ob ich richtig programmiert habe.
Bitte denkt daran , ich habe bis jetzt nur Schleifen, Verzweigungen, switch-case,usw kennengelernt. Also bitte keine komplizierte Vorschläge 

package taschenrechner;

import javax.swing.*;

public class Taschenrechner {

    // Methode zur Berechnung der Addition.
    static double addition (double zahl1, double zahl2) {
        return (zahl1 + zahl2);
    }

    // Methode zur Berechnung der Subtraktion
    static double subtraktion (double zahl1, double zahl2) {
        return (zahl1 - zahl2);
    }

    // Methode zur Berechnung der Multiplikation
    static double multiplikation (double zahl1, double zahl2) {
            return (zahl1 * zahl2);
        }

    // Methode zur Berechnung der Division
    static double division (double zahl1, double zahl2) {
            return (zahl1 / zahl2);
        }    


    public static void main(String[] args) {

        double eingabeZahl1, eingabeZahl2;
        int zahlwahl;

        System.out.println("Bitte wählen Sie eine Rechenart aus:");
        System.out.println("1 Addition");
        System.out.println("2 Subtraktion");
        System.out.println("3 Multiplikation");
        System.out.println("4 Division");

        zahlwahl = Integer.parseInt(JOptionPane.showInputDialog("Bitte treffen Sie eine Auswahl zwischen 1-4"));
        eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
        eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));

        switch(zahlwahl) {
            case 1:
                System.out.println("Sie haben als Rechenart die Addition gewählt!");
                System.out.println("Die Addition Ihre Eingabe lautet:"+addition(eingabeZahl1,eingabeZahl2));
                break;

            case 2:
                System.out.println("Sie haben als Rechenart die Subtraktion gewählt!");
                System.out.println("Die Subtraktion der Zahlen: Zahl1 - Zahl2 ="+subtraktion(eingabeZahl1, eingabeZahl2));
                break;

            case 3:
                System.out.println("Sie haben als Rechenart die Multiplikation gewählt!");
                System.out.println("Die Multiplikation der Zahlen: Zahl1 * Zahl2 ="+multiplikation(eingabeZahl1, eingabeZahl2));
                break;

            case 4:
                System.out.println("Sie haben als Rechenart die Division gewählt!");
                System.out.println("Die Division der Zahlen: Zahl1 / Zahl2 ="+division(eingabeZahl1, eingabeZahl2));
                break;


            default:
                System.out.println("Sie haben keine gültige Auswahl getroffen!");
        }
            System.exit(0);
    }
}

Im Anschluss sollen wir die Aufgabe mit Potenzrechnung erweitern. Allerdings muss ich zugeben, dass die Methode zur Potenzrechnung aus dem Internet übernommen habe.

Erweiterung: Erweitern Sie den Taschenrechner aus der vorherigen Aufgabe so, dass der Potenzen berechnen kann. Der erste eingelesene Wert soll dabei die Basis bilden und der zweite eingelesene Wert den Exponenten. wenn Sie die Zahlen 2 und 3 eingelesen haben, soll der Taschenrechner also 2³ rechnen,
Erstellen Sie für das Berechnen der Potenz eigene Methode. Die Potenz soll durch eine Schleife errechnet werden.

( Es wäre sehr nett, wenn jemand mir erklären könnte, was die Methode

package Taschenrechner;

import javax.swing.*;

public class Taschenrechner {

    // Methode zur Berechnung der Addition.
    static double addition (double zahl1, double zahl2) {
        return (zahl1 + zahl2);
    }

    // Methode zur Berechnung der Subtraktion
    static double subtraktion (double zahl1, double zahl2) {
        return (zahl1 - zahl2);
    }

    // Methode zur Berechnung der Multiplikation
    static double multiplikation (double zahl1, double zahl2) {
            return (zahl1 * zahl2);
        }

    // Methode zur Berechnung der Division
    static double division (double zahl1, double zahl2) {
            return (zahl1 / zahl2);
        }    

    // Methode zur Berechnung der Potenzrechnung

    static double potenz (double basis, double exponent) {
            double zahl = 1;
            if(basis == 0){   // verstehe den Sinn nicht!
                zahl = 0;
                } else {
                zahl = 1;
                }

                for(int i = 1; i <= exponent; i++){
                zahl *= basis;
                }
                return zahl;
        }

    public static void main(String[] args) {

        double eingabeZahl1, eingabeZahl2;
        int zahlwahl;

        System.out.println("Bitte wählen Sie eine Rechenart aus:");
        System.out.println("1 Addition");
        System.out.println("2 Subtraktion");
        System.out.println("3 Multiplikation");
        System.out.println("4 Division");
        System.out.println("5 Potenzrechnung");

        zahlwahl = Integer.parseInt(JOptionPane.showInputDialog("Bitte treffen Sie eine Auswahl zwischen 1-5"));
        eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
        eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));

        switch(zahlwahl) {
            case 1:
                System.out.println("Sie haben als Rechenart die Addition gewählt!");
                System.out.println("Die Addition Ihre Eingabe lautet:"+addition(eingabeZahl1,eingabeZahl2));
                break;

            case 2:
                System.out.println("Sie haben als Rechenart die Subtraktion gewählt!");
                System.out.println("Die Subtraktion der Zahlen: Zahl1 - Zahl2 ="+subtraktion(eingabeZahl1, eingabeZahl2));
                break;

            case 3:
                System.out.println("Sie haben als Rechenart die Multiplikation gewählt!");
                System.out.println("Die Multiplikation der Zahlen: Zahl1 * Zahl2 ="+multiplikation(eingabeZahl1, eingabeZahl2));
                break;

            case 4:
                System.out.println("Sie haben als Rechenart die Division gewählt!");
                System.out.println("Die Division der Zahlen: Zahl1 / Zahl2 ="+division(eingabeZahl1, eingabeZahl2));
                break;

            case 5:
                System.out.println("Sie haben als Rechenart die Potenzrechnung gewählt!");
                System.out.println("Potenz der Zahlen: Basis ^ Exponent ="+potenz(eingabeZahl1, eingabeZahl2));
                break;    

            default:
                System.out.println("Sie haben keine gültige Auswahl getroffen!");
        }
            System.exit(0);
    }
}


----------



## temi (22. Aug 2021)

Würdest du den Code bitte in Code-Tags einfügen (das Symbol </> im Editor)? Dann kann man das besser lesen.

Ein paar Anmerkungen dazu:

Der Klassenname ist normalerweise ein Substantiv und für Methodennamen (die tun was) nimmt man Verben:

```
static double addition (double zahl1, double zahl2) {
    return (zahl1 + zahl2);
}

// besser

static double addiere (double zahl1, double zahl2) {
    return (zahl1 + zahl2);
}
```

Variablen sollten so spät wie möglich deklariert werden, also erst, wenn man sie braucht:

```
double eingabeZahl1, eingabeZahl2;
int zahlwahl;

System.out.println("Bitte wählen Sie eine Rechenart aus:");
System.out.println("1 Addition");
System.out.println("2 Subtraktion");
System.out.println("3 Multiplikation");
System.out.println("4 Division");

zahlwahl = Integer.parseInt(JOptionPane.showInputDialog("Bitte treffen Sie eine Auswahl zwischen 1-4"));
eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));

// besser

System.out.println("Bitte wählen Sie eine Rechenart aus:");
System.out.println("1 Addition");
System.out.println("2 Subtraktion");
System.out.println("3 Multiplikation");
System.out.println("4 Division");

int zahlwahl = Integer.parseInt(JOptionPane.showInputDialog("Bitte treffen Sie eine Auswahl zwischen 1-4"));
double eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
double eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));
```

Der Name der Variablen könnte etwas besser gewählt werden, anstatt von "zahlwahl" trifft z. B. "operation" oder "rechenoperation" die Bedeutung viel deutlicher. Die gute Wahl von Bezeichnern (Klasse, Methoden, Variablen) ist nicht so trivial, wie man meinen möchte.


----------



## thor_norsk (22. Aug 2021)

```
package taschenrechner;

import javax.swing.*;

public class Taschenrechner {

// Methode zur Berechnung der Addition.
static double addition (double zahl1, double zahl2) {
return (zahl1 + zahl2);
}

// Methode zur Berechnung der Subtraktion
static double subtraktion (double zahl1, double zahl2) {
return (zahl1 - zahl2);
}

// Methode zur Berechnung der Multiplikation
static double multiplikation (double zahl1, double zahl2) {
return (zahl1 * zahl2);
}

// Methode zur Berechnung der Division
static double division (double zahl1, double zahl2) {
return (zahl1 / zahl2);
}


public static void main(String[] args) {

double eingabeZahl1, eingabeZahl2;
int zahlwahl;

System.out.println("Bitte wählen Sie eine Rechenart aus:");
System.out.println("1 Addition");
System.out.println("2 Subtraktion");
System.out.println("3 Multiplikation");
System.out.println("4 Division");

zahlwahl = Integer.parseInt(JOptionPane.showInputDialog("Bitte treffen Sie eine Auswahl zwischen 1-4"));
eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));

switch(zahlwahl) {
case 1:
System.out.println("Sie haben als Rechenart die Addition gewählt!");
System.out.println("Die Addition Ihre Eingabe lautet:"+addition(eingabeZahl1,eingabeZahl2));
break;

case 2:
System.out.println("Sie haben als Rechenart die Subtraktion gewählt!");
System.out.println("Die Subtraktion der Zahlen: Zahl1 - Zahl2 ="+subtraktion(eingabeZahl1, eingabeZahl2));
break;

case 3:
System.out.println("Sie haben als Rechenart die Multiplikation gewählt!");
System.out.println("Die Multiplikation der Zahlen: Zahl1 * Zahl2 ="+multiplikation(eingabeZahl1, eingabeZahl2));
break;

case 4:
System.out.println("Sie haben als Rechenart die Division gewählt!");
System.out.println("Die Division der Zahlen: Zahl1 / Zahl2 ="+division(eingabeZahl1, eingabeZahl2));
break;


default:
System.out.println("Sie haben keine gültige Auswahl getroffen!");
}
System.exit(0);
}
}
```


----------



## thor_norsk (22. Aug 2021)

```
package Taschenrechner;

import javax.swing.*;

public class Taschenrechner {

// Methode zur Berechnung der Addition.
static double addition (double zahl1, double zahl2) {
return (zahl1 + zahl2);
}

// Methode zur Berechnung der Subtraktion
static double subtraktion (double zahl1, double zahl2) {
return (zahl1 - zahl2);
}

// Methode zur Berechnung der Multiplikation
static double multiplikation (double zahl1, double zahl2) {
return (zahl1 * zahl2);
}

// Methode zur Berechnung der Division
static double division (double zahl1, double zahl2) {
return (zahl1 / zahl2);
}

// Methode zur Berechnung der Potenzrechnung

static double potenz (double basis, double exponent) {
double zahl = 1;
if(basis == 0){ // verstehe den Sinn nicht!
zahl = 0;
} else {
zahl = 1;
}

for(int i = 1; i <= exponent; i++){
zahl *= basis;
}
return zahl;
}

public static void main(String[] args) {

double eingabeZahl1, eingabeZahl2;
int zahlwahl;

System.out.println("Bitte wählen Sie eine Rechenart aus:");
System.out.println("1 Addition");
System.out.println("2 Subtraktion");
System.out.println("3 Multiplikation");
System.out.println("4 Division");
System.out.println("5 Potenzrechnung");

zahlwahl = Integer.parseInt(JOptionPane.showInputDialog("Bitte treffen Sie eine Auswahl zwischen 1-5"));
eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));

switch(zahlwahl) {
case 1:
System.out.println("Sie haben als Rechenart die Addition gewählt!");
System.out.println("Die Addition Ihre Eingabe lautet:"+addition(eingabeZahl1,eingabeZahl2));
break;

case 2:
System.out.println("Sie haben als Rechenart die Subtraktion gewählt!");
System.out.println("Die Subtraktion der Zahlen: Zahl1 - Zahl2 ="+subtraktion(eingabeZahl1, eingabeZahl2));
break;

case 3:
System.out.println("Sie haben als Rechenart die Multiplikation gewählt!");
System.out.println("Die Multiplikation der Zahlen: Zahl1 * Zahl2 ="+multiplikation(eingabeZahl1, eingabeZahl2));
break;

case 4:
System.out.println("Sie haben als Rechenart die Division gewählt!");
System.out.println("Die Division der Zahlen: Zahl1 / Zahl2 ="+division(eingabeZahl1, eingabeZahl2));
break;

case 5:
System.out.println("Sie haben als Rechenart die Potenzrechnung gewählt!");
System.out.println("Potenz der Zahlen: Basis ^ Exponent ="+potenz(eingabeZahl1, eingabeZahl2));
break;

default:
System.out.println("Sie haben keine gültige Auswahl getroffen!");
}
System.exit(0);
}
}
```


----------



## temi (22. Aug 2021)

Falls es sich nicht um Copy & Paste Fehler handelt, dann rücke deinen Code ordentlich ein. Das macht das (Programmierer-) Leben deutlich leichter.


----------



## thor_norsk (22. Aug 2021)

Danke für deinen Tipps! Klassenname ist groß geschrieben, also Substantiv, Verben, auch Prädikat genannt ist klein geschrieben. 
Einrückungen habe ich auch unter Eclipse. 
Allerdings wäre super, wenn du mir Potenzmethode erklären könntest.

[CODE lang="java" title="potenz"]// Methode zur Berechnung der Potenzrechnung

    static double potenz (double basis, double exponent) {
            double zahl = 1;
            if(basis == 0){
                zahl = 0;
                } else {
                zahl = 1;
                }

                for(int i = 1; i <= exponent; i++){
                zahl *= basis;
                }
                return zahl;
        }[/CODE]


----------



## mihe7 (22. Aug 2021)

Die Methode ist unsinnig. 
1. Für den Fall, dass Basis und Exponent 0 sind, gibt es keine allgemeinverbindliche Definition der Potenz. Gebräuchlich ist ggf. noch, dass 0^0 = 1 ist.
2. Für den Fall, dass die Basis 0, der Exponent aber größer 0 ist, ist es schwachsinnig, die Zahl mehrfach mit 1 zu multiplizieren. Dann einfach gleich 0 zurückgeben.
3. Mit einem rationalen Exponenten wirst Du auf diese Weise nicht die Potenz berechnen.


----------



## temi (22. Aug 2021)

thor_norsk hat gesagt.:


> Allerdings wäre super, wenn du mir Potenzmethode erklären könntest.


Ich würde dir vorschlagen, die Methode wegzuschmeißen und selbst darüber nachzudenken, wie die Methode implementiert werden könnte. Dann überlege dir ein paar Testfälle und probiere die Methode aus.

```
public class Main {

    public static int potenziere(int basis, int exponent) {

    }

    public static void main(String[] args) {
        System.out.println(potenziere(1, 0));
        System.out.println(potenziere(1, 1));
        System.out.println(potenziere(2, 1));
        System.out.println(potenziere(2, 2));
    }
}
```

Sollst du wirklich mit double-Werten rechnen? Wie würde die Schleife aussehen, bei einem Exponenten von z. B. 2,3342?


----------



## thor_norsk (22. Aug 2021)

Mathematisch betrachtet, sollte mein Programm aus meiner Sicht auch mit gebrochenen Zahlen rechnen können oder ?


----------



## thor_norsk (22. Aug 2021)

Laut Aufgabestellung sollte mit einer Schleife die Potenzrechnung programmiert werden, deshalb habe ich die for - Schleife gewählt.


----------



## temi (22. Aug 2021)

thor_norsk hat gesagt.:


> Mathematisch betrachtet, sollte mein Programm aus meiner Sicht auch mit gebrochenen Zahlen rechnen können oder ?


Keine Ahnung, du hast doch die Aufgabe bekommen.


thor_norsk hat gesagt.:


> Laut Aufgabestellung sollte mit einer Schleife die Potenzrechnung programmiert werden, deshalb habe ich die for - Schleife gewählt.


Dann beschränke dich auf ganzzahlige Exponenten. Alles andere geht nicht mit einer Schleife.

Überleg erst mal auf einem Stück Papier, wie das geht, wenn du z. B. 2 hoch 3 rechnen möchtest.


----------



## kneitzel (22. Aug 2021)

thor_norsk hat gesagt.:


> Mathematisch betrachtet, sollte mein Programm aus meiner Sicht auch mit gebrochenen Zahlen rechnen können oder ?


Dann betrachte doch einmal den Fall, dass der Exponent 2.5 ist, also berechne mit Deiner Routine 2 hoch 2.5. Was wird da berechnet?


----------



## thor_norsk (22. Aug 2021)

Super! Klappt nicht . Das Ergebnis ist 4! Ich denke wenn ich später viel mehr über Java gelernt habe dann gibt es bestimmt eigene Java-Methoden die man laden kann. Aber jetzt muss ich die Aufgabe mit Schleifen bzw. einer Schleife lösen.
Also : Basis als Double und Exponent als Integer funktioniert, habe ich gerade getestet.


----------



## Mart (22. Aug 2021)

thor_norsk hat gesagt.:


> Super! Klappt nicht . Das Ergebnis ist 4! Ich denke wenn ich später viel mehr über Java gelernt habe dann gibt es bestimmt eigene Java-Methoden die man laden kann. Aber jetzt muss ich die Aufgabe mit Schleifen bzw. einer Schleife lösen.
> Also : Basis als Double und Exponent als Integer funktioniert, habe ich gerade getestet.


2.5 als exponent ist das ergebnis aus hoch zahl + wurzel nehmen ...

zb.: 2 hoch 3 wurzel 2  = 2 hoch 1.5
deswegen brauchst du als exponent auch keine kommazahlen


----------



## thor_norsk (22. Aug 2021)

Hallo bin wieder da  
[CODE lang="java" title="Potenzrechnung"]// Methode zur Berechnung der Potenz
    static double potenz (double basis, double exponent) {

        double potenz = 1;
        for (double i=1; i<=exponent; ++i) {
            potenz = potenz * basis;
        }
        return potenz;
    }[/CODE]


----------



## thor_norsk (22. Aug 2021)

Ich habe Alles bei Double gelassen, sonst meckert die eingabezahl!
eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));

Ich denke später werden wir noch math.pow() kennen lernen und weitere Methoden die ich aktuell nicht kenne.


----------



## Jw456 (22. Aug 2021)

thor_norsk hat gesagt.:


> Ich habe Alles bei Double gelassen, sonst meckert die eingabezahl!
> eingabeZahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
> eingabeZahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));
> 
> Ich denke später werden wir noch math.pow() kennen lernen und weitere Methoden die ich aktuell nicht kenne.


dann gib halt in der Methode bei einer gebrochenen Zahl einen Fehler aus .


----------



## thor_norsk (22. Aug 2021)

Ich habe versucht auf int um zu programmieren, der Compiler meckert die ganze Zeit. Ist natürlich auch berechtigt vom Compiler zu meckern.


----------



## Jw456 (22. Aug 2021)

thor_norsk hat gesagt.:


> Ich habe versucht auf int um zu programmieren, der Compiler meckert die ganze Zeit. Ist natürlich auch berechtigt vom Compiler zu meckern.


Klar das der Compiler meckert.

Ich habe ja nur gesagt das du dem User mitteilen solltest das wenn er beim Exponenten eine KommaZahl eingibt das Ergebnis nicht stimmen wird. Das könntest du in der potenz Methode ausgeben.


----------



## Jw456 (22. Aug 2021)

```
static double potenz (double basis, double exponent) {

        int ex = (int) exponent;
        if( exponent-ex == 0 ){
            double potenz = 1;
            for (double i=1; i<=exponent; ++i) {
                potenz = potenz * basis;
            }
            return potenz;
        }
        
    //  hier fehler ausgeben nur ganze zahlen beim exponent erlaubt     
    return 0;
 
 }
```


----------



## thor_norsk (26. Aug 2021)

Danke


----------

