Zähler für Vergleichsoperationen

PotatoHead

Grünschnabel
Hallo,
ich würde mich freuen, wenn mir jmd. bei folgendem Problem helfen würde:

Ich habe diese Methode:

Code:
private static boolean contains(int[] S, int c) {
	boolean res = false;
	int zähler = 0;
		for (int i = 0; i < S.length; i++, zähler++) {
			if (S[i] == c) {
				System.out.println(zähler);
				res = true;
				break;
			}
		}	
	return res;

Diese Methode wird aufgerufen, indem ein bsp.weise mit 50k Stellen Zufallsgenerierter Array erzeugt wird (int[] S) und der Frage ob die Zahl 20000 darin ist (int c).

Mein Problem ist, dass ich in der contains Methode und der "for" Schleife die Vergleiche zählen will, bis die Zahl gefunden wurde.

Nun habe ich zwar schon die unterstrichene Zeile eingefügt, aber diese zählt ja nur die "for" Vergleiche, nicht die "if" Vergleiche.
Wie zähl ich den noch die "if" Vergleiche?
Hab da einfach keine Idee zu...


Würde mich über Hilfe freuen.
Danke schon mal.

mfg...

p.s.: Was ich noch gerne wissen würde, wie rufe ich den die Methode von oben öfters auf, ohne jedes mal "Klasse".contains("generiereArray[hier50000]", 20000) schreiben zu müssen?
 

Dario Linsky

Erfahrenes Mitglied
Hi,

bei jedem Schleifendurchlauf wird doch auch die Verzweigungsanweisung ausgeführt. Die Anzahl der ausgeführten If-Anweisungen ist also identisch mit der Anzahl der Schleifendurchläufe. Auch wenn du die Schleife vorher abbrichst.

Oder was meintest du genau?

Grüße, D.
 

danielm

Erfahrenes Mitglied
Hallo,
Nun habe ich zwar schon die unterstrichene Zeile eingefügt, aber diese zählt ja nur die "for" Vergleiche, nicht die "if" Vergleiche.
Wie zähl ich den noch die "if" Vergleiche?
Also die Laufvaribale i und zähler sind immer gleich. D.h. die Variable zähler kannst du dir ohne hin schonmal sparen.

So und jetzt zu deiner Frage, die versteh ich erstmal gar nicht... Du willst zählen wie oft verglichen werden musste bis die Zahl gefunden wurde? Na das steht doch in deiner Laufvariable i?!

p.s.: Was ich noch gerne wissen würde, wie rufe ich den die Methode von oben öfters auf, ohne jedes mal "Klasse".contains("generiereArray[hier50000]", 20000) schreiben zu müssen?

for(int i = 0; i < WIEOFTSOLLICH, i++) {
klasse.contains(erstelleArray(5000), zahlDieGesuchtWird);
}
 

PotatoHead

Grünschnabel
Holla,
also:
...bei jedem Schleifendurchlauf wird doch auch die Verzweigungsanweisung ausgeführt. Die Anzahl der ausgeführten If-Anweisungen ist also identisch mit der Anzahl der Schleifendurchläufe. Auch wenn du die Schleife vorher abbrichst...
...So und jetzt zu deiner Frage, die versteh ich erstmal gar nicht... Du willst zählen wie oft verglichen werden musste bis die Zahl gefunden wurde? Na das steht doch in deiner Laufvariable i?!...

Ja, das habe ich schon gemeint. Da ich aber alle Vergleichsoperationen zählen muss, dachte ich, dass man beide einzeln zählen muss.
Da könnte ich doch dann einfach die Laufvariable bei der Ausgabe verdoppeln und zack habe ich schon beide Vergleiche gezählt?! Da ja bei jedem Schleifendurchlauf auch ein Vergleich in der if Abfrage durchgeführt wird? = also insgesamt 2 vergleiche pro Durchlauf?

Und danke für den mehrmaligen Aufruf Tipp; hab da mal wieder den Walb vor lautern Bäumen nicht gesehen :rolleyes: