Unbekanntes Problem

juudass

Mitglied
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();
        }
        
        
    }
 
Zuletzt bearbeitet von einem Moderator:
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)
 
Alternativ nutzt man bei sowas eine While-Schleife.

@Xhelp: sowas hab ich in der Firma in dem alten Code schon zuhauf gesehen und jedesmal war nicht genug Wand zum zerschmettern da 😉
 
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.
 
Zuletzt bearbeitet:
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.
 

Zurück
Oben