Wenn Aufgaben erledigt sind, auf Programmanfang springen?

Leck0rkuchen

Mitglied
Hoi Leute!

Hab ne allgemeine Frage, wurde warscheinlich schon öfter gestellt, habs aba per SuFu nicht gefunden.

Also meine Frage;

Wenn ich ein Programm ausführe und alles abgearbeitet ist endet dies.
Nun will ich aber die Möglichkeit haben; das ich gefragt werde ob ich das Programm nochmal abarbeiten will oder doch beenden.
 
S

SlaterB

Gast
Java:
while(true) {
  // Eingabe lesen

  // Programm beenden oder Aktion ausführen
}
edit: gegebenenfalls die Anfrage auch erst am Ende nach der Aktion ;)
 

faetzminator

Gesperrter Benutzer
Oder schöner - damit die schleife nicht mit [c]break[/c] oder - noch schlimmer - [c]System.exit()[/c] beendet werden muss, mit einem [c]boolean[/c].
Java:
boolean isRunning = true;
while (isRunning) {
    // der "normale" Programmcode von dir
    if (/* benutzer will nicht mehr weiter machen */) {
        isRunning = false;
    }
}
 

Leck0rkuchen

Mitglied
Wie springe ich wieder am Anfang des Programms?

Mal mein QuellCode:

Java:
public class Test 
{
	public static void main(String[] args)
	{
		System.out.println("Was möchten sie tun?");
		System.out.println("1. Addieren");
		System.out.println("2. Subtrahieren");
		System.out.println("3. Multiplizieren");
		System.out.println("4. Dividieren");
		System.out.println("5. Rabatte Rechnen");
		System.out.println("Geben sie die Zahl ein: ");
		
		int rechnenArt = Eingabe.IntZahl();
		
		switch (rechnenArt)
		{
		case 1: Addieren.main(args); break;
		case 2: Subtrahieren.main(args); break;
		case 3: Multiplizieren.main(args); break;
		case 4: Dividieren.main(args); break;
		case 5: Prozent.main(args); break;
		default: System.out.println("FEHLER"); break;
		}
		
		while(true)
		{
			System.out.println("Möchten Sie nochmal rechnen?");
			String yo = Eingabe.LiesString();
			
			if (yo == "ja");
                                      // Was für Anweisung geb ich da ein?

                                      else // Welche Anweisung steht fürs beenden?
			
		}
	}

}
 

Leck0rkuchen

Mitglied
Oder schöner - damit die schleife nicht mit [c]break[/c] oder - noch schlimmer - [c]System.exit()[/c] beendet werden muss, mit einem [c]boolean[/c].
Java:
boolean isRunning = true;
while (isRunning) {
    // der "normale" Programmcode von dir
    if (/* benutzer will nicht mehr weiter machen */) {
        isRunning = false;
    }
}


Warum ist break oder System.exit (thx, die Anweisung hab ich gesucht) schlimm?
Muss nich elegant sein, hauptsache ich checks erstmal.

Aba Thx für die tollen Antworten bisjetzt! :toll:
 

faetzminator

Gesperrter Benutzer
Strings vergleicht man min [c]equals()[/c]. So würde ich es machen:
Java:
public static void main(String[] args) {
    boolean isRunning = true;
    while (isRunning) {
        rechne();
        System.out.println("Möchten Sie nochmal rechnen?");
        String yo = Eingabe.LiesString();

        if (!Eingabe.LiesString().equals("ja")) {
            isRunning = false;
        }
    }

}

private static void rechne() {
    System.out.println("Was möchten sie tun?");
    System.out.println("1. Addieren");
    System.out.println("2. Subtrahieren");
    System.out.println("3. Multiplizieren");
    System.out.println("4. Dividieren");
    System.out.println("5. Rabatte Rechnen");
    System.out.println("Geben sie die Zahl ein: ");

    int rechnenArt = Eingabe.IntZahl();

    switch (rechnenArt) {
    case 1:
        Addieren.main(args);
        break;
    case 2:
        Subtrahieren.main(args);
        break;
    case 3:
        Multiplizieren.main(args);
        break;
    case 4:
        Dividieren.main(args);
        break;
    case 5:
        Prozent.main(args);
        break;
    default:
        System.out.println("FEHLER");
        break;
    }
}
 

faetzminator

Gesperrter Benutzer
Strings vergleicht man min [c]equals()[/c]. So würde ich es machen:
Java:
public static void main(String[] args) {
    boolean isRunning = true;
    while (isRunning) {
        rechne(args);
        System.out.println("Möchten Sie nochmal rechnen?");
        String yo = Eingabe.LiesString();

        if (!Eingabe.LiesString().equals("ja")) {
            isRunning = false;
        }
    }

}

private static void rechne(String[] args) {
    System.out.println("Was möchten sie tun?");
    System.out.println("1. Addieren");
    System.out.println("2. Subtrahieren");
    System.out.println("3. Multiplizieren");
    System.out.println("4. Dividieren");
    System.out.println("5. Rabatte Rechnen");
    System.out.println("Geben sie die Zahl ein: ");

    int rechnenArt = Eingabe.IntZahl();

    switch (rechnenArt) {
    case 1:
        Addieren.main(args);
        break;
    case 2:
        Subtrahieren.main(args);
        break;
    case 3:
        Multiplizieren.main(args);
        break;
    case 4:
        Dividieren.main(args);
        break;
    case 5:
        Prozent.main(args);
        break;
    default:
        System.out.println("FEHLER");
        break;
    }
}

Edit: zu deiner Frage: Weil ein Programm von A-Z laufen sollte. Es wird ansonsten schwierig, den Ablauf zu verstehen, wenn das Programm sich irgendwo einfach mit [c]System.exit()[/c] (ohne Fehlerfall) beendet. Vergleiche dazu Aussagen, warum gotos nicht schön sind - sie verursachen Spagetticode.
 

nrg

Top Contributor
schlimm imho nicht aber umständlicher zu lesen. wenn jetzt die schleife in Abhängigkeit von einem boolean läuft braucht man nur den schleifenbody nach dem boolean durchsuchen und man weiß genau wo was passiert. bei einer while (true) ist das nicht so leicht nachvollziehbar, weil es eben mehr "abbruchoptionen" gibt.

Addieren.main(args); ist imho nicht so schön. Mach lieber in deine Klasse Test eine Methode addieren(args)
 
Zuletzt bearbeitet:

Leck0rkuchen

Mitglied
schlimm imho nicht aber umständlicher zu lesen. wenn jetzt die schleife in Abhängigkeit von einem boolean läuft braucht man nur den schleifenbody nach dem boolean durchsuchen und man weiß genau wo was passiert. bei einer while (true) ist das nicht so leicht nachvollziehbar, weil es eben mehr "abbruchoptionen" gibt.

Addieren.main(args); ist imho nicht so schön. Mach lieber in deine Klasse Test eine Methode addieren(args)

Ah thx für die Erklärung.

Yo des mim Addieren usw. hab ich nur gemacht weil ich grad gecheckt hab wie man auf Methoden anderer Klassen zugreift. Da wollt ich mal mein "Traum vom einfachn Taschenrechner" näherkommen. :D

@faetzminator: Versuche das gleich auch mal, sieht sehr gut aus.
 

Neue Themen


Oben