Eventuell macht folgendes Probleme...

f=(int) ( (int)(Math.random()*1000*z) % z);

Dabei erzeugt Math.random eine pseudozufällige double-Zahl.

(x*y)%y=x ist natürlich immer der Fall. Klar, wenn man etwas mit y multipliziert und es danach wieder durch y dividiert, kann es keinen Rest geben, solange x ein ganzzahliger Wert ist. (und y natürlich auch)

Bsp: 3,1416*1000=3141,6
Als Rest ergeben sich die Nachkommastellen ab der 4ten,denn:
3141z+0,6z=3141,6 z

Das casten auf (int) hackt da noch ein wenig bei ab, was die Nachkommastellen etwas verfälscht, aber ich denke trotzdem, dass hier das z bei der Implementierung ganz egal ist. ((x*z) %z benutzt man eben um z.B. Nachkommastellen von x zu erhalten)

So, ich hoffe ich hab mich nun hier nicht noch bei irgendwas verhauen^^