# Methode x mal ausführen auf Befehl



## mobile (9. Apr 2006)

Hi Leute,

ich habe ein Problem. Mein Programm startet von einem Startbildschirm aus, wo man durch Zahlen wählt was man tun möchte.
Ich wähle die 1, dann möchte ich Zahlen addieren. Bevor die Methode add() aber gestartet wird, soll abgefragt werden wie viele Aufgaben man rechnen möchte. Das habe ich ach so weit hin bekommen. Dann hat es zweimal die add() aufgerufen und dann ging es nicht mehr weiter. Woran liegt das?
Habe das mit einer for Schleife und If-Anweisung gemacht. Wenn i != Zahl die eingegeben wird, dann führe die Methode aus. Alles uper geklappt.
Dann ahbe ich weiter gesagt if else i == Zahl die eingeben wurde, dann rufe eine andere Methode auf. Das hat er aber nicht gemacht. Da ist er nie hingekommen. Warum nciht?

Also noch mal kurz und knapp was ich will:
1.Eingabe Zahl einlesen
2.Wenn die Zahl zB 3 ist, soll 3 mal eine Methode aufgerufen werden, (ging alles gut)
3.Wenn die Methode 3 mal aufgerufen wurde, soll eine andere Methode aufgerufen werden.

Hoffe ihr könnt mir helfen!


----------



## Ark (9. Apr 2006)

Ein Quelltextauszug wäre hier sehr hilfreich. 

Bis jetzt habe ich das so verstanden

```
int anzahl=2; // die eingegebene Anzahl, im Beispiel 2
for(int i=0;i<anzahl;i++){
    methode();
}
// weiter geht's
```


----------



## mobile (9. Apr 2006)

Hier beginnt das Programm, bei case 1 wird die Klasse Numbers mit der Methode number aufgerufen

```
final class StartingScreen {
	void start() {
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
		String eingabeZeile;
		int frage;
			try {					
				System.out.println("Addition (1)");
				System.out.println("Subtraktion (2)");
				System.out.println("Multiplikation (3)");
				System.out.println("Division (4)");
				System.out.println("Beenden (5)");
				eingabeZeile = eingabe.readLine(); 
				StringTokenizer tokens = new StringTokenizer(eingabeZeile);
				frage = Integer.parseInt(tokens.nextToken()); 
				switch(frage) {
					case 1 : Numbers plus = new Numbers();
								plus.number();
					break;
					case 2 : CalculationMethods minus = new CalculationMethods();
								minus.subtract();
	                break;
					case 3 : CalculationMethods multi = new CalculationMethods();
								multi.multiply();
		            break;
					case 4 : CalculationMethods divi = new CalculationMethods();
								divi.divide();
		            break;
					case 5 : System.out.println("Ich hoffe, dass ich dich bald wieder mit dir ueben darf!");
								System.exit(0);
					break;
				}
			}
			catch(IOException e) {
				System.out.println("Fehler bei der Eingabe");
			}
			catch(NoSuchElementException e) {
				System.out.println("Zuwenig Werte eingegeben");
			}
	}
}
```

Klasse Numbers mit der Methode Numbers.In der for Schleife vergeliche ich die EIngabe Zeile. Wenn sie ungleich sind soll die MEthode add(9 aus der Klasse CalculationMethods aufgerufen werden. Wenn ich 2 eingeben soll das zweimal geschehen.

```
final class Numbers {
	void number() {
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));//Instanz für EIngabeStream
		String eingabeZeile;
		int anzahl;
		try {
			System.out.println("Wie viele Aufgaben willst du machen?");
			eingabeZeile = eingabe.readLine(); //Eingabe Zeile wird eingelesen
			StringTokenizer tokens = new StringTokenizer(eingabeZeile); 
			anzahl = Integer.parseInt(tokens.nextToken());  
			for(int i=0; i<anzahl; i++) {
				if(i != anzahl) {
					CalculationMethods plus = new CalculationMethods();
					plus.add();		
				}
				else if(i == anzahl) {
					StartingScreen run = new StartingScreen();
					run.start();	
				}
			}
		}
		catch(IOException e) {
			System.out.println("Fehler bei der Eingabe");
		}
		catch(NoSuchElementException e) {
			System.out.println("Zuwenig Werte eingegeben");
		}
		
	}
}
```
Wurde die Schleife jetzt 2mal durchlaufen, ist i==anzahl also soll eine andere Methode aufgerufen werden, aber das macht er nie. Programm bleibt dann immer stehen, anstatt die Methode aufzurufen. 

Das hier ist die Methode add, die 2mal aufgerufen werden soll

```
final void add() {
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
		String eingabeZeile;
		int zahl;
		try {		
			Random generator = new Random();
			int zahl1 = generator.nextInt(70);
			int zahl2 = generator.nextInt(70);
			int ergebnis = zahl1+zahl2;
			System.out.println("Aufgabe: " + zahl1 + "+" + zahl2 + "=");
			eingabeZeile = eingabe.readLine(); 
			StringTokenizer tokens = new StringTokenizer(eingabeZeile);
			zahl = Integer.parseInt(tokens.nextToken());  
			if(zahl == ergebnis) {
					System.out.println("Richtig!"+"\n");
					add();
			}
			else if(zahl != ergebnis){
					System.out.println("Das war leider falsch!");
					StartingScreen run = new StartingScreen();
					run.start();
			}
	}
		catch(IOException e) {
			System.out.println("Fehler bei der Eingabe");
		}

		catch(NoSuchElementException e) {
			System.out.println("Zuwenig Werte eingegeben");
		}
	}
```


----------



## Jockel (9. Apr 2006)

for(int i=0; *i<anzahl*; i++) 
i wird nie gleich anzahl sein, weil deine Abbruchbedingung was anderes vorsieht!


----------



## mobile (9. Apr 2006)

Und wie könnte ich das dann ändern?


----------



## Jockel (9. Apr 2006)

for(int i=0; i<=anzahl; i++)


----------



## mobile (9. Apr 2006)

hab ich grade versucht, aber das geht auch nicht, er geht einfach nicht weiter.


----------



## mobile (9. Apr 2006)

Doch es geht, hatte in der add() Methode noch was anders drin stehen. Merci!


----------

