Primzahlen berechnen

Status
Nicht offen für weitere Antworten.

kulturfenster

Bekanntes Mitglied
Hallo,
Ich habe eine kleine Klasse geschrieben, die Primzahlen bis zu einem bestimmten n berechnen soll. Ich habe dafür eine Methode verwendet, wobei stets das Vielfache einer Primzahl aus der Liste gelöscht wird, damit schlussendlich nur noch die Primzahlen übrig bleiben.

hier mein Versuch:
Code:
import java.util.TreeSet;
import java.util.Set;


public class PrimeNumber {

	private TreeSet<Integer> set;
	private int n;
	
	public PrimeNumber(int n)
	{
		set = new TreeSet<Integer>();
		this.n = n;
		fill();
	}
	
	public void fill()
	{
		for(int i = 1; i <= n; i++)
			set.add(i);
	}
	
	public void getPrimes()
	{
		for(int j = 2; j<Math.sqrt(n); j++)
		{
			for(int z: set)
			{
				if(! (z % j == 0)) set.remove(z);
			}
		}
	}
	
	public void printPrimes()
	{
		for(int z: set)
			System.out.println(z);
	}
	
	public static void main(String[] args)
	{
		PrimeNumber p = new PrimeNumber(1000);
		p.getPrimes();
		p.printPrimes();
	}
}
Nun bekomme ich folgende Fehlermeldung:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.TreeMap$PrivateEntryIterator.nextEntry(Unknown Source)
at java.util.TreeMap$KeyIterator.next(Unknown Source)
at kap21.PrimeNumber.getPrimes(PrimeNumber.java:29)
at kap21.PrimeNumber.main(PrimeNumber.java:47)
Da ich mit Sets noch wenig Erfahrung habe, kann ich mit der Fehlermeldung leider wenig anfangen. Kann mir jemand einen Hinweis geben?

Vielen Dank!
 
S

SlaterB

Gast
du kannst nicht ein Set durchlaufen und Elemente entfernen,
arbeite mit einem Iterator und dessen remove-Operation

Code:
static void filter(Collection c) {
    for (Iterator i = c.iterator(); i.hasNext(); )
        if (!cond(i.next()))
            i.remove();
}
 

kulturfenster

Bekanntes Mitglied
hmmm, ???:L
Ich hab versucht, deinen Hinweis auf meinen Code anzuwenden:
Code:
for(int j = 2; j < Math.sqrt(n); j++) {
			for (Iterator i = set.iterator(); i.hasNext(); ) {
		        if (! (i.next() % j == 0))
		            i.remove(); 
			}
		}
Nun bekomme ich folgenden Kompilier-Fehler: "The operator % is undefined for the argument types Object, int." Wieso ist das so? Mein Set besteht doch aus Integer-Werten. Objekte kommen ja gar nicht vor. Oder muss ich den Iterator irgendwie casten?
 

dieta

Top Contributor
Veruch's mal so:
Code:
for(int j = 2; j < Math.sqrt(n); j++) {
         for (Iterator i = set.iterator(); i.hasNext(); ) {
              if (! ((int)i.next() % j == 0))
                  i.remove();
         }
      }
 

Marco13

Top Contributor
Code:
for (Iterator i = set.iterator(); i.hasNext(); ) 
{
    Integer integer = i.next();
    int n = integer.intValue();
    if (n % j == 0) i.remove();
}
Ähm... ob jetzt ==0 oder !=0 überlass' ich dir...
 

kulturfenster

Bekanntes Mitglied
Integer integer = i.next();
gibt leider die selbe Fehlermeldung.

das hier sollte aber gehen:
Code:
for (Iterator<Integer> i = set.iterator(); i.hasNext(); ) {
	             //System.out.println(i.next()); // zu Testzwecken
	             //System.out.println("J: " + j);
	        	 if (! (i.next() % j == 0)) 
	                  i.remove();
	         }

Komischerweise löscht mir das aber nun ALLE Elemente aus dem Set. Löscht die next() schon jeweils ein Element? Anders kann ich mir diesen Umstand fast nicht erklären...
 
S

SlaterB

Gast
dass es am i.next nicht liegt, ist leicht zu beweisen:

if (! (i.next() % j == 0)) {
System.out.println("remove");
i.remove();
} else {
System.out.println("kein remove");
}

das i.next() kann man sich schlecht anschauen, wenn du es direkt in der Bedingung ausliest,
speichere es vorher in einer Variablen, dann kannst du die Berechnung genau verfolgen und ausgeben
(was ist die Zahl, was kommt beim % raus?)
 

setsuna9

Mitglied
Hallo,

beachte zweite Bedingung!

Code:
for (Iterator<Integer> e = set.iterator(); e.hasNext();)
{
	int z = e.next();
	if (z % j == 0 && z != j)
		e.remove(); 
}
 

kulturfenster

Bekanntes Mitglied
hmm, auch mit der 2. Bedingung klappts leider nicht.

Ich hab mir nun aber das Resultat der Bedingung angeschaut und verstehe nun noch weniger:

Code:
int x = i.next() % j;
	        	 System.out.println(i.next()+ " % " + j + " = " +x);

Output:
2 % 2 = 1
5 % 2 = 0
8 % 2 = 1
11 % 2 = 0
14 % 2 = 1
17 % 2 = 0
usw

Das ist doch falsch oder? % gibt doch den Rest einer ganzzahligen Dvision zurück. 5 = 2*2+1, also 5%2 = 1. Oder liege ich falsch?
 

mephi

Bekanntes Mitglied
das liegt daran dass du 2 mal i.next() aufrufst. damit nimmst du dir ja immer das nächste element in der liste, wenn du also ein element mehrmals benutzen willst musst du es in einer anderen variable speichern

also zB
Code:
int zahl = i.next();
int x = zahl % j;
               System.out.println(zahl+ " % " + j + " = " +x);
 

kulturfenster

Bekanntes Mitglied
super, alles klar! Vielen Dank allen Beteiligten!

Code:
public void getPrimes()
	{
		set.remove(1); // falls die Zahl 1 vorkommt, wird sie gelöscht.
		for(int j = 2; j <= Math.sqrt(n); j++) {
	         for (Iterator<Integer> i = set.iterator(); i.hasNext(); ) 
	         {
	        	 int next = i.next();
	        	 if (next % j == 0 && next != j)
	                  i.remove();
	         }
	    } 
		
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
B Primzahlen berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
B Primzahlen bis 100 addieren Java Basics - Anfänger-Themen 16
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
S Primzahlen in Array ausgeben Java Basics - Anfänger-Themen 14
M Array auf Primzahlen prüfen Java Basics - Anfänger-Themen 7
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
P Primzahl mit Angabe der höchsten Primzahl und Angabe der Anzahl von Primzahlen bis 100 Java Basics - Anfänger-Themen 8
Java The Hutt Primzahlen - die ersten 100 Java Basics - Anfänger-Themen 17
N Erste Schritte Primzahlen-ArrayIndexOutOfBounds Java Basics - Anfänger-Themen 23
R Primzahlen Zähler Programm / Benachbarte Primzahlen Java Basics - Anfänger-Themen 30
D Klassen Primzahlen überprüfen Java Basics - Anfänger-Themen 3
I Primzahlen Java Basics - Anfänger-Themen 17
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
R primzahlen im array Java Basics - Anfänger-Themen 33
M Primzahlen, nur jede 2te ausgeben Java Basics - Anfänger-Themen 11
T Primzahlen Fehler Java Basics - Anfänger-Themen 4
K Primzahlen Java Basics - Anfänger-Themen 6
L Primzahlen im Array ausgeben Java Basics - Anfänger-Themen 3
P Primzahlen Java Basics - Anfänger-Themen 3
A Methoden Primzahlen erstellen von 1 bis 100-Codeprobleme Java Basics - Anfänger-Themen 2
H Variablenverfolgung - Primzahlen Java Basics - Anfänger-Themen 7
G Primzahlen Java Basics - Anfänger-Themen 6
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
S Primzahlen bis 1000 ausgeben Java Basics - Anfänger-Themen 3
K Methoden Primzahlen Java Basics - Anfänger-Themen 33
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
F Primzahlen in Zahlenblöcken ausgeben Java Basics - Anfänger-Themen 9
M Primzahlen - es werden alle Nicht-Primzahlen ausgegeben Java Basics - Anfänger-Themen 5
M primzahlen Java Basics - Anfänger-Themen 4
S Programm zu Ermittlung von Primzahlen Java Basics - Anfänger-Themen 14
E Programm zum Primzahlen ausgeben-Fehler Java Basics - Anfänger-Themen 12
X Primzahlen Java Basics - Anfänger-Themen 7
S Primzahlen Java Basics - Anfänger-Themen 12
B Programmierobjekt - Primzahlen Java Basics - Anfänger-Themen 2
D Primzahlen ausgeben. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
N Primzahlen Java Basics - Anfänger-Themen 5
I Primzahlen check, String prüfen lassen. Java Basics - Anfänger-Themen 6
A OOP Programm zum bestimmen von Primzahlen, OutofBoundsException Java Basics - Anfänger-Themen 10
apple987123 Primzahlen Java Basics - Anfänger-Themen 12
A Primzahlen: ein paar offene Fragen Java Basics - Anfänger-Themen 2
T Primzahlen Java Basics - Anfänger-Themen 6
G Primzahlen Java Basics - Anfänger-Themen 18
B Primzahlen Algorithmus - wo ist der Fehler ? Java Basics - Anfänger-Themen 2
E Primzahlen Java Basics - Anfänger-Themen 5
B Primzahlen mit Array errechnen! Java Basics - Anfänger-Themen 13
H Miller Rabin Test Primzahlen werden teilweise nicht gefunden Java Basics - Anfänger-Themen 5
M Wer kann mir bei Primzahlen helfen ? Java Basics - Anfänger-Themen 4
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
D Primzahlen Java Basics - Anfänger-Themen 4
N Zerlegung in Primzahlen Java Basics - Anfänger-Themen 7
F Programm Primzahlen Java Basics - Anfänger-Themen 5
J Primzahlen errechnen.ArrayLists abgleichen Java Basics - Anfänger-Themen 2
M Primzahlen Java Basics - Anfänger-Themen 6
C Primzahlen Java Basics - Anfänger-Themen 7
C Primzahlen Java Basics - Anfänger-Themen 2
S Primzahlen Java Basics - Anfänger-Themen 49
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
laxla123 Quersumme berechnen Java Basics - Anfänger-Themen 1
I For Schleife Summe berechnen Java Basics - Anfänger-Themen 13
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
A Berechnen Moor Nachbarschaft Java Basics - Anfänger-Themen 5
E Geburtstag im Schaltjahr berechnen Java Basics - Anfänger-Themen 24
Lion.King Schaltjahr berechnen Java Basics - Anfänger-Themen 31
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
I Zuschläge berechnen Java Basics - Anfänger-Themen 15
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
L Präfix berechnen Java Basics - Anfänger-Themen 33
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
I Potenz berechnen mit for-Schleife Java Basics - Anfänger-Themen 3
A Standardabweichung in Java berechnen Java Basics - Anfänger-Themen 10
H Gesamtabweichung mit Array berechnen Java Basics - Anfänger-Themen 2
G Java Rabatt berechnen Java Basics - Anfänger-Themen 8
V Rückgeld berechnen Java Basics - Anfänger-Themen 6
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
L Max, min, Summe und Durchschnitt berechnen Java Basics - Anfänger-Themen 4
L Anhalteweg berechnen Java Basics - Anfänger-Themen 6
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
M Quadratwurzel berechnen Java Basics - Anfänger-Themen 8
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Abschreibungsplan berechnen Java Basics - Anfänger-Themen 23
V Gehalt berechnen in Java Java Basics - Anfänger-Themen 6
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
L Anzahl der benachbarten Minen berechnen und setzen Java Basics - Anfänger-Themen 15
J Array Speicherplatz berechnen Java Basics - Anfänger-Themen 35

Ähnliche Java Themen

Neue Themen


Oben