Java Primzahlgenerator

Hallo ich habe mir einen Primzahlgenerator geschrieben
der funktioniert soweit auch, nur spuckt er ständig ne 0 aus.
Hat wer ne Idee woran dies liegen kann und ggf. eine wie ich es verhindern kann?

Die Methode mit dem Array mag zwar nicht die schönste sein aber ich brauche unter umständen in dem Programm in welches ich dies einfüge noch das gesammt Array.


Quellkot:
Code:
public class Primzahlgenerator {

               
public static int generate() {

int limit = 100; // Bis zu dieser Zahl wird auf Primzahlen untersucht
long zahl = 2; // Startwert = Die erste Primzahl
int zaehler = 0; // Zählt die gefundenen Primzahlen hoch
long []container = new long[limit/3]; // Speichert die gefundenen Primzahlen
double random;
int high;
int low = 0;
int ausgabe = 0;

while( zahl< limit) {

        boolean primzahl = true;

        for (int l_iLoop = 0; (l_iLoop < zaehler); l_iLoop++){ // Jede natürliche Zahl ist durch Primzahlfaktoren darstellbar

            if (container[l_iLoop]*container[l_iLoop] > zahl)
            break;
            if ((zahl % container [l_iLoop]) == 0)
            primzahl = false; // Wenn kein Rest bleibt wird Primzahl auf false gesetzt
}

    if (primzahl){

            container [zaehler] = zahl; // Primzahl in container speichern...
            zaehler++; // zaehler erhöhen...
}

    zahl = zahl + 1; // nächster Testwert
    
}

    //Random Primzahl Ausgabe
    high = container.length;    //gibt die länge des arrays aus
    random = Math.random() * (high - low) + low; //erzeugt eine zufallszahl zwischen 0 und größe des Arrays
    ausgabe = (int)random; //muss auf int gecastet werden
    
    
return (int)container[ausgabe]; //gibt die entsprechende Stelle des Arrays aus

}
}
 
Kann denn keiner mehr debuggen? Oder geht das mit Java nicht? :D

Zu Beginn der while-Schleife wird der bool primzahl mit true initialisiert, die Schleife darunter wird aber kein einziges mal durchlaufen -> Die 0 bleibt prim. Lösung sollte sein l_iLoop und zaehler mit 1 zu initialisieren. Wobei dann unter Umständen auch die 1 als prim detektiert wird, ergo könnte es sogar notwendig sein die beiden Werte mit 2 zu Beginn zu befüllen.

mfg benediktibk
 
Debuggen und blueJ sind zwei Dinge die sich nicht wirklich mit einander kombinieren lassen -.- und ich bin leider dazu gezwungen dieses Programm zu benutzen.

I_iLoop und zaehler mit 1 bzw 2 zu initialisieren ändert nichts.
Den Gedanken hatte ich auch schon.
Es kommen immer noch fleißig nullen vor.

Ich hatte auch schon die Idee einfach das Programm sich selbst immer wieder wiederholen zu lassen wenn es eine 0 ausgibt aber das kommt mir mehr als unsauber vor und könnte theoretisch zu einem endlosen Programmablauf führen.
 
Das liegt daran, dass es zwischen 0 und 100 nur 25 Primzahlen gibt, dein Array hat aber die Größe 100/3 = 33.Das Array wird zu Beginn mit 33 Nullen "aufgefüllt". Wenn 25 Primzahlen im Array sind, folgt daraus, dass die letzten 8 Stellen Nullen sind. Darum kann es dir passieren, dass bei deiner zufälligen Ausgabe eines Elementes des Arrays eine 0 "ausgewählt wird".

Abhilfe:

Code:
high = container.length;    //gibt die länge des arrays aus
    
    while(true)
    {
        random = Math.random() * (high - low) + low; //erzeugt eine zufallszahl zwischen 0 und größe des Arrays
        if(container[(int)random] != 0)
        {
            break;
        }
    }
    
    ausgabe = (int)random; //muss auf int gecastet werden
 
Zurück
Oben