Primzahlen bis 100 addieren

Binibi

Mitglied
Hallo!

Ich möchte gerne programmieren lernen, daher hab ich mir das Buch "Programmieren lernen für Dummies" geholt. Leider scheitere ich schon in Kapitel 11 bei der Aufgabe alle Primzahlen von 2 bis 100 zu addieren.

In der 1. If-Bedingung setzt er den Wert auf false, wenn er falsch ist, bzw. auf true, wenn er richtig ist. Das passt. Aber sobald er in die 2. if-Bedingung rein geht, setzt er das automatisch auf true. Warum?

1634153760381.png

Kann mir wer auf die Sprünge helfen?
 
Code bitte immer als Text in Code-Tags, nicht als Bild 😉


Deine Bedingung ist isPrimzahl = true, und = ist eine Zuweisung, isPrimzahl wird also true zugewiesen.

Vergleiche mit true oder false sind generell überflüssig, und du kannst in dem Fall einfach if(isPrimzahl) schreiben.
 
Code bitte immer als Text in Code-Tags, nicht als Bild 😉
Mach ich das nächste Mal!
Deine Bedingung ist isPrimzahl = true, und = ist eine Zuweisung, isPrimzahl wird also true zugewiesen.

Vergleiche mit true oder false sind generell überflüssig, und du kannst in dem Fall einfach if(isPrimzahl) schreiben.
Das erklärt schon mal, warum es da immer wieder auf true gesetzt wird.
Aber wenn ich if(isPrimzahl) schreibe, dann rechnet er nur die ersten beiden Primzahlen zusammen und danach keine mehr..
 
Mach es mal So 🙂

Java:
  public static void main(String[] args) {
        
        int i, j;
        boolean isPrime;
        isPrime = true;
        for (i = 2; i < 100; i++) {
            for (j = 3; j < i - 1; j++) {
                
                if ((i % j) == 0) {

                    isPrime = false;
                }
            }
            if (isPrime == true) {
                System.out.println(i + " nächste Primzahl ");
            } else {
                isPrime = true;
            
            }
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Mach es mal So 🙂

public static void main(String[] args) {

int i, j;
boolean isPrime;
isPrime = true;
for (i = 2; i < 100; i++) {
for (j = 3; j < i - 1; j++) {

if ((i % j) == 0) {

isPrime = false;
}
}
if (isPrime == true) {
System.out.println(i + " nächste Primzahl ");
} else {
isPrime = true;

}

Fertiger Code ist hier nicht gern gesehen 😉



Wenn eine Zahl keine Primzahl ist, wird isPrimzahl ja auf false gesetzte – wird es bei der nächsten Primzahl denn wieder auf true gesetzt?
Er war ja auch noch nicht fertig 😉 damit kann man sich lediglich die Primzahlen bis n ausgeben. Für das Addieren muss man noch extra etwas einbauen.
 
Das Problem war, dass Du die Variable isPrimzahl nur bei der Deklaration auf true gesetzt hast. Damit wird die einmal auf false gesetzt und dann nie wieder erneut gesetzt. Sprich: Die Variable kannst Du einfach in die äußere for Schleife stecken.
 
Der schönere Weg wäre dabei, den Scope für isPrimzahl passender zu wählen. Aktuell "existiert" für alle Primzahlen zusammen, eigentlich ist sie ja aber nur für eine einzelne gedacht -> die Variable in der for-schleife deklarieren und das Problem löst sich auch 🙂
 
Warum eigentlich? Muss ich anstatt 5 Zeilen Code erst zwei Seiten Prosa schreiben? Welchen Sinn hat das? Auch im Hinblick auf Stackoverflow...
Weil an fertigem Code niemand etwas lernt (wie man hier wieder sieht), der fertige Code oft schlecht ist (wie man hier wieder sieht) und sinnvolle Hilfe damit auch oftmals schwieriger wird (wie man hier z.T. sieht).

Ein Forum lässt sich nicht mit Stackoverflow vergleichen, das sind völlig unterschiedliche Konzepte.


Er war ja auch noch nicht fertig 😉 damit kann man sich lediglich die Primzahlen bis n ausgeben. Für das Addieren muss man noch extra etwas einbauen.
Gilt gleichermaßen für (den meisten) fast-fertigen Code 🙂
 
Ha, mit dem Else-Teil funktioniert es auch.. im nachhinein ja auch logisch, woher soll das wieder auf wahr gesetzt werden, klar. Danke!
Hmm, wo hast du das wie eingebaut? Das hört sich etwas dubios an 🙂

Ansonsten ist mir noch aufgefallen, dass du da im Bildschirmfoto bei if (isPrimzahl = true) nur ein = hast oder täuscht das?
 
Weil an fertigem Code niemand etwas lernt (wie man hier wieder sieht), der fertige Code oft schlecht ist
Man kann da durchaus geteilter Meinung sein. Angeblich schlechter Code korrigiert sich idR von selbst, insofern solche Antworten von der Moderation nicht systematisch unterdrückt werden. Vielleicht scheut sich die Moderation auch davor, gute von schlechten Antworten zu unterscheiden. In jedem schlummert ja ein Genie, stimmt's? 🙂
 
Hmm, wo hast du das wie eingebaut? Das hört sich etwas dubios an 🙂
Bei der 2. If-Bedingung.
If (isPrimzahl)
{ Zahl += i ;}
Else
{ isPrimzahl = true; }

Macht ja Sinn, wenn man so darüber nachdenkt. Ich dachte, wenn ich das oben deklariere, dass er das dann bei erneuter Ausführung der Schleife wieder berücksichtigt, aber klar , woher auch. Wieder was gelernt.
Ansonsten ist mir noch aufgefallen, dass du da im Bildschirmfoto bei if (isPrimzahl = true) nur ein = hast oder täuscht das?
Ja, bei == hat er nur bis zum ersten false gerechnet, da dachte ich, dass es vielleicht = sein muss. Aber jetzt weiß ich es besser!
 

Neue Themen


Zurück
Oben