Probleme mit Zufallszahlen...

Du wilst die Werte aber schon einspeichern oder?

Code:
public static int [] getRandomArray() {	
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	int zufall = random.nextInt(10);
	return getRandomArray;
}
Diese Methode erzeugt 4 Zufallszahlen, speichert sie nicht und gibt ein unbekanntes Objekt zurück...
Code:
public static int [] getRandomArray() {
        int[] randomArray = new int[4];     // Hier werden die zahlen gespeichert
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	       randomArray[i] =random.nextInt(10);
        }
	return getRandomArray;
}

So wie dus vorher hattest, nämlich dass du den return Befehl schon in der forschleife hattest (Vielleicht Codebeispiel falsch zusammengeschnitten?) kann nicht funktionieren. Du würdest beim ersten Schleifendurchlauf die Methode verlassen. Da der Compiler gerRandomArray aber nicht kennt (wolltest du damit eine rekursive Funktion ausführen? dann hätte es heißen müssen getRandomArray<b>()</b>)

Ich habe das jetzt aus der forschlöeife rausgenommen. Damit macht der zweite Teil der funktion aber keinen Sinn mehr. Nach dem ersten return wird deine Funktion sofort verlassen!
Grüße,
Orbit

Desweiteren darf es in einer Methode nur ein return-Statement geben. Bei Dir sehe ich zwei. Und beim zweiten sagst Du dem armen Compiler noch nicht mal, was er Dir den zurückgeben soll.
Eigentlich kein Problem. Man kann erstens schreiben return; aber dann müsste die Funktion void sein. Dann wird die Funtkion einfach beendet. Und es kann durchaus mehrere returns geben. Zum Beispiel mit bedingten Anweisungen (if(i==) return 5; else return 3);
 
Zuletzt bearbeitet:
Du wilst die Werte aber schon einspeichern oder?

Code:
public static int [] getRandomArray() {	
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	int zufall = random.nextInt(10);
	return getRandomArray;
}
Diese Methode erzeugt 4 Zufallszahlen, speichert sie nicht und gibt ein unbekanntes Objekt zurück...
Eh nein.

Code:
public static int [] getRandomArray() {
        int[] randomArray = new int[4];     // Hier werden die zahlen gespeichert
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	       randomArray[i] =random.nextInt(10);
        }
	return getRandomArray;
}

Ist es wirklich so schwer, ein richtiges return-Statement zu schreiben?
 
Eigentlich kein Problem. Man kann erstens schreiben return; aber dann müsste die Funktion void sein. Dann wird die Funtkion einfach beendet. Und es kann durchaus mehrere returns geben. Zum Beispiel mit bedingten Anweisungen (if(i==) return 5; else return 3);

Ok, die Preisfrage lautet: Wieviele returns werden aufgerufen?
Eins, genau. Darum ging es mir. Ob man jetzt nur eins hinschreibt, oder per if-Abfragen genau eins ausführen lässt, ist egal.
 
@epic_fail:
Hi, Du hast natürlich Recht mit dem, was Du weiter oben geschrieben - nur: ist das nicht mein Code gewesen! Den hatte ich mehr oder weniger unbesehen übernommen und ja auch nicht getestet, wie ich schrieb ... ;-)
Ok, hätte mir natürlich trozdem auffallen müssen :D
Gruß
Klaus
 
Zuletzt bearbeitet:
öh, und wieviele werden hier aufgerufen?
Code:
public static int [] getRandomArray() {
	
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	       int zufall = random.nextInt(10);
	       return getRandomArray;
        }
	
	int[] neu = new int[array];
	for(i = 0; i < neu; i++){ 
	neu [i] = i+1;}	
	return 
	
}
Schreib den Code mal in Assembler um;-)
Oder denk dir die forschleife als ein Konstrukt us whileschleifen welche aus einem Sprungbefehl und einer ifanweisung besteht.
Dann steht da nix anderes als if bla return blupp;
nicht dass das sinn machen würde:)
Aber bis auf den fehler dass beide male irgendwie nicht das geforderte zurückgegeben wird (einmal nichts und einmal, hmm, nix bekanntes) ist die Reihenfolge der returns richtig gesetzt (syntaktisch, nicht semantisch!).

EDIT:
natürlich meinte ich mit
Code:
public static int [] getRandomArray() {
        int[] randomArray = new int[4];     // Hier werden die zahlen gespeichert
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	       randomArray[i] =random.nextInt(10);
        }
	return getRandomArray;
}
eher
Code:
public static int [] getRandomArray() {
        int[] randomArray = new int[4];     // Hier werden die zahlen gespeichert
	Random random = new Random(10);	
	for ( i=0 ; i <4 ; i++ ){
	       randomArray[i] =random.nextInt(10);
        }
	return randomArray;
}
 
Zuletzt bearbeitet:
Aber bis auf den fehler dass beide male irgendwie nicht das geforderte zurückgegeben wird (einmal nichts und einmal, hmm, nix bekanntes) ist die Reihenfolge der returns richtig gesetzt (syntaktisch, nicht semantisch!).
Nein, ist es eben nicht. Das zweite return ist unreachable code. Und damit falsch. Es gibt nicht eine if-Abfrage und somit ist nur ein return zulässig.

Und die Umwandlung einer for-Schleife in eine while mit if-Bedingungen würde mich echt mal interessieren... Und was das Umschreiben in Assembler bringen soll, ebenso.
 
Nein. Das erste return IST bedingt. und somit erkennt der Compiler nur, wenn er sieht dass die Schleife in jedem Fall einmal durchlaufen wird () nur dann wird das erste return nämlich erreicht, dass das zweite unreachable code ist.

Und die Umwandlung einer for-Schleife in eine while mit if-Bedingungen würde mich echt mal interessieren... Und was das Umschreiben in Assembler bringen soll, ebenso.
Genau, damit du siehst dass es bedingt ist!
So und hier mal eine forschleife als Konstrukt (mit sprungmarke wie in assembler:)
Code:
int i = 0;
int max = 20;

for: tueIrgendwas
     i++;
     falls max<=i springe zu end_for;
     springe zu for
end_for: ende des beispiels.
Ich habe absichtlich auf assemblersyntax verzichtet. Aber das Prinzip sollte klar sein oder?

Nun folgendes:
Code:
void seltsam(){
for(int i = 0; i>10; i++){   // wird NIE ausgeführt; die 10 kann auch ne Variable sein, womit der Compiler dies NICHT sehen kann
     return 22;
}
tueIrgendwas();
return 345;
}
 
Zuletzt bearbeitet:
Aye, Du hast natürlich recht!
Dass das erste return in einer for-Schleife stand, hab ich völlig ignoriert ;) Sorry.

edit ;)

Code:
void seltsam(){
for(int i = 0; i>10; i++){   // wird NIE ausgeführt; die 10 kann auch ne Variable sein, womit der Compiler dies NICHT sehen kann
     return 22;
}
tueIrgendwas();
return 345;
}
Fällt Dir was auf ;)
 
Zuletzt bearbeitet:
War auch ein wenig schlecht sichtbar, weil der Code in der forschleife nicht eingerückt war.
@proXXic
Genau deshalb sollte man sich an solche Konventionen halten!
Immer mit Einrücken arbeiten und eine forschleife am besten so beenden, dass man das Semikolon am ende sieht, also in einer neuen Zeile.
Wenn du 500 Zeilen Quelltext lesen musst, ist es extrem zeitaufwendig, sich das ende einer Schleife erst suchen zu müssen!
also aus
Code:
	for ( i=0 ; i <4 ; i++ ){
	int zufall = random.nextInt(10);
	return getRandomArray;}
(Achtung semantisch + syntaktisch unbrauchbar:))
mache demnächst
Code:
for ( i=0 ; i <4 ; i++ ){
	int zufall = random.nextInt(10);
	return getRandomArray;
}
um Missverständnissen vorzubeugen....
Gruß,
Orbit

edit

Code:

void seltsam(){
for(int i = 0; i>10; i++){ // wird NIE ausgeführt; die 10 kann auch ne Variable sein, womit der Compiler dies NICHT sehen kann
return 22;
}
tueIrgendwas();
return 345;
}

Fällt Dir was auf
Ähm, dass ich void angebe aber int zurückgebe?
 
Zuletzt bearbeitet:
Zurück