Kontrollstrukturen Ergebnis gesucht

Pyrius

Mitglied
Hallo Profis,

studiere Wirtschaftsinformatik im ersten Semester. Und bald stehen Prüfungen an. Auch in Progammierung.
In einer alten Klausur habe ich untenstehende Aufgabe gefunden. Leider komme ich nicht auf das angegebene Ergebnis. Bin kurz vor dem verzweifeln. Vielleicht ist auch die Lösung falsch? Und ich liege richtig?!

Gegeben ist:

Java:
private static int code = -1;
private int count = 0;
private int[] zahlen = {10,100,1000};
public int gebeAus(int zahl)
{
if (Zahl > 0)
{
for (int i=0;i<zahlen.length;i++)
{
if (zahl > zahlen[i])
continue;
count = i + 1;
break;
}
}
return count;
}

a) Was geben die folgenden Funktionsaufrufe zurück?

GebeAus(41); Angebliche Lösung: 1 Meine Lösung: 2
GebeAus(-5); Angebliche Lösung: 0 Meine Lösung: 0
GebeAus(1003); Angebliche Lösung: 1 Meine Lösung: 3

Welche Lösung ist richtig? Vielleicht lässt sich aus
meinen Ergebnissen rauslesen was ich falsch mache!?
???:L

Vielen Dank im Voraus!
Gruß

Florian
 
Zuletzt bearbeitet von einem Moderator:
Ich komme auf diese Ergebnisse:

GebeAus(41); Lösung: 2 <-- 41 ist größer als 10 [0] aber kleiner als 100[1] count= i[1] + 1 somit = 2
GebeAus(-5); Lösung: 0 <--- ist kleiner als die vorgaben (zahlen)
GebeAus(1003); Lösung: 0 <--- ist größer als die vorgaben (zahlen)
 
Ist dein Code direkt so gegeben ? oder meinst du es ist die Signatur vorgegeben ? Weil ich finde den äußerst komisch.

Java:
private static int code = -1;
private int count = 0;
private int[] zahlen = {10,100,1000};

	public int gebeAus(int zahl)
	{
//Bist du dir da wirklich sicher, mit der Instanzvariable Count?  Für mich scheint hier eine lokale Variable besser.
		int localCount = 0;
		
		if (Zahl > 0)
		{
			for (int i = 0; i < zahlen.length; i++)
			{
				// So brauchst du nicht extra continoue zu verwenden
				if (zahl <= zahlen[i])
				{
					localCount = i + 1;
					//break; 
				}
			}
		}
		return localCount;
	}
Generell kannst du durch das break nur maximal 1 rausbekommen, da jedoch die Variable bei dir eine Instanzvariable ist, wird nach jedem Aufruf der Wert der zuletzt ausgegeben wurde behalten.
 
Zuletzt bearbeitet:
Hallo Florian,

bin zwar kein Profi aber ich kann ja mal probieren es dir zu erklären...
Angenommen du übergibst als Parameter die 41:
41 > 0! Deswegen wird die for-schleife erreicht..
41 > zahlen ..da i = 0 ist wird hier mit der zahl des Arrays mit Index 0 verglichen und das ist die 10
41 > 10!
count = i + 1 ..also count = 0 + 1
41 ist kleiner als 100, deswegen wird count nicht mehr geändert! also bleibt als return-value die 1 stehen

der 2. Fall ist denke ich mal klar...
und im 3. komme ich auf die gleiche Lösung wie du

Lg
Lukas
 
count ist zu Anfang 0.

Mit dieser Erkenntnis wird die Schleife für die Zahl 41 genau ZWEIMAL ausgeführt. Der Zähler i ist zu diesem Zeitpunkt 1, weshalb
Code:
count = i + 1
2 ergibt

Bei Zahl = -5 wird wie du richtig erkannt hast gar nicht die Schleife ausgeführt

Bei zahl 1003 wird die Schleife dreimal ausgeführt. Bei jedem Mal wird continue ausgeführt. Nach dieser Logik sollte count nie erhöhrt werden...???:L

EDIT: ZUSAMMENFASSUNG:
41-->2
-5 --> 0
1003 -->0


EDIT: OK, wenn ich schin nur falsche Antworten liefere, kann ich doich wenigstens mal den Code anstänsig formatieren, das werd ich hoffentlich noch schaffen 😀

Java:
public int gebeAus(int zahl) {
	if (Zahl > 0) {
		for (int i=0;i<zahlen.length;i++) {
			if (zahl > zahlen[i]) continue;
			count = i + 1;
			break;
		}
	}
	return count;
}
 
Zuletzt bearbeitet:
Aber
Java:
if (zahl > 0)
		{
		for (int i=0;i<zahlen.length;i++)
		{
		if (zahl > zahlen[i])
		continue;
		count = i + 1;
		//count = i;
		break;

er kommt nie rein!
1003 > 1000 somit continue!
 
41 > 10!
count = i + 1 ..also count = 0 + 1
41 ist kleiner als 100, deswegen wird count nicht mehr geändert! also bleibt als return-value die 1 stehen
count wird nur genau einmal gesetzt, dahinter steht break und Ende,
count ist nie 1, wird nicht geändert, sondern von 0 auf 2 gesetzt

mal abgesehen davon dass ein Instanzatttribut in verschiedenen Aufrufen der Methode geändert werden könnte
 
Hab mir eure Antworten angeschaut. Hab nochmal den code durchdacht.

Für mich scheint die antwort von selim am logischsten

GebeAus(41); Lösung: 2 <-- 41 ist größer als 10 [0] aber kleiner als 100[1] count= i[1] + 1 somit = 2
GebeAus(-5); Lösung: 0 <--- ist kleiner als die vorgaben (zahlen), die for schleife wird nicht erreicht. Count steht immernoch auf 0.
GebeAus(1003); Lösung: 0 <--- ist größer als die vorgaben (zahlen), deshalb immer continue. Count steht immernoch auf 0.
 

Zurück
Oben