"Primzahlen-prüfer" programmier (C#)?
Das Programm wurde in c# programmiert. Ich wollte ein etwas programmieren, das die Startzahl (endlos) immer um 1 addiert und prüft ob diese Zahl eine Primzahl ist oder nicht. Habe den Quellcode unter diesem Text geschrieben, aufm Display wird aber nur "ist keine Primzahl" angezeigt. Wüsste jemand wie man dieses Promblem fixen könnte?
static void Main(string[] args) {
int zahl = 1;
int zähler = 0;
while (true)
{
for (int prüfer = 1; prüfer <= zahl; prüfer++)
{
if (zahl % prüfer == 0)
{
zähler++;
}
}
if (zähler == 2)
{
Console.WriteLine(zahl + " ist Primzahl");
}
else
{
Console.WriteLine(zahl + " ist keine Primzahl");
}
zahl++;
}
}
3 Antworten
Du setzt den zähler nie zurück auf 0. So wird er bei Folgeiterationen auch nicht auf den Wert 2 kommen.
Du solltest die Zeile
int zähler = 0;
innerhalb der while-Schleife haben... und zwar direkt vor dem "for..."
In deinem Fall wird bei jeder Iteration von while auf dieselbe Variable zähler zugegriffen. Das heißt auch, sie merkt sich den Wert vonn vorherigen Iterationen.
Bei der Zahl 1 hat sie den Wert 1. Bei der Zahl 2 wird die 1 noch einmal mit der Anzahl an ganzen Teilern für 2 aufgerechnet.
Wenn die Variable innerhalb des Schleifenkörpers steht, wird sie mit jeder Iteration neu angelegt. In jeder Iteration startet sie beim Wert 0.
in der Variablen "zähler" steht nach der for-Schleife duch wieviele Zahlen "zahl" teilbar war... wenn die nächste Zahl geprüft wird... also beim nächsten Durchlauf der while-schleife, muss "zähler" demnach wieder auf 0 gesetzt werden, sonst zählt man einfach bei der vorherigen Zahl weiter
Die for Schleife wird direkt verlassen. Prüfer und Zahl sind 1.
Stimmt, hätten Sie einen Vorschlag wie man das lösen könnte?
Nein, die Antwort stimmt nicht. Eine Schleife wird so lange ausgeführt, bis die Bedingung im Schleifenkopf nicht mehr zutrifft. Da die Aussage 1 <= 1 wahr ist, hast du beim Wert 1 einen Durchlauf.
Wow. Hat funktioniert! Könnten Sie mir bitte erklären was für einen Unterschied das gemacht hat? Danke!