• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Neustart des Programms - Java

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Hallo,

ich sitze gerade an einem Programm, das ich schreiben muss, und frage mich ,ob es eine Möglichkeit gibt, ein Programm durch einen Befehl von vorn zu beginnen.

Bei dem Programm handelt es sich um einen einfachen Taschenrechner, der im Grunde nur + - * und / rechnen können muss.

Wenn ich ein "C" in die Konsole eingabe und mit enter bestätige, sollen die Variablen leer sein, und er soll mich erneut um input bitten - das Programm also wieder von vorn starten.

Ich habe schon länger gesucht, aber noch nichts passendes gefunden. Vielleicht hat ja einer den passenden Befehl im Kopf.

Vielen Dank schon einmal ....

Gruß
 

Datschi

Reinette de Champagne
Registriert
08.11.04
Beiträge
415
Schreib das ganze in einer While-Schleife mit nem Boolean-Wert den du durch eine Eingabe setzen kannst, wie zum Beispiel "EXIT.
Alternativ kannste auch eine Do - While Schleife benutzen, ist wahrscheinlich sogar die bessere Lösung. also einfach:
Code:
do{
    //Rechner-Logik/Funktionen
   }
while(Ende == False)

Viel Erfolg

Der Datschi
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Danke erst mal. Mal sehen ob ich das noch hinwursteln kann ... o_O
 

Datschi

Reinette de Champagne
Registriert
08.11.04
Beiträge
415
wenn nicht, frag :D Ich hätte da noch nen kompletten Postfix-Rechner....
Musste ich letztes und Vorletztes Sem. Proggen...
Kannst mir auch mal deinen Code schicken, den du schon hast, dann gucken wir da mal gemeinsam ;)

Von wo aus musst du das denn machen? Studium, oder Informatik-Unterricht in der Schule???

Der Datschi
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Also hier ist mal der Code ... der Rechner berechnet (im Ersten Durchlauf) alles eigentlich so wie er das machen soll. Wenn ich dann C eingebe, sagt er mir brav, dass alles Variablen zurückgesetzt wurden ... aber anscheinend macht der das nicht richtig. Es ist nämlich so, dass nach dem Eineben von C die Ergebnisse nicht mehr stimmen .... aber hier ist momentan noch einiges ziemlich buggy :) ... ich mach das fürs Studium (1 Semester, seit 3 Wochen) ....

Hier mal der Code ... vielleicht hast du ja sinnvolle Anmerkungen für mich :p ...

Danke schon mal.

Achso ... "Eingabe" ist eine Klasse, die wir bekommen habe, damit die Eingabe wohl leichter zu bewerkstelligen ist ... sie wollen uns am Anfang wohl nicht gleich schocken :)

Code:
    public static void main(String[] args) {
        
// ============================================================================
// DEKLARIERUNG / INITIALISIERUNG
        
        String eingabe1 = Eingabe.readString();
        String eingabe2 = null;
        float operand1 = 0;
        float operand2 = 0;
        String[] array = new String[50];
        int i = 0;
        
// ============================================================================
// DER GANZE BERECHNUNGSKRAM --- IN DER IMMER AUSZUFÜHRENDEN WHILE-SCHLEIFE
        
if (Eingabe.checkFloat(eingabe1)) {
        operand1 = Eingabe.parseFloat(eingabe1);

 
        array[i] = Float.toString(operand1);
        
        
        while (true)
            
        {
            String operator = Eingabe.readString();

            // LEDIGLICH EIN EINGABEWERT NOTWENDIG

            if (operator.equals("x2")) {
                i++;
                array[i] = operator; i++;
                array[i] = " = "; i++;
                operand1 *= operand1;
                array[i] = Float.toString(operand1);
                continue;
            }
            
            else if (operator.equals("#") ) {
                i++;
                array[i] = operator; i++;
                array[i] = " = "; i++;
                operand1 *= -1;
                array[i] = Float.toString(operand1);
                continue;
            }
            
            else if (operator.equals("sin")) {
                i++;
                array[i] = operator; i++;
                array[i] = " = "; i++;
                operand1 = (float) Math.sin(operand1);
                array[i] = Float.toString(operand1);
                continue;
            }
            
            // OPERATIONEN, DIE EINEN ZWEITEN EINGABEWERT VERLANGEN
            // ADDITION
            else if (operator.equals("+")) {
                i++;
                array[i] = operator; i++;
                    
                    eingabe2 = Eingabe.readString();
                    if (Eingabe.checkFloat(eingabe2)) {
                        operand2 = Eingabe.parseFloat(eingabe2);
                        array[i] = Float.toString(operand2); i++;
                        operand1 += operand2;
                        array[i] = " = "; i++;
                        array[i] = Float.toString(operand1);
                    continue;
            }    else 
                    System.out.println("Falsche Eingabe -- Programm wird beendet!");
            }
            
            // SUBTRAKTION
            else if (operator.equals("-")) {
                i++;
                array[i] = operator; i++;
                    
                    eingabe2 = Eingabe.readString();
                    if (Eingabe.checkFloat(eingabe2)) {
                        operand2 = Eingabe.parseFloat(eingabe2);
                        array[i] = Float.toString(operand2); i++;
                        operand1 -= operand2;
                        array[i] = " = "; i++;
                        array[i] = Float.toString(operand1);
                    continue;
            }    else 
                    System.out.println("Falsche Eingabe -- Programm wird beendet!");
            }
            
            // MULTIPLIKATION
            else if (operator.equals("*")) {
                i++;
                array[i] = operator; i++;
                    
                    eingabe2 = Eingabe.readString();
                    if (Eingabe.checkFloat(eingabe2)) {
                        operand2 = Eingabe.parseFloat(eingabe2);
                        array[i] = Float.toString(operand2); i++;
                        operand1 *= operand2;
                        array[i] = " = "; i++;
                        array[i] = Float.toString(operand1);
                    continue;
            }    else 
                    System.out.println("Falsche Eingabe -- Programm wird beendet!");
            }
            
            // DIVISION
            else if (operator.equals("/")) {
                i++;
                array[i] = operator; i++;
                    
                    eingabe2 = Eingabe.readString();
                    if (Eingabe.checkFloat(eingabe2)) {
                        operand2 = Eingabe.parseFloat(eingabe2);
                        array[i] = Float.toString(operand2); i++;
                        operand1 /= operand2;
                        array[i] = " = "; i++;
                        array[i] = Float.toString(operand1);
                    continue;
            }    else 
                    System.out.println("Falsche Eingabe -- Programm wird beendet!");
            }            

            
            else if (operator.equals("C")) {
                operand1 = 0;
                operand2 = 0;
                System.out.println("Alle Werte gelöscht!");
                System.out.println("Bitte neuen ersten Wert eingeben [FLOAT]");
                continue;
            }
            
            // ANWEISUNG ZUR AUSGABE
            
            else if (operator.equals("=")) {
                System.out.println("Ergebnis: " +operand1);
                continue;
            }
        }
    }
       
else {
    System.out.println("Erster Wert muss 'ne Zahl sein!");
     }
        
        
}        
}
 

Datschi

Reinette de Champagne
Registriert
08.11.04
Beiträge
415
Boa! :D
Interessant ^^
Also: Das Ganze könntest du auch mit Switch/Case Anweisungen realisieren. Würde das ganze einfacher machen. Aber so gehts auch.
Um das als Schleife laufen zu lassen, würde ich bei der Eingabe von C noch nen Boolean-Wert auf true/false setzen.
Also:
Code:
Boolean laufend = true;

do{
//deine Logik
//für 
else if (operator.equals("X")) //oder einfach ne andere Eingabe zum Beenden
            {
                laufend = false;
            }
}
while(laufend == true);

wenn jetzt X eingeben wird, wird laufend = false gesetzt und die Schleife dann sofort beendet. Ganz einfach eigentlich :D

Was studierst du???

Der Datschi
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Danke für deine Idee :) ... ich bau das gleich heute Abend mal ein ... Aber : das beendet dann meine Schleife zwar aber leert doch keine Variablen .. oder?
Am besten wäre es - wie gesagt - wenn das Programm nach Eingabe der C-Taste einfach von vorn los geht (ohne das Programm neustarten zu müssen - natürlich :) )

Ich studiere das Gebiet überhaupt ... Informatik :D
 

Datschi

Reinette de Champagne
Registriert
08.11.04
Beiträge
415
Naja, so betrachtet, wäre das ja auch Blödsinn!!! :D
Weil, wenn du das Programm beendest, dann brauchst du keine leeren Variablen :D
Und beim Neustart des Programms sind sie ja eh leer, nicht wahr?
Also eine Abfrage auf C zum Nullen, und eine auf EXIT zum Beenden! Wobei das am schönsten ja eigentlich mit Methoden wäre :D
Wenigstens wirst du da bei größeren Programmen nicht drum rum kommen.
Aber das kommt sicherlich alles noch!

Der Datschi