Primzahllücken

Studi21

Mitglied
Hallo, ich habe vor einem Monat mit meinem Wirtschaftsinformatik-Studium angefangen. Leider bin ich an der Aufgabe echt am verzeifeln...
Kann man die Aufgabe ohne Arrays lösen?

1634153078240.png 1634153123198.png

UND So "weit" bin ich leider erst gekommen
1634153260535.png
 
M

Mart

Gast
du kannst sie mithilfe der fibonacci reihenfolge lösen wo du kein array brauchst
das erzeugt dir zumindest prim zahlen aber nicht alle

https://codeofgeeks.com/prime-fibonacci/

hier ist der gleiche weg genommen worden aber dieses mal mit allen primzahlen ... musst dich halt rein lesen
 

Studi21

Mitglied
du kannst sie mithilfe der fibonacci reihenfolge lösen wo du kein array brauchst
das erzeugt dir zumindest prim zahlen aber nicht alle

https://codeofgeeks.com/prime-fibonacci/

hier ist der gleiche weg genommen worden aber dieses mal mit allen primzahlen ... musst dich halt rein lesen
Vielen Dank! leider hat mir dass noch nicht wirklich eine Antwort auf meine Frage gebeben aber ich werde mich mal weiter reinlesen!
 
K

kneitzel

Gast
Das Kernproblem, das ich hier sehe: Dein Code ist ja schon jetzt - obwohl da noch viel zu unübersichtlich. Und Du hast vermutlich den Überblick schon längst verloren!

Daher die eindringliche Bitte: Unterteile Deinen Code! Teile und Herrsche ist das wichtigste Prinzip in der Software Entwicklung.

Und dann spielst Du es erst einmal mit Stift und Papier durch. Kannst Du das? Wenn ja: Was machst Du genau?
Du sollst N Primzahl Lücken aufschreiben.
Die erste / aktuelle Primzahl ist die 2.
Hast Du schon N Primzahlen aufgeschrieben? Nein?
-> Nächste Primzahl finden, Differenz aufschreiben, aktuelle Primzahl ist die neue Primzahl
Und es geht zwei Zeilen weiter oben weiter.

Und das ist ein erster Code, den kannst Du 1;1 in Java umsetzen. Dann hast Du halt eine Methode: getNextPrime(currentPrime). Da kannst Du Dir dann überlegen, was Du da machst. Und das schreibst Du auch wieder so auf. Und fang nicht mit komplexen Dingen an. Alles was komplex ist, ist erst einmal eine Methode!

Und schon hast Du einen Code, der - so Du vernünftige Bezeichner gewählt hast - leicht überschaubar und direkt lesbar ist!
 

Studi21

Mitglied
Dankeschön! Ich dachte, dass mein Code schon relativ einfach und übersichtlich wäre haha. Leider hatte ich bis jetzt erst 4 Java Stunden, weshalb ich nicht genau weiß, wie ich das geschriebene von Ihnen in einen Code umsetzen kann.
 
K

kneitzel

Gast
Ok, dann ist das mit den Methoden evtl. noch etwas früh. Aber vom Prinzip her hast du das schon etwas mit der main Methode.

Eine Methode hat eine Rückgabe von einem bestimmten Typ oder void für keine Rückgabe. Und es können Parameter angegeben werden.

Also z.B. könntest du einen Teil Deines Codes in eine Methode packen: istPrimzahl:
Java:
static boolean istPrimzahl(int zahl) {
  // hier dann die Prüfung durchführen und mit return true; oder return false; das Ergebnis zurück geben.
}

Kannst dir ja mal überlegen, ob du dies etwas probieren willst.
 

mihe7

Top Contributor
Code:
primzahl := 2
altePrimzahl := primzahl
gefunden := 1
so lange gefunden < 10, wiederhole
    primzahl := nächste Primzahl > altePrimzahl
    erhöhe gefunden um 1
    differenz := primzahl - altePrimzahl
    altePrimzahl := primzahl
    ausgabe(differenz)
 
K

kneitzel

Gast
Um einmal aufzuzeigen, wie so eine Lösung mit der Unterteilung aussehen könnte:

Es fängt an mit der Aufgabe selbst. Die ist relativ einfach zu starten:

Java:
    public static final int N = 10;

    public static void main(String[] args) {
        printPimeGaps(N);
    }

Nun sollen fehlt uns die Methode printPrimeGaps:
Java:
    private static void printPimeGaps(final int numberOfPrimeGaps) {
        int currentPrime = 2;
        int shownPrimeGaps = 0;

        while (shownPrimeGaps < numberOfPrimeGaps) {
            int nextPrime = calcNextPrime(currentPrime);
            int gap = nextPrime - currentPrime;
            System.out.println(currentPrime + " naechste Primzahl: " + nextPrime + " Lücke: " + gap);
            currentPrime = nextPrime;
            shownPrimeGaps++;
        }
    }

Gefällt mir schon nicht richtig. Aber das liegt einfach daran, dass die Möglichkeiten, die Du kennst, einfach noch zu gering sind. Die Methode macht zu viel mit zu vielen lokalen Variablen. Da wäre eine Instanz einer Klasse deutlich schöner. Aber so wird es erst einmal gehen denke ich mal.

Nun fehlt die Methode calcNextPrime:
Java:
    private static int calcNextPrime(final int prime) {
        int current = prime + 1;
        while (!isPrime(current)); {
            current++;
        }

        return current;
    }

Die letzte Methode überlasse ich nun Dir. Das solltest Du ja hin kriegen, da Du den notwendigen Code schon prinzipiell hast:

Java:
    private static boolean isPrime(final int check) {
        // ... Deine Implementation mit return false; und return true; zur Rückgabe.
    }
 

Studi21

Mitglied
Um einmal aufzuzeigen, wie so eine Lösung mit der Unterteilung aussehen könnte:

Es fängt an mit der Aufgabe selbst. Die ist relativ einfach zu starten:

Java:
    public static final int N = 10;

    public static void main(String[] args) {
        printPimeGaps(N);
    }

Nun sollen fehlt uns die Methode printPrimeGaps:
Java:
    private static void printPimeGaps(final int numberOfPrimeGaps) {
        int currentPrime = 2;
        int shownPrimeGaps = 0;

        while (shownPrimeGaps < numberOfPrimeGaps) {
            int nextPrime = calcNextPrime(currentPrime);
            int gap = nextPrime - currentPrime;
            System.out.println(currentPrime + " naechste Primzahl: " + nextPrime + " Lücke: " + gap);
            currentPrime = nextPrime;
            shownPrimeGaps++;
        }
    }

Gefällt mir schon nicht richtig. Aber das liegt einfach daran, dass die Möglichkeiten, die Du kennst, einfach noch zu gering sind. Die Methode macht zu viel mit zu vielen lokalen Variablen. Da wäre eine Instanz einer Klasse deutlich schöner. Aber so wird es erst einmal gehen denke ich mal.

Nun fehlt die Methode calcNextPrime:
Java:
    private static int calcNextPrime(final int prime) {
        int current = prime + 1;
        while (!isPrime(current)); {
            current++;
        }

        return current;
    }

Die letzte Methode überlasse ich nun Dir. Das solltest Du ja hin kriegen, da Du den notwendigen Code schon prinzipiell hast:

Java:
    private static boolean isPrime(final int check) {
        // ... Deine Implementation mit return false; und return true; zur Rückgabe.
    }
Dankeschön!!! Leider sieht es bei mir nach langen Versuchen immer noch nicht so aus, wie auf dem Ausgabe-Bild zu sehen. Trotzdem Danke für die BEmühung!
 

Neue Themen


Oben