Primzahlen bis 1000 ausgeben

Siid

Neues Mitglied
Hallo,
ich bringe mir gerade Java bei und habe mir die Aufgabe gestellt, ein Programm alle Primzahlen bis 1000 herausfinden und aufzählen zu lassen:
Java:
public class Primzahlen
{
	public static void main(String[] args)
	{
		int e=2;	//i wird durch e geteilt
		int r=1;	//r für den Rest wenn man eine Primzahl durch e teilt
		System.out.println("Folgendes ist eine Liste aller Primzahlen bis 1000:");
		for(int i=0; i<=1000; i++)	//Schleife zur überprüfung aller Zahlen bis 1000
		{
			while(r!=0 && e<i)	//Schleife zur überprüfung einer einzelnen Zahl
			{
					r=i%e;	//Solange r!=0 i = Primzahl
					e++;		//Hochzählen von dem Teiler e
			}
			if(r!=0)	//Bedingung zur Ausgabe einer Zahl als Primzahl 
			{		//wenn r=0 ist ein Teilungsvorgang aufgegangen => keine Primzahl
				System.out.println(i);
			}
		}
	}
}
Dieses Programm gibt mir jedoch einfach alle Zahlen bis 1000 aus.
Irgendwie schein der neue Wert für "r" nicht den Weg aus der while-Schleife heraus zu finden, sodass für die letzte if-Schleife immer gilt r=1.
Kann das sein?

Grüße
Siid
 

faetzminator

Gesperrter Benutzer
Setze e und r einfach in der äusseren Schleife :) Ansonsten beinhalten sie natürlich immer noch den Wert des letzten Schleifendurchgangs.
 

Robert Zenz

Top Contributor
Ohne Ahnung zu haben, e und r muessen auszerhalb der while Schleide zurueckgesetzt werden damit man fuer jede Zahl einen neuen Zustand verwendet und nicht mit den Werten von der vorherigen Zahl weiterrechnet.

Oder alternativ verschiebt man die Deklaration von r und e in die for Schleife, damit hat man bei jedem Durchlauf einen neuen Zustand.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Wenn man wissen will, wie ein Algorithmus verändert werden muss um ein Problem zu lösen, dann ist der Ansatz doch immer gleich:

Am Anfang steht immer, dass man erst einmal den Algorithmus selbst verstehen muss. Also was wird denn da gemacht?

Wenn man das aber auf Basis eines gegebenen Codes verstehen will, dann hilft oft ein sogenanntes Refactoring. Das sind dann Maßnahmen, die Code lesbarer machen sollen. Und da gibt es zwei wichtige Praktiken:
a) Umbenennen - wie benennen Bezeichner um. Bei den Variablen i, e und r muss man sich ja fast zusammen reißen, um nicht paar böse Worte zu verlieren.
b) Aufteilen - wieso den Code nicht aufteilen?

Also Umbenennen ... was ist den i? Das ist die zu prüfende zahl, also "zahl" oder "zuPruefendeZahl" oder ähnliches.

r - da könnte man sich anschauen, was man a bekommt, aber da hat man einen Kommentar ... das ist also der "rest".
e - da haben wir auch einen Kommentar, der es uns einfacher macht ... also ist das dann z.B. der "teiler".

Beim Aufteilen ist die Frage: Was machen wir überhaupt? Wir haben eine Schleife über alle Zahlen, eine Prüfung auf Primzahl und dann die Ausgabe... Also können wir es aufteilen ... dann haben wir ein:
Java:
for (int zahl = 2; zahl <= 1000; zahl++) {
    if (isPrime(zahl)) {
        System.out.println("Primzahl: " + zahl);
    }
}

Und die innere Prüfung wird dann auch einfach zu:
Java:
public static boolean isPrime(int zahl){
    int teiler = 2;
    int rest = 1;
    while (rest != 0 && teiler < zahl) {
        rest = zahl % teiler;
        teiler++;
    }
    return rest != 0;
}

Wobei man dann auch schauen muss ... wieso wird Rest auf 1 gesetzt? Und wieso wird erst geprüft und dann etwas berechnet? Das könnte eine do while Schleife besser sein. Dann braucht man auch keine Initialisierung bei der Variable rest mehr.
 

White_Fox

Top Contributor
Bei solchen Problemen gehe ich immer mal gerne mit dem Debugger zeilenweise durch, und schaue an welcher Stelle welche Variable nicht mehr das enthält, was ich eigentlich erwarten würde.

Und noch etwas: Es ist immer sehr hilfreich, sein Programm in kleine Methoden aufzuteilen, die beschreiben, welcher Einzelschritt gerade erledigt wird. Deine komplette while-Schleife könntest du in einer Methode bool isNumAPrimeNum(int num){} packen.
Sowas erspart dir die ganzen Kommentare, dafür kannst du deinen Quellcode als eine Art Anleitung lesen. Und, wichtig: mit so einer Programmierweise kannst du relativ komplexe Dinge in mehrere, dafür aber einfachere Dinge zerlegen. Ich lehne mich mal etwas aus dem Fenster und behaupte, daß es dir wahrscheinlich weitaus einfacher fällt, für nur eine einzige Zahl herauszufinden ob es sich um eine Primzahl handelt oder nicht.
 

White_Fox

Top Contributor
Edit: Wie ich jetzt erst sehe wurde dir der Tipp bereits gegeben.

Naja, Tipps die man mehrmals bekommt sind vielleicht wirklich nicht so schlecht.
 

Anfaengerin

Aktives Mitglied
Ich habe jetzt eine andere Lösung gefunden. Danke!

for (int i = 1; i <= 100; i++)
{ boolean prim = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) { prim = false; break; } }
if (prim) { System.out.println(i); } }
 

mihe7

Top Contributor
Ich habe jetzt eine andere Lösung gefunden. Danke!
Das entspricht der Lösung, die @KonradN gezeigt hat - nur in komprimierter Form.

Erstmal anständig formatieren:
Java:
for (int i = 1; i <= 100; i++) {
    boolean prim = true; 
    for (int j = 2; j < i; j++) {   
        if (i % j == 0) {
            prim = false;
            break;
         }
    } 
    if (prim) {
        System.out.println(i);
    }
}

Was passiert in der Schleife? Du prüft, ob i eine Primzahl ist und falls ja, gibst Du sie aus. D. h.

Java:
for (int i = 1; i <= 100; i++) {
    if (isPrime(i)) {
        System.out.println(i);
    }
}

Der Code in der Schleife ist dabei einfach in eine andere Methode ausgelagert worden.
Java:
private boolean isPrime(int i) {
    boolean prim = true; 
    for (int j = 2; j < i; j++) {   
        if (i % j == 0) {
            prim = false;
            break;
         }
    } 
    return prim;
}

Das "Ausbrechen" aus der Schleife vermeidet man in der Regel, stattdessen schreibt man
Java:
private boolean isPrime(int i) {
    boolean prim = true; 
    for (int j = 2; j < i && prime; j++) {   
        if (i % j == 0) {
            prim = false;
         }
    } 
    return prim;
}
Der Code von Konrad verwendet einfach eine while- statt eine for-Schleife.

Übrigens: die Prüfung ist äußerst ineffizient, denn wir haben es mit einer Multiplikation zu tun - es macht somit wenig Sinn bis i zu prüfen. Aber das ist ein anderes Thema.
 

KonradN

Super-Moderator
Mitarbeiter
Wie muss e und r in der äußeren Schleife gesetzt werden? Arbeite gerade an demselben Problem.
Der große Vorteil bei der Programmierung ist doch, dass man es einfach probieren kann. Wenn die Aussage / Hilfestellung ist:
Setze e und r einfach in der äusseren Schleife :) Ansonsten beinhalten sie natürlich immer noch den Wert des letzten Schleifendurchgangs.
dann kannst Du einfach einmal die Variablen verschieben, sprich die Zeilen 5 und 6 verschiebt man einfach in die äußere Schleife. Und dann probierst Du einfach, ob es geht...

Das aber nur, wenn Du an genau dem Code aus dem ersten Post festhalten willst. Ansonsten gibt es doch genug funktionierenden Code in den einzelnen Antworten, den Du nutzen könntest.

Oder wenn Du fragen hast: Stelle die Fragen so ausführlich, dass wir Dein Problem verstehen und Dir sinnvoll helfen können, Danke.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
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
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
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
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 berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
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
kulturfenster Primzahlen berechnen 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
H Ungerade Zahlen ausgeben von 1 bis 1000 Java Basics - Anfänger-Themen 8
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
H Erste Schritte Ergebniss soll kleiner als 1000 sein Java Basics - Anfänger-Themen 4
D Problem mit Nachkommastellen <%=Double.valueOf(35/1000)%> ergibt 0.0? Java Basics - Anfänger-Themen 3
K For Schleife: Ausgabe des 1000-ten und 1001 Wertes Java Basics - Anfänger-Themen 6
M Java sagt 1000/3600 = 0? Java Basics - Anfänger-Themen 4
N Array aus JCheckBox? 1000 if's UPDATE: Spaltennamen auslesen Java Basics - Anfänger-Themen 12
J JButton ArrayList erstellen und auf JLabel ausgeben. Java Basics - Anfänger-Themen 9
J Breite und Höhe aller Monitore ausgeben. Java Basics - Anfänger-Themen 10
G JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
G JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
H Minimum und Maximum ausgeben lassen Java Basics - Anfänger-Themen 7
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
Tommilee Char ausgeben Java Basics - Anfänger-Themen 5
K Geldbetrag in Euro + Cents ausgeben Java Basics - Anfänger-Themen 24
M geschachtelte for-Schleifen - Einmaleins ausgeben Java Basics - Anfänger-Themen 3
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben