Primzahl

timmec

Mitglied
Hey, habe folgenden Skript und soll mit einem Kommandozeilenbefehl ausgeben können, ob es sich um eine Primzahl handel, oder nicht. Aber es klappt nicht.
Java:
public class PrimalityTest {
   public static void main(String[] args) {
     int t = Integer.parseInt(args[0]);
     int counter;
     boolean prim;

     for(int number = 2; number <= t; number++) {
       prim = true;
       for(counter = 2; counter <= (number/2); counter++) {
         if (t % counter == 0) {
           prim = false; System.out.println("Keine Primzahl");
           break;
         }
       }
     }
     if (prim = true) {
       System.out.println("Eine Primzahl");
     }
   }
}
Danke
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Aber es klappt nicht.

"es klappt nicht" ist keine Fehlerbeschreibung.
Was klappt nicht? Was erwartest du die für eine Ausgabe (mit welcher Eingabe) und welche Ausgabe bekommst du stattdessen?
(Bitte in Zukunft eine präzisere Beschreibung des Problems :))

Ein Problem ist sofort ersichtlich: Bei deiner letzten if-Bedingung machst du eine Zuweisung keinen Vergleich!
"=" bedeutet etwas anderes als "==" ;)
 

strußi

Top Contributor
moin
1. code-tags verwenden (das symbol links der diskette, also nicht der pfeil ^^)
2. nur wenig whitespace
3. der vergleich auf boolean == true ist blödsinn, weil if schon ein true erwartet
also ist der false-fall gleich dem else
Java:
public class PrimalityTest {

    public static void main(String[] args) {
        new PrimalityTest();
        int firstArg =0;
        if( args.length >0){
            try {
                firstArg = Integer.parseInt(args[0]);
            } catch (NumberFormatException e) {
                System.err.println("Argument" + args[0] + " must be an integer.");
                System.exit(1);
            }
        }
      
        int counter;
        boolean prim =false;

        for( int number = 2; number <= firstArg; number++){
            prim = true;
            for(counter = 2; counter <= (number/2); counter++){
                if(firstArg % counter == 0){
                    prim = false;
                    break;
                }
            }
        }

        if( prim) {
            System.out.println("Eine Primzahl");
        } else{
            System.out.println("Keine Primzahl");
        }
    }
}

ausführen mit Argument von der Konsole
D:\pt>java PrimalityTest 2
Eine Primzahl

D:\pt>
 

timmec

Mitglied
Mein Problem ist die Ausgabe. Bei der Eingabe von 3,5,7, 17,19 kommt die gewünschte Ausgabe von " Ist Primzahl", bei anderen Werten kommt die Ausgabe von Keine Primzahl, und das je öfter, desto höher der eingegebene Wert. Zudem steht am Ende "ist Primzahl". also bsp . Keine Primzahl...Keine Primzahl, Ist Primzahl
 

Thanathan

Mitglied
Wie Jose schon schrieb ist prim = true eine Zuweisung und kein Vergleich. Daher gilt für diesen Ausdruck immer true und somit wird "Eine Primzahl" natürlich auch hinter jeder Zahl angefügt.

"Keine Primzahl" kommt öfters, da es in jedem for-Durchlauf (mit counter als Zählvariable) neu geschrieben wird. Du versuchst zwar mit "break" zu stoppen, sobald ein Teiler gefunden wird, allerdings stoppt "break" immer nur die aktuelle Sequenz (hier also die if-Abfrage), die for-Schleife läuft hingegen weiter.
Pack das break einfach hinter die if-Abfrage und teste da sowas wie if(prim==false) break;
(Da es hier nur eine Anweisung in der if-Abfrage gibt, spannt diese keine eigene Sequenz auf und break beendet stattdessen wie gewünscht die for-Schleife)
 

Joose

Top Contributor
"Keine Primzahl" kommt öfters, da es in jedem for-Durchlauf (mit counter als Zählvariable) neu geschrieben wird. Du versuchst zwar mit "break" zu stoppen, sobald ein Teiler gefunden wird, allerdings stoppt "break" immer nur die aktuelle Sequenz (hier also die if-Abfrage), die for-Schleife läuft hingegen weiter.

Falsch, das break stoppt die innere for-Schleife! Würde es das break hinter die if-Abfrage geben dann bräucht er keine innere Schleife mehr da diese sowieso nur 1x durchlaufen werden würde.
Aber da er eben 2 verschachtelte Schleifen hat wird die innere immer wieder von neuen angestupst ;)

Er müsste der äußeren Schleife ein Label geben und diese beim break angeben.
 

strußi

Top Contributor
es wird verwendet, wenn man 2 als Argument übergibt ;-)
Hab den code angepasst so dass es etwas schneller geht. Sobald eine Primzahl gefunden wird bricht das break die for-schleife ab und die ausgabe erfolgt
Java:
public class PrimalityTest {

    public static void main(String[] args) {
        new PrimalityTest();
        int firstArg =0;
        if( args.length >0){
            try {
                firstArg = Integer.parseInt(args[0]);
            } catch (NumberFormatException e) {
                System.err.println("Argument" + args[0] + " must be an integer.");
                System.exit(1);
            }
        }
      
        int counter;
        boolean prim =false;

        for( int number =2; number <=firstArg/2+1; number++){
            if( firstArg %number ==0){
                prim =true;
                break;
            }
        }
        if( prim) {
            System.out.println( "" +firstArg +" ist eine Primzahl");
        } else{
            System.out.println("" +firstArg +" keine Primzahl");
        }
      
    }
}
 

strußi

Top Contributor
ich steh gerade bei dem was du sagst auf dem Schlauch. Hab mir seinen Code kopiert und formatiert, und alles was ich für nicht sinnvoll erachtet habe, flog beim zweiten post raus.
und wir tauschen keine PM s ;-) aus
 

Harry Kane

Top Contributor
ich steh gerade bei dem was du sagst auf dem Schlauch
Der TE erwähnte die Ausgabe "ist Primzahl", und die wird so wörtlich weder in einem deiner noch in einem der Postings vom TE verwendet, nur haöt sehr ähnliche wie "Eine Primzahl", "ist eine Primzahl" bzw. "keine Primzahl".
Entweder der TE hat die Ausgabe nicht korrekt wiedergegeben, oder er verwendet einen Code den er bisher nicht gepostet hat.
So wies aussieht funktioniert deiner.
Der vom TE müsste auch funktionieren (ao auf en ersten Blick, ohne ihn getestet zu haben). Der Code vom TE prüft nicht nur die eingegebenZahl darauf, ob sie eine Primzahl ist, sondern alle Zahlen von 2 bis zur eingegebenen Zahl (einschliesslich). Nur die sysouts im Code vom TE sind nicht besonders hilfreich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Primzahl mit Angabe der höchsten Primzahl und Angabe der Anzahl von Primzahlen bis 100 Java Basics - Anfänger-Themen 8
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
O Erste Schritte Primzahl Methode Java Basics - Anfänger-Themen 8
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
O Primzahl bis n Java Basics - Anfänger-Themen 5
D Primzahl Aufgabe Java Basics - Anfänger-Themen 5
R Primzahl ja/nein - besserer Code möglich? Java Basics - Anfänger-Themen 2
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
U Primzahl-Tester Java Basics - Anfänger-Themen 3
A 10001-te Primzahl herausfinden Java Basics - Anfänger-Themen 5
L primzahl Java Basics - Anfänger-Themen 54
R Primzahl kleiner 3 Java Basics - Anfänger-Themen 2
T Primzahl Schleife Java Basics - Anfänger-Themen 15
X Primzahl Ausgabe falsch Java Basics - Anfänger-Themen 10
M Primzahl Java Basics - Anfänger-Themen 11
D Array Fehler / groesste Primzahl suchen Java Basics - Anfänger-Themen 4
F Primzahl oder nicht?! Java Basics - Anfänger-Themen 7
S Primzahl in einem Array finden Java Basics - Anfänger-Themen 21
J Primzahl mit for Schleife Java Basics - Anfänger-Themen 4
A Fehler im Primzahl Programm Java Basics - Anfänger-Themen 17
S Primzahl berechnen in Java Java Basics - Anfänger-Themen 7
K Primzahl//immer true Java Basics - Anfänger-Themen 7
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
M Primzahl Java Basics - Anfänger-Themen 8
W Nächstgelegene Primzahl Java Basics - Anfänger-Themen 3
I Primzahl suchen Java Basics - Anfänger-Themen 5
G primzahl oder nicht? Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben