Do-While / Kalkulator / Bitte um Hilfe

Bitte aktiviere JavaScript!
Ich habe eine Klasse Kalkulator entwickelt, mit der arithmetischer Ausdruck schrittweise eingegeben und berechnen werden kann. So weit ist alles ok. In der Aufgabe jedoch steht, dass nach der Berechnung sollte abgefragt werden, ob eine weitere Berechnung (J/N) erfolgen soll.
Wie kann ich das realisieren?

Code:
import java.util.Scanner;

public class Kalkulator {
    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        double zahl1 = kalkuliere1();
        double zahl2 = kalkuliere2();
        char operation = operationWahl();
        double ergebniss = rechne(zahl1,zahl2,operation);
        System.out.println("Ergebniss: "+ ergebniss);
    }

    public static double kalkuliere1(){
        System.out.println("Erste Zahl bitte:");
        double zahl1;
        if(scanner.hasNextDouble()){  // Gibt true zurück, wenn Eingabe dieses Scanners mit der nextDouble()-Methode als doppelter Wert interpretiert werden kann.
            zahl1 = scanner.nextDouble();
        } else {
            System.out.println("Eingabefehler, Erste Zahl bitte noch mal");
            scanner.next();//Rekursion
            zahl1 = kalkuliere1();
        }
        return zahl1;
      }

      public static double kalkuliere2(){
        System.out.println("Zweite Zahl bitte:");
        double zahl2;
        if(scanner.hasNextDouble()){
            zahl2 = scanner.nextDouble();
        } else {
            System.out.println("Eingabefehler, Zweite Zahl bitte noch mal");
            scanner.next();//Rekursion
            zahl2 = kalkuliere2();
        }
        return zahl2;
    }

    public static char operationWahl(){
        System.out.println("Operator bitte:");
        char operation;
        if(scanner.hasNext()){
            operation = scanner.next().charAt(0);
        } else {
            System.out.println("Operator bitte noch mal");
            scanner.next();//Rekursion
            operation = operationWahl();
        }
        return operation;
    }

     public static double rechne(double zahl1, double zahl2, char operation){
            double ergebniss;
            switch (operation){
                case '+': ergebniss = zahl1 + zahl2; break;
                case '-': ergebniss = zahl1 - zahl2; break;
                case '*': ergebniss = zahl1 * zahl2; break;
                case '/': ergebniss = zahl1 / zahl2; break;
                case '%': ergebniss = zahl1 % zahl2; break;
                default: System.out.println("Operator ist nicht eindeutig");
                ergebniss = rechne(zahl1, zahl2, operationWahl());
            }
            return ergebniss;
    }
}
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Die Antwort steht doch schon im Titel: do-while ;)

Alles, was aktuell in der main-methode steht, muss in einer Schleife ablaufen, damit es wiederholt wird. Und da das ganze mindestens einmal laufen soll mit do-while, und als Abbruchbedingung eben die Wahl des Nutzers.
 
Vielen Dank für schnelle Rückmeldung. Dass das ganze mit Hilfe do-whilte laufen soll, habe ich schon gedacht. Aber, klappt bei mir trotzdem nicht (((. Was habe ich hier falsch gemacht?

Code:
public static double rechne(double zahl1, double zahl2, char operation){

             do {
            double ergebniss;
            switch (operation){
                case '+': ergebniss = zahl1 + zahl2; break;
                case '-': ergebniss = zahl1 - zahl2; break;
                case '*': ergebniss = zahl1 * zahl2; break;
                case '/': ergebniss = zahl1 / zahl2; break;
                case '%': ergebniss = zahl1 % zahl2; break;
                default: System.out.println("Operator ist nicht eindeutig");
                ergebniss = rechne(zahl1, zahl2, operationWahl());
            }
            return ergebniss;
            System.out.print("Weiter berechnen? true/false");
            Scanner scan = new Scanner(System.in);
        } while (scan.nextBoolean()==true);
           System.out.println("Super. Wir rechnen weiter!");

    }
}
 
Zuletzt bearbeitet:
Du solltest in der Methode keinen neuen Scanner deklarieren, sondern den nutzen, den du am Anfang der Klasse deklariert hast.
 
Davon abgesehen: Weißt du was ein "return" bewirkt?
Return soweit ich weiß, gibt Ergebnis zurück.
Kann mir wirklich jemand helfen? Sorry, ich bin im ersten Semester.
Jetzt habe ich vielleicht noch „besser gebastelt“, dass alles läuft, aber Anfrage ja oder nein kommt vor Ergebnis vor.

Code:
import java.util.Scanner;

public class Kalkulator{
    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        double zahl1 = kalkuliere1();
        double zahl2 = kalkuliere2();
        char operation = operationWahl();
        char anfrage = rechneWeiter();
        double ergebniss = rechne(zahl1,zahl2,operation, anfrage);

        System.out.println("Ergebniss: "+ ergebniss);
    }

    public static double kalkuliere1(){
        System.out.println("Erste Zahl bitte:");
        double zahl1;
        if(scanner.hasNextDouble()){  // Gibt true zurück, wenn Eingabe dieses Scanners mit der nextDouble()-Methode als doppelter Wert interpretiert werden kann.
            zahl1 = scanner.nextDouble();
        } else {
            System.out.println("Eingabefehler, Erste Zahl bitte noch mal");
            scanner.next();//Rekursion
            zahl1 = kalkuliere1();
        }
        return zahl1;
      }

      public static double kalkuliere2(){
        System.out.println("Zweite Zahl bitte:");
        double zahl2;
        if(scanner.hasNextDouble()){
            zahl2 = scanner.nextDouble();
        } else {
            System.out.println("Eingabefehler, Zweite Zahl bitte noch mal");
            scanner.next();//Rekursion
            zahl2 = kalkuliere2();
        }
        return zahl2;
    }

    public static char operationWahl(){
        System.out.println("Operator bitte:");
        char operation;
        if(scanner.hasNext()){
            operation = scanner.next().charAt(0);
        } else {
            System.out.println("Operator bitte noch mal");
            scanner.next();//Rekursion
            operation = operationWahl();
        }
        return operation;
    }
            ///////////////////////////////////////////
    public static char rechneWeiter(){
        char anfrage;
        anfrage = scanner.next().charAt(0);
        return anfrage;

    }

        ///////////////////////////////

     public static double rechne(double zahl1, double zahl2, char operation, char anfrage){

             do {
            double ergebniss;
            switch (operation){
                case '+': ergebniss = zahl1 + zahl2; break;
                case '-': ergebniss = zahl1 - zahl2; break;
                case '*': ergebniss = zahl1 * zahl2; break;
                case '/': ergebniss = zahl1 / zahl2; break;
                case '%': ergebniss = zahl1 % zahl2; break;
                default: System.out.println("Operator ist nicht eindeutig");
                ergebniss = rechne(zahl1, zahl2, operationWahl(), rechneWeiter());
            }

            System.out.print("Weiter berechnen? (J/N)");
            return ergebniss;

        } while (anfrage == 'J');

    }
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben