# Wenn Aufgaben erledigt sind, auf Programmanfang springen?



## Leck0rkuchen (3. Mrz 2010)

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.


----------



## SlaterB (3. Mrz 2010)

```
while(true) {
  // Eingabe lesen

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


----------



## Leck0rkuchen (3. Mrz 2010)

SlaterB hat gesagt.:


> ```
> while(true) {
> // Eingabe lesen
> 
> ...




Mit  [// Programm beenden oder Aktion ausführen] meinst du if-else oder?


----------



## SlaterB (3. Mrz 2010)

ja


----------



## faetzminator (3. Mrz 2010)

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].

```
boolean isRunning = true;
while (isRunning) {
    // der "normale" Programmcode von dir
    if (/* benutzer will nicht mehr weiter machen */) {
        isRunning = false;
    }
}
```


----------



## Leck0rkuchen (3. Mrz 2010)

Wie springe ich wieder am Anfang des Programms?

Mal mein QuellCode:


```
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?
			
		}
	}

}
```


----------



## nrg (3. Mrz 2010)

Leck0rkuchen hat gesagt.:


> Wie springe ich wieder am Anfang des Programms?



den schleifenkopf auch an anfang deines programms setzen


----------



## Leck0rkuchen (3. Mrz 2010)

faetzminator hat gesagt.:


> 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].
> 
> ```
> boolean isRunning = true;
> ...




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 (3. Mrz 2010)

Strings vergleicht man min [c]equals()[/c]. So würde ich es machen:

```
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;
    }
}
```


----------



## Leck0rkuchen (3. Mrz 2010)

nrg hat gesagt.:


> den schleifenkopf auch an anfang deines programms setzen



Sry, versteh ich nich. Explain.


----------



## faetzminator (3. Mrz 2010)

faetzminator hat gesagt.:


> Strings vergleicht man min [c]equals()[/c]. So würde ich es machen:
> 
> ```
> public static void main(String[] args) {
> ...



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 (3. Mrz 2010)

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)


----------



## Leck0rkuchen (3. Mrz 2010)

nrg hat gesagt.:


> 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. 

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


----------

