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.
Ich möchte einen Array mit Zufallszahlen erstellen, von denen jeden unterschiedlich ist. Dafür erstelle ich einen Array mit Zufallszahlen, vergleiche sie, und falls es gleiche gibt, wird der vorgang einfach wiederholt. jedoch wird bei der Zeile "rand = (int) (Math.random()*10000);" folgende Fehlermeldung ausgegeben:
"java.lang.StackOverflowError:
null (in java.util.Random)"
Ich konnte mit einen Stopmarker herausfinden, daß es beim ersten ausführen nicht zum fehler kommt. Hat jemand eine Ahnung was falsch ist?
Java:
public void Zufallsschlüssel_erstellen()
{
// put your code here
int[] DEF;
x = 0;
a = true;
for (; x <= 1000; )
{
rand = (int) (Math.random()*10000);
Test[x] = rand;
x++;
rand = 0;
}
x = 0;
for ( ; x <= 1000; )
{
int y = 0;
for(; y <= 1000 ;)
{
if(Test[x]==Test[y])
{
a = true;
}
y++;
}
x++;
}
if (a == true)
{
a = false;
Zufallsschlüssel_erstellen();
}
}
Du setzt ja jedes mal a auf true. Weil 1. am anfang ziemlich viele 0len drin sind und 2. mindestens 2 Zahlen sind immer gleich (die Zahl wird auch mit sich selber vergliechen).
Aber mal ganz was anderes: wer hat dir beigebracht sowas zu schreiben? oO Die for Schleifen sind ja ziemlich daneben:
Java:
for (int x=0;x<1000;x++) {
...
}
Dann kann man auch erkennen, was du da versuchst zu machen.
Außerdem werden Variablen (Test) klein geschrieben (bzw. in camelCase)
Der StackOverflowError wird durch den erneuten Methodenaufruf erzeugt.
Ist eine riesen grosse Endlosschleife, wenn ich nicht was übersehe.
Lässt man den weg erhält man ein Array mit 1001 zufälligen Zahlen.
Statt Math.random ist Random.nextInt viel bequemer. Außerdem eignet sich für sowas ein Set anstatt einem Array, weil da doppelte Werte "automatisch" rausfliegen:
Java:
Random r = new Random();
Set<Integer> set = new HashSet<Integer>();
final int size = 1000;
while(set.size() < size) {
set.add(r.nextInt(10000));
}
//und falls man dann ein Array haben will:
int[] array = new int[size];
Iterator<Integer> it = set.iterator();
for(int i = 0; i < size; i++) {
array[i] = it.next();
}
Übrigens: Variablen- und Methodennamen schreibt man in Java klein.