Grundrechenarten; Aufforderung zur Bestätigung oder Auswahl

AP2000

Mitglied
Hallo!

Ich habe eine Frage!

Wie kann ich in meinen Code integrieren, dass ich den "Benutzer" frage welche Rechenart er durhführen möchte, also nach dem Prinzip: "Möchten Sie eine Addition, Subtraktion, Division oder Multiplikation durchführen?" Und dann die Auswahlmöglichkeiten.

Java:
import java.util.Scanner;


public class Rechnen {

    public static void main(String[] args) {
      
          
           Scanner in = new Scanner(System.in);
           System.out.println("Zahl a eingeben, mit Punkt, ohne Komma: ");
           double a = in.nextDouble();
          
          
           System.out.println("Zahl b eingeben, mit Punkt, ohne Komma: ");
           double b = in.nextDouble();
          
           double summe = a + b;
           double differenz = a - b;
           double produkt = a * b;
           double quotient = a / b;
          
           System.out.println("Summe: " + summe);
           System.out.println("Differenz: " + differenz);
           System.out.println("Produkt: " + produkt);
           System.out.println("Wert des Quotienten: " + quotient);
         }
  
}

Das ist mein bisheriger Code.

Danke


PS: möglichst anfängerfreundlich :) ich bin komplette Anfängerin ;)
 

T_T

Bekanntes Mitglied
Nun ja, du hast ja quasi schon fast alles was du brauchst.

Du fragst den User mit dem Scanner, welche Anweisung er haben möchte.

1 = Addition
2 = Subtraktion
3 = Multiplikation
4 = Division

als nächstes Wertest du das mit (Wie @nomuri bereits gesagt hatte) switch case aus und gibst das via System.out.println() aus.

Java:
switch (auswahl) {
        case 1:
            System.out.println(summe);       
            break;
        case 2:
            System.out.println(differenz);
            break;
        // usw
        default:
           // was passiert, wenn eine andere Auswahl getroffen wurde?! 
            break;
        }
 

JStein52

Top Contributor
Du gibts aus:

" Was möchten Sie tun:
- Addition (1)
- Subtraktion (2)
- Multiplkation (3)
- Division (4)
"

Und dann liest du die eingegebene Zahl. Wenn du dazu Einzelheiten brauchst bitte melden.

Edit: ok, ein bisschen zu spät :):):)
 

AP2000

Mitglied
Schau dir mal die Switch Anweisung an. Da kannst du sogenannte "cases" erstellen. Also einzelne Fälle.
Danke


Java:
import java.util.Scanner;


public class Rechnen {

    public static void main(String[] args) {
       
           
           Scanner in = new Scanner(System.in);
           System.out.println("Zahl a eingeben, mit Punkt, ohne Komma: ");
           double a = in.nextDouble();
           
           
           System.out.println("Zahl b eingeben, mit Punkt, ohne Komma: ");
           double b = in.nextDouble();
           
           System.out.println("Welche Anweisung möchten Sie haben? 0 = Addition, 1 = Subtraktion, 2 = Multiplikation, 3 = Division: "); 
           int rechenart = in.nextInt();
           
           switch (rechenart){
           case (0):
              double summe = a + b;
              System.out.println("Summe: " + summe);
              break;
           case (1):
              double differenz = a - b;
              System.out.println("Differenz: " + differenz);
              break;
           case (2):
              double produkt = a * b;
              System.out.println("Produkt: " + produkt);
              break;
           case (3):
              double quotient = a / b;
              System.out.println("Wert des Quotienten: " + quotient); 
              break;
           }
           
         }
   
}


Habt ihr noch Optimierungsvorschläge für den Code?
 

JStein52

Top Contributor
Ich denke mal nextInt und nextDouble können Exceptions werfen wenn du an der Stelle was falsches eingibst. z.B. einen Buchstaben statt einer Zahl, hast du das mal getestet ? Du solltest diese Exceptions abfangen und geeignet reagieren.
 

nomuri

Aktives Mitglied
Naja normal würde man die Programmlogik in eine eigene Klasse packen und über die main Methode das Programm nur starten. Das wäre dann ein Anfang der Objektorientierung. Aber für den Anfang um die Syntax zu lernen tut es das so auch.

@JStein52 ich vermute Exceptions wurden noch nicht bearbeitet.
 

AP2000

Mitglied
Ich denke mal nextInt und nextDouble können Exceptions werfen wenn du an der Stelle was falsches eingibst. z.B. einen Buchstaben statt einer Zahl, hast du das mal getestet ? Du solltest diese Exceptions abfangen und geeignet reagieren.

wie funktionieren denn die Exceptions, was ist das genau und wie kann ich es in den Code integrieren?

Danke
 

AP2000

Mitglied
Naja normal würde man die Programmlogik in eine eigene Klasse packen und über die main Methode das Programm nur starten. Das wäre dann ein Anfang der Objektorientierung. Aber für den Anfang um die Syntax zu lernen tut es das so auch.

@JStein52 ich vermute Exceptions wurden noch nicht bearbeitet.

Ja, Exceptions "wurden noch nicht bearbeitet". Wie sähe das Programm dann aus? Wie kann ich das machen?
 

T_T

Bekanntes Mitglied
Du könntest in deinem switch case noch den "default" Wert rein machen, wenn der Benutzer eine Auswahl auswählen möchte, die nicht anwählbar ist...."Ungültige Auswahl" (als Beispiel)
 

JStein52

Top Contributor
Hier mal skizziert wie du die Exception abfangen und behandeln könntest:

Code:
        public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        while (true) {
            try {
                System.out.println("Was wollen Sie tun:");
                System.out.println("0\tAddition,\n1\tSubtraktion,\n2\tDivision,\n3\tMultiplikation\n4\tBeenden\t");
                String line = in.nextLine();
                int aktion = Integer.parseInt(line);

                switch (aktion) {
                    case 0:  // Addition
                        // usw.
                }
            } catch (NumberFormatException e) {
                System.out.println("Falsche Eingabe !");
            }
        }
 

AP2000

Mitglied
Java:
import java.util.Scanner;
import java.lang.NumberFormatException;


public class Rechnen {

    public static void main(String[] args) {
       
           
           Scanner in = new Scanner(System.in);
           System.out.println("Erste Zahl eingeben (falls Dezimalzahl: mit Komma): ");
           double ersteZahl = in.nextDouble();
           
           
           System.out.println("Zweite Zahl eingeben (falls Dezimalzahl: mit Komma): ");
           double zweiteZahl = in.nextDouble();
           
         
               while (true) {
                   try {
                       System.out.println("Was wollen Sie tun: ");
                       System.out.println("0\tAddition,\n1\tSubtraktion,\n2\tDivision,\n3\tMultiplikation\n4\tBeenden\t");
                       String line = in.nextLine();
                       int aktion = Integer.parseInt(line);

                       switch (aktion) {
                           case 0:  
                              double summe = ersteZahl + zweiteZahl;
                              System.out.println("Summe: " + summe);
                              break;// addition
                           case 1:
                              double differenz = ersteZahl - zweiteZahl;
                              System.out.println("Differenz: " + differenz);
                              break; // subtraction
                           case 2:
                              double quotient = ersteZahl / zweiteZahl;
                              System.out.println("Wert des Quotienten: " + quotient);
                              break; // division
                           case 3:
                              double produkt = ersteZahl * zweiteZahl;
                              System.out.println("Produkt: " + produkt);
                              break; // multiplication
                           case 4:
                              System.out.println("Ihr Ernst? Sie beenden das Programm?");
                              break;
                       }
                   } catch (NumberFormatException e) {
                       System.out.println("Falsche Eingabe!");
                   }
               }
           
           
    }
   
}

Wenn ich den Code laufen lasse, dann kommt nachdem ich eine Rechnung durchgeführt habe wieder die Option was ich denn durchführen möchte. Wie kann ich das Ding dazu bringen mich nach neuen Zahlen zu fragen? Oder einfach das Programm beenden?


@VfL_Freak Danke für den Tipp
 

JStein52

Top Contributor
Zum beenden gäbe es auch noch eine sportlichere Möglichkeit:

Code:
       Scanner in = new Scanner(System.in);
       boolean beenden = false;
               while (!beenden) {
                   try {
                     System.out.println("Erste Zahl eingeben (falls Dezimalzahl: mit Komma): ");
                     double ersteZahl = in.nextDouble();
          
          
                      System.out.println("Zweite Zahl eingeben (falls Dezimalzahl: mit Komma): ");
                      double zweiteZahl = in.nextDouble();
          
        
                       System.out.println("Was wollen Sie tun: ");
                       System.out.println("0\tAddition,\n1\tSubtraktion,\n2\tDivision,\n3\tMultiplikation\n4\tBeenden\t");
                       String line = in.nextLine();
                       int aktion = Integer.parseInt(line);

                       switch (aktion) {
                           case 0: 
                              double summe = ersteZahl + zweiteZahl;
                              System.out.println("Summe: " + summe);
                              break;// addition
                           case 1:
                              double differenz = ersteZahl - zweiteZahl;
                              System.out.println("Differenz: " + differenz);
                              break; // subtraction
                           case 2:
                              double quotient = ersteZahl / zweiteZahl;
                              System.out.println("Wert des Quotienten: " + quotient);
                              break; // division
                           case 3:
                              double produkt = ersteZahl * zweiteZahl;
                              System.out.println("Produkt: " + produkt);
                              break; // multiplication
                           case 4:
                              System.out.println("Ihr Ernst? Sie beenden das Programm?");
                              beenden = true;
                              break;
                       }
                   } catch (NumberFormatException e) {
                       System.out.println("Falsche Eingabe!");
                   }
               }
          
          
    }
  
}
 

AP2000

Mitglied
@JStein52 Wenn ich den Code laufen lasse kann ich die zwei Zahlen zwar eingeben, danach kommt aber sofort:

0 Addition,
1 Subtraktion,
2 Division,
3 Multiplikation
4 Beenden
Falsche Eingabe!
Erste Zahl eingeben (falls Dezimalzahl: mit Komma):


Was kann ich dagegen tun?
 

T_T

Bekanntes Mitglied
Poste mal deinen Code hier rein. Hast du die Zahlen mit "," oder mit "." eingegeben? (Falls es Zahlen mit Nachkommastellen waren).
 

InfectedBytes

Top Contributor
das Problem ist, dass nextInt bzw nextDouble nicht den Eingabepuffer leeren.
Wenn du also z.B. die 42 eingeben willst, dann beendest du die Eingabe mit der Enter taste. Im Eingabepuffer liegt nun die Zahl 42, aber auch noch ein Zeilenumbruch der durch die Entertaste eingegeben wurde.
nextDouble entfernt nun aber nur die Zahl aus dem Puffer und lässt den Zeilenumbruch zurück.
Daher hast du erst gar nicht die Möglichkeit eine weitere Zahl für das nächste nextDouble einzugeben, da immernoch der Zeilenumbruch vorhanden ist und somit die Eingabe bereits als komplett angesehen wird.

Gibt wie immer viele Wege das Problem zu lösen, zwei recht einfache Wege wären:
Java:
double ersteZahl = in.nextDouble();
in.nextLine(); // Zeilenumbruch aus puffer nehmen
oder
Java:
double ersteZahl = Double.parseDouble(in.nextLine());
 

AP2000

Mitglied
Java:
import java.util.Scanner;
import java.lang.NumberFormatException;


public class RechnungInternet1 {

    public static void main(String[] args) {
   
       
           Scanner in = new Scanner(System.in);
           System.out.println("Erste Zahl eingeben (falls Dezimalzahl: mit Komma): ");
           double ersteZahl = in.nextDouble();
       
       
           System.out.println("Zweite Zahl eingeben (falls Dezimalzahl: mit Komma): ");
           double zweiteZahl = in.nextDouble();
       
     
               while (true) {
                   try {
                       System.out.println("Was wollen Sie tun: ");
                       System.out.println("0\tAddition,\n1\tSubtraktion,\n2\tDivision,\n3\tMultiplikation\n4\tBeenden\t");
                       String line = in.nextLine();
                       int aktion = Integer.parseInt(line);

                       switch (aktion) {
                           case 0:
                              double summe = ersteZahl + zweiteZahl;
                              System.out.println("Summe: " + summe);
                              break;// addition
                           case 1:
                              double differenz = ersteZahl - zweiteZahl;
                              System.out.println("Differenz: " + differenz);
                              break; // subtraction
                           case 2:
                              double quotient = ersteZahl / zweiteZahl;
                              System.out.println("Wert des Quotienten: " + quotient);
                              break; // division
                           case 3:
                              double produkt = ersteZahl * zweiteZahl;
                              System.out.println("Produkt: " + produkt);
                              break; // multiplication
                           case 4:
                              System.out.println("Ihr Ernst? Sie beenden das Programm?");
                              break;
                       }
                   } catch (NumberFormatException e) {
                       System.out.println("Falsche Eingabe!");
                   }
               }
       
       
    }

}

Das ist der Code, wo das Problem ist, dass das Programm nicht beendet wird, wenn ich die Option 4 auswähle (beenden).


Java:
import java.util.Scanner;

public class RechnungInternet2 {
  public static void main(String[] args){
    Scanner in = new Scanner(System.in);
       boolean beenden = false;
               while (!beenden) {
                   try {
                     System.out.println("Erste Zahl eingeben (falls Dezimalzahl: mit Komma): ");
                     double ersteZahl = in.nextDouble();
     
     
                      System.out.println("Zweite Zahl eingeben (falls Dezimalzahl: mit Komma): ");
                      double zweiteZahl = in.nextDouble();
     
   
                       System.out.println("Was wollen Sie tun: ");
                       System.out.println("0\tAddition,\n1\tSubtraktion,\n2\tDivision,\n3\tMultiplikation\n4\tBeenden\t");
                       String line = in.nextLine();
                       int aktion = Integer.parseInt(line);

                       switch (aktion) {
                           case 0:
                              double summe = ersteZahl + zweiteZahl;
                              System.out.println("Summe: " + summe);
                              break;// addition
                           case 1:
                              double differenz = ersteZahl - zweiteZahl;
                              System.out.println("Differenz: " + differenz);
                              break; // subtraction
                           case 2:
                              double quotient = ersteZahl / zweiteZahl;
                              System.out.println("Wert des Quotienten: " + quotient);
                              break; // division
                           case 3:
                              double produkt = ersteZahl * zweiteZahl;
                              System.out.println("Produkt: " + produkt);
                              break; // multiplication
                           case 4:
                              System.out.println("Ihr Ernst? Sie beenden das Programm?");
                              beenden = true;
                              break;
                       }
                   } catch (NumberFormatException e) {
                       System.out.println("Falsche Eingabe!");
                   }
               }
      }
     
    }
}


Das ist der Code, wo ich gar nicht erst aussuchen kann welche Rechnung ich durchführen möchte, weil sofort Falsche Eingabe! steht.

@T_T ich gebe mit Komma die Zahl an, aber ich bekomme da auch keine Fehlermeldung. Wenn ich ein Punkt eingebe kommt eine Fehlermeldung.
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Aendere in der zweiten Version mal das einlesen von erste und zweite Zahl so wie @InfectedBytes das vorgeschlagen hat. Am einfachsten ist du nimmst den zweiten Vorschlag.

Edit: wenn du gar nicht zum Auswählen der Aktion kommt heisst das wohl dass vorher eine Exception gekommen ist !
 

T_T

Bekanntes Mitglied
Füge an den Stellen, an denen du die erste und die zweite Zahl einliest dies hinzu:

Java:
double ersteZahl = in.nextDouble();
in.nextLine()

// Analog mit der zweiten Zahl

Probier es danach erneut. Du hast, wie @InfectedBytes bereits gesagt, noch etwas im Puffer, was du erst entfernen musst.
 

JStein52

Top Contributor
So funktioniert es bei mir:

Code:
import java.util.Scanner;

public class RechnungInternet_2 {
  public static void main(String[] args){
    Scanner in = new Scanner(System.in);
       boolean beenden = false;
               while (!beenden) {
                   try {
                     System.out.println("Erste Zahl eingeben (falls Dezimalzahl: mit Komma): ");
                     double ersteZahl = Double.parseDouble(in.nextLine());
    
    
                      System.out.println("Zweite Zahl eingeben (falls Dezimalzahl: mit Komma): ");
                      double zweiteZahl = Double.parseDouble(in.nextLine());
    
  
                       System.out.println("Was wollen Sie tun: ");
                       System.out.println("0\tAddition,\n1\tSubtraktion,\n2\tDivision,\n3\tMultiplikation\n4\tBeenden\t");
                       String line = in.nextLine();
                       int aktion = Integer.parseInt(line);

                       switch (aktion) {
                           case 0:
                              double summe = ersteZahl + zweiteZahl;
                              System.out.println("Summe: " + summe);
                              break;// addition
                           case 1:
                              double differenz = ersteZahl - zweiteZahl;
                              System.out.println("Differenz: " + differenz);
                              break; // subtraction
                           case 2:
                              double quotient = ersteZahl / zweiteZahl;
                              System.out.println("Wert des Quotienten: " + quotient);
                              break; // division
                           case 3:
                              double produkt = ersteZahl * zweiteZahl;
                              System.out.println("Produkt: " + produkt);
                              break; // multiplication
                           case 4:
                              System.out.println("Ihr Ernst? Sie beenden das Programm?");
                              beenden = true;
                              break;
                       }
                   } catch (NumberFormatException e) {
                       System.out.println("Falsche Eingabe!");
                   }
               }
      }
    
    }

Und die Zahlen musst du mit punkt eingeben, also z.B. 3.4
 

Ähnliche Java Themen

Neue Themen


Oben