# Ausführen einer void Methode als if-Bedingung



## DudePr (5. Dezember 2009)

Hi,

ich habe folgendes Problem:

wie implementiere ich folgendes:
"Wenn die void Methode x ausgeführt wurde, dann gehe in den If-case"

danke für eure Hilfe,
DudePr


----------



## zerix (5. Dezember 2009)

Hallo,

erstmal gibt es kein if-case. ;-)

Ich würde das so verstehen, dass eine Methode ausgeführt wird und dahinter eine if-Anweisung steht.

Gruß

Sascha


----------



## DudePr (5. Dezember 2009)

Hey, okay ich habs ein wenig falsch ausgedrückt. 

was falsch ist, weil das natürlich keine gültige Bedingung ist:

if(x.voidmethod()) {
...
}

Also ich möchte folgendes damit machen: Das im "if" soll nur ausgeführt, wenn x.voidmethod() schon ausgeführt wurde, wobei das x.voidmethod() irgendwann zur Laufzeit durch den Benutzer ausgeführt werden kann.


Aber wie schreibe ich das dann richtig ?

thx&ciao
DudePr


----------



## doco (5. Dezember 2009)

Hallo!

Ich würde da eine boolean-Variable setzen
_boolean runned = false;_

Bei Aufruf der Methode würde ich diese entsprechend auf true setzen
_x.voidmethod();
runned = true;_
Dann kannst du eine if-Anweisung folgenderweise verwenden:

_if (runned) {
[Anweisungsblock]
}_

Ich weiß zwar nicht, ob das so elegant ist, aber müsste imo funktionieren.

VG


----------



## zerix (5. Dezember 2009)

Elegant ist sowas wirklich nicht. 

Was genau möchtest du denn machen?
Vielleicht kann man das anders lösen.

Gruß

Sascha


----------



## dudePr (5. Dezember 2009)

Hi,

geht um ein kleines Spiel, 
zum Beispiel das ich erst "weiter" komme, wenn ich vorher was bestimmtes mit gegebenen mitteln gemacht habe (die void methode).

Das "weiter kommen"  wäre dann in dem If-Anweisungsblock.


----------



## miffi (6. Dezember 2009)

Howie.

Leider sind deine Informationen etwas spärlich, deshalb tut es mir leid, falls das jetzt völlig in die falsche Richtung geht:
An deiner Stelle würde ich mir mal Java's Eventhandling (Listener) zu Gemüte führen. Eine gute Einführung ist z.B. bei >>Galileo Computing<< zu finden.

Du könntest beispielsweise am Ende deiner void-Methode ein Event abfeuern, worauf der entsprechende Listener eine andere Methode aufruft oder (wie oben gezeigt) eine boolean Variable auf _true_ setzt.

Gruß
miffi


----------



## Benzbob (6. Dezember 2009)

Moin,

also solange deine Methode kein Thread ist, wird sowieso alles was nach der Methode passiert erst ausgefürht wenn Sie durchgelaufen ist.

D.h. also eine if-Abfrage ist in diesem Fall völlig überflüssig!


```
voidMethode ();

{
das was danach passiert soll
}
```


Es sei denn du willst deine Methode erst aufrufen wenn ein bestimmter Fall ein getreten ist. 


```
if (true){
voidMethode1();
}

else if (false) {
voidMethode2();
}
```

Aber wie meine Vorredner auch schon erwähnt hatten, brauch wir mehr Informationen was genau du denn vorhast, dann kann die vielleicht auch geholfen werden!


----------



## Andibert (7. Dezember 2009)

Hallo,
Also wenn ich dich richtig verstanden habe willst du nur abprüfen ob du zu einem früheren Zeitpunkt die ominöse Voidfunktion x schon mal ausgeführt hast.
Das lässt sich natürlich nur über eine Variable lösen. Denn wenn du dir nicht merkst, dass du etwas getan hast, kannst du später nicht mehr sagen, ob du etwas getan hast.
@Sascha
Doch, es ist elegant, weil einfach und notwendig.
Wenn jedoch viele solcher "hab ich dies schon getan?" Prüfungen notwendig werden, kann man das ganze auch in einer Key/Value Map oder einer Properties Datei speichern.


----------



## Benzbob (7. Dezember 2009)

Na dann würd ich das ganze mal so verstehen:


```
import java.util.Scanner;

public class Example {
	private boolean isRunned = false;
	private Scanner sc;
	private String result;
	
	private Example(){
		
		sc = new Scanner(System.in);
		result = "";
		
		while (!isRunned){
			System.out.println("Soll die Methode ausgeführt werden? (y)");
			result = sc.nextLine();
			
			if (result.equals("y")){
				voidMethode();
			} else {
				System.out.println("Methode wird nicht ausgeführt.\n");
			}		
		}	
	}
	
	private void voidMethode(){
		//do whatever you want
		
		isRunned=true;		
		System.out.println("Methode wurde ausgeführt.");
	}
	
	public static void main(String[] args) {
		
		new Example();
	}
}
```


----------



## miffi (7. Dezember 2009)

Benzbob hat gesagt.:


> Na dann würd ich das ganze mal so verstehen



Prinzipiell ist deine Lösung nicht falsch, nur blockierst du die Anwendung damit - und vermutlich auch alle anderen Prozesse/Anwendungen.

Wenn du es über eine while-Schleife lösen willst, würde ich einen extra Thread via einer java.lang.Runnable bzw. java.lang.Thread Implementierung erzeugen, die _Thread.sleep(long millis)_ in der Schleife verwendet. Damit ist dann garantiert, dass andere Threads auch eine Chance haben weiterzulaufen.

Beispiele zum Thema Multithreading gibt es bestimmt einige hier im Forum.

Gruß
miffi


----------



## Benzbob (7. Dezember 2009)

Hi Miffi,
das ist schon richtig was du sagts, aber ich wollte ja auch nur veranschaulichen wie man das mit eine boolean-Variable lösen kann um sicherzustellen dass eine Methode durchgelaufen ist!

Wie DudePr das dann in sein Programm einbaut sollte ihm überlassen sein


----------



## miffi (7. Dezember 2009)

Alles klar^^

Nur bevor jemand deinen Code 1:1 implementiert, ist es vielleicht nicht blöd, wenn das dabeisteht. Nicht dass es noch unnötig Verletzte gibt 

Gruß
miffi


----------



## zerix (7. Dezember 2009)

@Andibert
Sicherlich wäre es, so wie er es geschildert hat eine Lösung, aber meiner Meinung nach sollte man es anders lösen, da es wahrscheinlich an einem Design-Fehler liegt.

Gruß

Sascha


----------

