Problem mit for-Schleife bei der Primzahlberechnung

Status
Nicht offen für weitere Antworten.

ChackZz

Mitglied
Hallo, ich wollte einen kleinen Benchmark selbst in Java schreiben und mal gucken, inwiefern ich das hinkriege. Mit Hilfe eines Buches und Vorlesungsskriptes bin ich nun auch "relativ" weit. Aber ich komm an einer Stelle einfach nicht auf den Fehler:
Code:
/**
 * @(#)JavaPrimeBench.java
 *
 *
 * @author 
 * @version 0.1 2007/10/29
 */

import java.io.*;

public class JavaPrimeBench {
	public static void main(String[] args) 
	throws IOException
	{
		int a; // Startzahl
		int b; // Endzahl
		long startZeit; //Startzeit
		long endZeit; //Endzeit
		
		BufferedReader din = new BufferedReader(
							 new InputStreamReader(System.in));
							 
	System.out.println("Startzahl eingeben (Standard = 0):");
	a = Integer.parseInt(din.readLine()); // a=Eingabe des Benutzers
	System.out.println("Bitte Endzahl geben:");
	b = Integer.parseInt(din.readLine()); // b=Eingabe des Benutzers
	startZeit = System.currentTimeMillis(); //Startzeit speichern
	for (a <= b; a++;) {
		 int anzahlTeiler = 0; // Anzahl der Teiler auf 0 setzen
	   	 for (int teiler = 1; teiler <= a; teiler++) { // Anzahl der Teiler ermitteln
                if (al % teiler == 0) {
                    anzahlTeiler++;
                }
            }
			if (anzahlTeiler == 2) { // Zahl ausgeben, wenn sie genau zwei Teiler hat (eine Primzahl ist)
                System.out.println(a);
            }
        }
    endZeit = System.currentTimeMillis(); //Endzeit speichern
    long nettoZeit;
    nettoZeit = (startZeit-endZeit); //Endzeit von der Startzeit subtrahieren um Laufzeit herauszufinden
   	System.out.println(nettoZeit); //Laufzeit ausgeben
    }
	}

Die Zeile 28 gibt beim Compilieren immer die Fehlermeldung "not a Statement" und ich komm einfacn nicht darauf, warum. Sichtbarkeitsproblem vielleicht? Oder muss das int da rein? (Dann hab ich jedoch Probleme die Benutzereingabe zu realisieren^^) Ansonsten bitte ich die anderen Fehler die sich drin sind, erstmal zu ignorieren, will mich da dann erst selbst reinfummeln :)

Danke
 

nebulo

Bekanntes Mitglied
Das for-Konstrukt von dir funktioniert so nicht!

ForStatement
for ( [ Initialization ] ; [ Expression ] ; [ Update ] ) Statement


oder eben seit 1.5 die iteration über Arrays oder listen.
 

ChackZz

Mitglied
Ich hab jetzt mal die Variable nicht direkt initialisiert sondern eben erst im for.
Dadurch fehlt mir zwar die Benutzereingabe, aber Standard sollte ja eh 0 sein.
Code:
/**
 * @(#)JavaPrimeBench.java
 *
 *
 * @author 
 * @version 0.1 2007/10/29
 */

import java.io.*;

public class JavaPrimeBench {
	public static void main(String[] args) 
	throws IOException
	{
//		int a; // Startzahl
		int b; // Endzahl
		long startZeit; //Startzeit
		long endZeit; //Endzeit
		
		BufferedReader din = new BufferedReader(
							 new InputStreamReader(System.in));
							 
//	System.out.println("Startzahl eingeben (Standard = 0):");
//	a = Integer.parseInt(din.readLine()); // a=Eingabe des Benutzers
	System.out.println("Bitte Endzahl geben: (Das Programm errechnet alle Primzahlen von 0 bis zu ihrer Eingabe, mit Ausnahme der 1)");
	b = Integer.parseInt(din.readLine()); // b=Eingabe des Benutzers
	startZeit = System.currentTimeMillis(); //Startzeit speichern
	for (int a=2; a <= b; a++) { 
		 int anzahlTeiler = 0; // Anzahl der Teiler auf 0 setzen
	   	 for (int teiler = 1; teiler <= a; teiler++) { // Anzahl der Teiler ermitteln
                if (a % teiler == 0) {
                    anzahlTeiler++;
                }
            }
			if (anzahlTeiler == 2) { // Zahl ausgeben, wenn sie genau zwei Teiler hat (eine Primzahl ist)
                System.out.println(a);
            }
        }
    endZeit = System.currentTimeMillis(); //Endzeit speichern
    long nettoZeit;
    nettoZeit = (endZeit-startZeit); //Endzeit von der Startzeit subtrahieren um Laufzeit herauszufinden
    double laufZeit;
    laufZeit = (nettoZeit/1000);
   	System.out.println("Die Laufzeit betrug "+nettoZeit+" Millisekunden, das entspricht "+laufZeit+" Sekunden"); //Laufzeit ausgeben
    }
	}

Derzeit läuft es, wenn auch sehr langsam. Mit meinem Core2Duo dauern die Primzahlen bis 200000 386 Sekunden. Ich vermute mal, das liegt an der Printanweisung, die sehr an der Performance zieht? Eventuell lasse ich mir nochmal was einfallen. Sonstige Tuningvorschläge?

Achja, ein eher nebensächliches Problem. Am ende rechne ich die Millisekunden in Sekunden um,indem ich durch 1000 teile, um die Laufzeit auszugeben. Leider hab ich nach dem Komma immer eine Null, was ja weniger genau ist. Wie bekomme ich es hin, dass auch die Nachkommastellen berücksichtigt und ausgegeben werden=?
 

Wildcard

Top Contributor
Das ist nur deshalb lahm, weil du einen furchtbar miesen Algorithmus verwendest (das println macht natürlich trotzdem was aus...)
 

nebulo

Bekanntes Mitglied
Ich verstehe nicht, was du damit meinst:

Dadurch fehlt mir zwar die Benutzereingabe, aber Standard sollte ja eh 0 sein.

Die Printanweisungen kosten in der Tat ziemlich viel Zeit!

Wegen dem .0 probier mal:

laufZeit = (nettoZeit/1000.0);

Gruß nebulo
 

ChackZz

Mitglied
Joa, in der Tat, habe das System.out.println einfach mal auskommentiert und die Zeitersparnis liegt im Millisekundenbereich.

Naja, für einen ersten Versuch war es ganz nett, ich werde dann mal versuchen, das Ganze mit der Modulo-Methode zu machen.



Danke für die Hilfe :)
 

fehlerfinder

Bekanntes Mitglied
ChackZz hat gesagt.:
Ich hab jetzt mal die Variable nicht direkt initialisiert sondern eben erst im for.
Dadurch fehlt mir zwar die Benutzereingabe, aber Standard sollte ja eh 0 sein.

Es hätte - um dein Problem mit der Initialisierung zu umgehen einfach das Hinzufügen eines Semikolons am Anfang der Klammer gereicht (was ein Gast ja auch gleich als erste Antwort geliefert hat)
Code:
for (; a <= b; a++)
Deine Version ist einfach syntaktisch falsch, denn wenn du dir die Syntax
nebulo hat gesagt.:
ForStatement
for ( [ Initialization ] ; [ Expression ] ; [ Update ] ) Statement
anschaust, ist zwar "Initialization" optional, nicht aber das nachfolgende Semikolon. Daher dein Übersetzungsfehler.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
J Schleife Problem Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S Doppel For Schleife mit Arrays - Problem bei der Ausgabe Java Basics - Anfänger-Themen 4
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
P Problem bei Fakultät mit "for"-Schleife Java Basics - Anfänger-Themen 12
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
S Problem mit for-Schleife Java Basics - Anfänger-Themen 4
D Problem mit Schleife / Newtonverfahren Java Basics - Anfänger-Themen 4
F Problem mit der While schleife und dem Scanner Java Basics - Anfänger-Themen 2
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
M For Schleife Problem Java Basics - Anfänger-Themen 2
S problem bei verschachtelter for-schleife Java Basics - Anfänger-Themen 5
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
F Problem mit for-Schleife Java Basics - Anfänger-Themen 4
L Nummern Generator (mit do-while Schleife) Problem Java Basics - Anfänger-Themen 7
B Problem mit for-Schleife Java Basics - Anfänger-Themen 4
C Problem mit Schleife Java Basics - Anfänger-Themen 3
Killerjo96 Erste Schritte Problem mit dem Sichern einer If Schleife Java Basics - Anfänger-Themen 5
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
K Problem mit der while - Schleife Java Basics - Anfänger-Themen 9
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
M Problem bei Schleife + Methode Java Basics - Anfänger-Themen 2
C Euler'sche Zahl berechnen, Problem bei for-schleife Java Basics - Anfänger-Themen 4
D For Schleife und DrawString - Problem Java Basics - Anfänger-Themen 20
G problem mit while schleife Java Basics - Anfänger-Themen 8
A For-Schleife Problem Java Basics - Anfänger-Themen 11
J Problem - Schleife Java Basics - Anfänger-Themen 16
V Problem mit einer While Schleife Java Basics - Anfänger-Themen 8
S Unverstandenes Problem mit for schleife Java Basics - Anfänger-Themen 2
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 Problem mit For-Schleife Java Basics - Anfänger-Themen 2
F Problem mit einer Schleife Java Basics - Anfänger-Themen 10
A Problem mit vereinfachter For-Schleife Java Basics - Anfänger-Themen 5
O Problem mit For-schleife Java Basics - Anfänger-Themen 3
O Methode - Problem mit Subtraktion in einer while-Schleife Java Basics - Anfänger-Themen 2
A Problem mit BigInteger und Schleife Java Basics - Anfänger-Themen 13
S Problem mit Schleife - Objektwert aendert sich nach erstellung Java Basics - Anfänger-Themen 17
M Problem bei Schleife Java Basics - Anfänger-Themen 28
_SeiA_ Suche Schleife/Algorythmus für ein Problem Java Basics - Anfänger-Themen 3
J FOR-Schleife Problem Java Basics - Anfänger-Themen 10
M Problem mit der For Schleife (else funzt nicht richtig) Java Basics - Anfänger-Themen 10
G Problem mit If und integrierter Schleife Java Basics - Anfänger-Themen 2
J problem mit schleife Java Basics - Anfänger-Themen 31
M Problem bei Do. While schleife Java Basics - Anfänger-Themen 10
S problem mit "for" schleife Java Basics - Anfänger-Themen 12
X Anfänger Problem mit Schleife Java Basics - Anfänger-Themen 3
R Problem mit for-Schleife Java Basics - Anfänger-Themen 6
Z Problem mit Schleife und korrekter Ausgabe: Java Basics - Anfänger-Themen 13
N kleines Problem mit meiner Schleife Java Basics - Anfänger-Themen 8
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
megachucky GUI-Problem in Verbindung mit while-Schleife und Listener Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben