Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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); 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.
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
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;
}
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.