C# Primzahlen ausgeben - Problem!
Hey! Mein Problem ist dieses: Ich programmiere gerade in C# und möchte ein Programm schreiben, dass mir die ersten 100 Primzahlen berechnet und dann ausgibt. Nur habe ich das Problem, dass ich alles geschreiben habe, aber die Konsole gibt nichts aus. Was ist mein Fehler?
Hier mein Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Übung 6 int i, Zähler; Zähler = 0;
Console.WriteLine("*** Die ersten 100 Primzahlen ***\n");
Console.Write("2" + "\t");
for (i = 3; Zähler == 99; i+=2)
{
int j = 2;
while (i % j != 0 && j <= i - 1)
{
j++;
}
if (j == i)
{
Console.Write(i + "\t");
Zähler ++;
}
}
Console.ReadLine();
}
}
}
Danke im Voraus! :)
3 Antworten
Dein Code ist bissi komisch.
In Variablen solltest Du keine Umlaute verwenden, dass kann zu sehr komischen Fehlern führen. Wenn Du den Fehler in Deinem Programmcode finden willst, dann lass Dir an verschiedenen Stellen mal Ausgeben, was in den Variablen drinsteht
Ich hab Dir mal kurz eine Variante geschrieben, wie man das lösen kann ohne z.B. die 2 von Hand noch in die Ausgabe der Primzahlen zu setzen
namespace Primzahlenausgabe
{
class Zahl
{
// prüfe ob die Zahl eine Primzahl ist
// true bei Primzahl, sonst false
public bool IsPrime(int value)
{
if (value <= 1)
return false;
else
{
if (value > 2)
{
for (int i = 2; i <= (value / 2) + 1; i++)
if (value % i == 0)
return false;
}
}
return true;
}
}
class Program
{
static void Main(string[] args)
{
// Anzahl der gefundenen Primzahlen
int counter = 0;
// Anzahl der auszugebenden Primzahlen
int anzPrimzahlen = 50;
// Objekt Zahl erzeugen
Zahl zahl = new Zahl();
Console.WriteLine("*** Ausgabe der ersten " + anzPrimzahlen + " Primzahlen ***");
Console.WriteLine();
for (int i = 0; counter < anzPrimzahlen; i++)
{
// Ausgabe nur dann, wenn die Zahl eine Primzahl ist
if (zahl.IsPrime(i))
{
counter++;
// Zeilenumbruch nach 10 Zahlen
if (counter % 10 != 0)
{
// schreibe in einer Zeile
Console.Write(i + "\t");
}else
{
// setze Zeilenumbruch
Console.Write(i + "\n");
}
}
}
Console.Read();
}
}
}
Debugge doch einfach mal...
Cursor in die "for-Zeile" setzen, F9 drücken um einen Breakpoint zu setzen, dann F5 um zu starten und dann kannst du mit F10 jede Anweisung Schritt für Schritt ausführen. Und wenn du wissen willst was gerade in den Variablen ist, einfach Maus drüber halten.
Dann findest du deinen Fehler wesentlich schneller weil du direkt sehen kannst was er so macht (dann bist du auch nicht auf die Konsolenausgabe angewiesen um die Ausführung nachzuvollziehen)
Mir kommt es ungewöhnlich vor, dass du 3 verschiedene Zähler hast. Muss das wirklich sein? Der deutsche Umlaut "ä" wirkt in den Augen eines Programmierers sehr ungewohnt. Zähler setzt du auf 0. Die Schleife durchläufst du, solange er gleich 99 ist.
Danke für deine Antwort! Habs gerade gemerkt mit dem Zähler. Habs auf Zähler <= 99 umgeändert und jetzt funktionierts! :)