Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Java Primzahlgenerator

Diskussion: Java Primzahlgenerator im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo ich habe mir einen Primzahlgenerator geschrieben der funktioniert soweit auch, nur spuckt er ständig ne 0 aus. Hat ...

Like Tree3Likes
  • 2 Post By Darkslide
  • 1 Post By GrafZahl

Antwort
Alt 12.09.11, 13:37   #1 (permalink)
 
Registriert seit: 10.05.08
FrozenSun Leistung: Facit NTK
FrozenSun eine Nachricht über ICQ schicken
Likes: 0
Standard Java Primzahlgenerator

Anzeige

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

}
}
FrozenSun ist offline   Mit Zitat antworten
Alt 13.09.11, 19:12   #2 (permalink)
 
Benutzerbild von benediktibk
 
Registriert seit: 03.05.07
benediktibk Leistung: 8086benediktibk Leistung: 8086
Likes: 50
Standard

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

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
benediktibk ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 13.09.11, 19:22   #3 (permalink)
Senior Member
 
Benutzerbild von odigo
 
Registriert seit: 25.12.04
odigo Leistung: 8086odigo Leistung: 8086
odigo eine Nachricht über ICQ schicken
Likes: 54
Standard

Zitat:
Zitat von benediktibk Beitrag anzeigen
Kann denn keiner mehr debuggen? Oder geht das mit Java nicht?
Und wie das geht. Sogar Breakpoints mit Condition* sind möglich. Manche machen sich das Leben aber lieber schwerer als es ist


*Der Debugger hält erst wenn eine Variable einen bestimmten Wert hat.

Geändert von odigo (13.09.11 um 19:25 Uhr)
odigo ist offline   Mit Zitat antworten
Alt 13.09.11, 20:51   #4 (permalink)
Themenstarter
 
Registriert seit: 10.05.08
FrozenSun Leistung: Facit NTK
FrozenSun eine Nachricht über ICQ schicken
Likes: 0
Standard

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.
FrozenSun ist offline   Mit Zitat antworten
Alt 13.09.11, 21:06   #5 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 21
Standard

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
Tarantoga and FrozenSun like this.
Darkslide ist offline   Mit Zitat antworten
Alt 13.09.11, 21:16   #6 (permalink)
Themenstarter
 
Registriert seit: 10.05.08
FrozenSun Leistung: Facit NTK
FrozenSun eine Nachricht über ICQ schicken
Likes: 0
Standard

Danke, funktioniert jetzt.
FrozenSun ist offline   Mit Zitat antworten
Alt 13.09.11, 21:38   #7 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

Zitat:
Zitat von FrozenSun Beitrag anzeigen
Debuggen und blueJ sind zwei Dinge die sich nicht wirklich mit einander kombinieren lassen -.- und ich bin leider dazu gezwungen dieses Programm zu benutzen.
balzert-geschädigt?
Darkslide likes this.
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 14.09.11, 12:02   #8 (permalink)
Themenstarter
 
Registriert seit: 10.05.08
FrozenSun Leistung: Facit NTK
FrozenSun eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
balzert-geschädigt?
Kölling geschädigt
FrozenSun ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Java Primzahlgenerator
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Java-Quellcode auf mehrere class/java-Files aufsplitten Indi Code Kitchen 7 07.07.10 14:00
Java Ide Greenberet Code Kitchen 13 14.02.06 23:47
Java und JCE Schlaflos Code Kitchen 0 13.09.04 11:25
JAVA! gibts soziale java fachleute? yakuza Code Kitchen 4 03.05.04 00:53
Java und Java script paya Code Kitchen 2 29.05.03 09:37


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61