Hallo Leute, ich hab hier eine Methode (aus einem Quelltext), die einen Teil einer Fakultätsberechnung bestimmt.
Nur verstehe ich sie nicht ganz. Ich würde mich freuen, wenn ihr mir dazu einige Erklärungen geben könntet???
Also:
Code:
public static long fakul(int x) {
if (x==0) return 1; //wenn x=0, dann soll eine 1 zurückgegeben werden
else {
long erg=1; //wenn nicht, dann wird das Ergebnis auf 1 gesetzt (erg=1)
if (x<0) x=-x; //wenn x kleiner als 0 ist, dann wird aus der Zahl ein Betrag gemacht, damit die Zahl nicht negativ ist
for (; x>=1; x--) {
f=f*x;
if (f<0) erg=0;
}
}
return f;
Frage zu Zeile7: Warum steht da in der Klammer als erstes ein Strichpunkt? Was bedeutet das? Bedeutet das, dass in der main-Methode ja der Wert x festgelegt wird und nicht in der Methode?
Frage zu Zeile8: Ich habe nirgendwo in der Methode ein f deklariert oder initialisiert, wie kann ich dann f=f*x schreiben?
Ich würde mich freuen, wenn ich schnell eine Antwort bekommen würde.
Eine for-Schleife besteht aus drei Teilen, Dem Initializer, der Bedingung und der Anweisung die nach jedem Schleifendurchlauf ausgeführt wird. Dabei kann jede Bedingung weg gelassen werden, was bei deiner Schleife der Fall ist. Man kann also schreiben:
Code:
int i = 0;
for(; i < 10; i++){
}
//oder
for(int x = 0;;x++){
}
//oder
int x = 0;
for(;;x++){
}
//oder
for(;;){
}
f ist sicher als Attribut deiner Klasse deklariert, schau mal nach....
Frage zu Zeile7: Warum steht da in der Klammer als erstes ein Strichpunkt? Was bedeutet das? Bedeutet das, dass in der main-Methode ja der Wert x festgelegt wird und nicht in der Methode
Ok, dass mit der for-Schleife hätte ich nun kapiert, aber das mit f.......
Stimmt ich habe ja folgende main-Methode:
Code:
public static void main (String [] args) {
int x=12;
long f=fakul(x);
if (f==0) System.out.println("Zahl x ist zu groß!");
else System.out.println("Fakultät von "+x+": "+f);
}
}
Ok, das f wurde in der main-Methode deklariert, aber ich verstehe nicht wie. Bedeutet das, dass f in der Methode fakul(x) als long deklariert wurde?? Oder hat long f=fakul(x) noch mehr Bedeutung? Vor allen Dingen, was für ein Wert hat f? Ist f=0, weil es nicht initialisiert wurde?
Poste mal den ganzen Code der Klasse. Das f in main deklariert wurde hat nichts mit dem f in fakul zu tun. Das f in fakul kann nur ein statisches Attribut der Klasse sein. Steht da nirgends private static int f = 0; ?
public class Fakultaet {
public static long fakul(int x) {
if (x==0) return 1;
else {
long erg=1;
if (x<0) x=-x;
for (;x>=1;x--) {
f=f*x;
if (f<0) erg=0;
}
}
return f;
}
public static BigInteger fakulBig(int x) {
if (x<0) x=-x;
BigInteger erg=BigInteger.valueOf(1);
if (x==0) return erg;
for (;x>=1;x--)
erg=erg.multiply(BigInteger.valueOf(x));
return erg;
}
public static long fakulRekursiv(int x) {
if (x==0) return 1;
long f=1;
else {
if (x<0) x=-x;
f=x*fakulRekursiv(x-1);
if (f>0) return f;
else return 0;
}
}
public static void main (String [] args) {
int x=12;
long f=fakul(x);
if (f==0) System.out.println("Zahl x ist zu groß!");
else System.out.println("Fakultät von "+x+":"+f);
}
}
Tja, das ist ja das Problem. Der Code ist von unserem Lehrer und dient zur Vorbereitung unserer Klassenarbeit.......Ich bin gerade dabei diesen Code zu verstehen, oder besser gesagt ihn verstehen zu wollen........Was fehlt denn in dem Code ? Was ist mit diesem f? Ich werd noch wahnsinnig, irgend wo muss es doch herkommen, wenn nicht von der main-Methode, woher dann wenn es sonst auch nicht initialisiert worden ist?
Na super...............sind es viele Fehler, oder hat er nur etwas entscheidenes vergessen? Dann werd ich wohl meinem Lehrer mal eine E-Mail schicken müssen, muss mir nur die richtigen Wörter einfallen lassen......
ich glaub du hast noch nie wirklich schlimmen Code gesehen :autsch: . Ich kenn leute ... was die fabrizieren ... ich frag mich, wie die ihren job bekommen haben.
wenn man wirklich unleserlichen, aber doch compilierbaren, und nett anzuschauenden code sehen will, welche nicht grad java ist, sonder C, der soll mal unter www.ioccc.org nachlesen
manche stellen sind ja noch halbwegs verständlich, aber andere uha :autsch:
#edit 1:
ich hab mal folgenden code
Code:
public static long fakulRekursiv(int x) {
if (x==0) return 1;
long f=1;
else {
if (x<0) x=-x;
f=x*fakulRekursiv(x-1);
if (f>0) return f;
else return 0;
}
}
etwas leserlich gestaltet:
Code:
public static long fakulRekursiv(int x)
{
if (x==0)
return 1;
long f=1; // fällt was auf? ==> WTF?!? es soll mich einer eines besseren belehren, wenn SOWAS möglich ist :)
else
{
if (x<0)
x=-x;
f=x*fakulRekursiv(x-1);
if (f>0)
return f;
else
return 0;
}
}
:autsch: als ich krieg da augenkrebs und hirnflackern, wenn ich mir das ansehe. gut, es gibt pseudocode, aber selbst der kann besser von einem laien erstellt werden!