Sieb des Eratosthenes

Neue Frage »

Auf diesen Beitrag antworten »
Prog Sieb des Eratosthenes

Meine Frage:
Hallo,
ich soll das Sieb Des Eratosthenes programmieren.
Es geht um folgende Aufgabenstellung:
Sieb des Eratosthenes:
1. Schreibe alle natürlichen Zahlen von 2 bis zu einer beliebigen Zahl auf.
2. Streiche alle Vielfachen von 2 heraus
3. Gehe zur nächstgrößeren nicht gestrichenen Zahl und streiche alle Vielfachen von ihr heraus
4. Wiederhole 3 so lange, bis du keine Vielfachen streichen konntest.
5. Alle übrig gebliebenen Zahlen sind Primzahlen.
Schreiben Sie eine Klasse Eratosthenes, in der Sie die Methode siebe() implementieren:

Meine Ideen:
Mein Programm dazu sieht folgendermaßen aus:
public class Aristho
{
static void siebe(int[]feld)
{
for(int j=2; j<feld.length;j++)
{
for(int i=2; i<100;i++)
{
feld[j]=feld[j]*i;//Vielfache
feld[j]=0;//Vielfache auf 0 setzen
}
}
//Wenn Feld größer 0 ist, ist es eine Primzahl und soll ausgegeben werden
for(int j=0;j<feld.length;j++)
{
if(feld[j]>0)
{
System.out.println(feld[j]);
}
}
}
public static void main(String[]args)
{
int[] arr=new int[100];
for(int j=0;j<arr.length;j++)
{
arr[j]=j;
}
siebe(arr);
}
}
Leider wird mir immer nur die Zahl 1 angezeigt.
Wo liegt denn hier noch der Fehler?
 
Auf diesen Beitrag antworten »
Karlito

Hallo,

da ich ungern Lösungen präsentiere, habe ich deinen Quelltext kommentiert.

Ich hoffe das hilft dir weiter.

code:
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:
public class Aristho {
	static void siebe(int[] feld) {
		//Wenn du mit 0 beginnst, dann ist es
		//nicht gut hier mit j=2 zu beginnen
		for (int j = 2; j < feld.length; j++) {
			for (int i = 2; i < 100; i++) {
				//Diese Operation weist dem Feld mit dem
				//Index j den Wert des feldes mal i zu
				feld[j] = feld[j] * i;// Vielfache
				//Anschließend überschreibst du hier 
				//das feld einfach mit dem Wert 0
				feld[j] = 0;// Vielfache auf 0 setzen
				//nach dem ersten schritt kommt bereits aus der
				//schleife der Wert 0 für das Feld j heraus
				//dann multiplizierst du wieder mit i -> 0
				//und das ganze knapp 100 mal 
			}
		}
		// Wenn Feld größer 0 ist, ist es eine Primzahl und soll ausgegeben
		// werden
		for (int j = 0; j < feld.length; j++) {
			if (feld[j] > 0) {
				System.out.println(feld[j]);
			}
		}
	}

	public static void main(String[] args) {
		int[] arr = new int[100];
		for (int j = 0; j < arr.length; j++) {
			//Bist du dir sicher dass du hier ab 0 beginnen willst?
			arr[j] = j;
		}
		siebe(arr);
	}
}


VG,

Karlito
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »