# Primzahlprüfung, komme nicht weiter



## babuschka (24. Feb 2007)

Hallo!!

Ich bin gerade dabei alte Klausuren durchzuarbeiten.
Natürlich habe ich schon einen Code erstellt, der aber wohl noch fehlerbehaftet ist. Wer von Euch kann mir weiterhelfen bzw. Tipps für einen effektiveren Code geben?!




Hier die Aufgabenstellung:

Schreiben Sie eine Java-Applikation zur Primzahlprüfung, die folgende Aufgabe löst:

a)Eingabe einer positiven ganzen Zahl n von der Tastatur
(ohne Prüfung der korrekten Dateneingabe).

b)Prüfung der ganzzahligen Teiler von n

c)Falls n nur die Teiler 1 und n hat, soll ausgegeben werden:"n ist eine Primzahl"
Sonst wird ausgegeben:"n ist keine Primzahl"



Bitte nicht über meine Versuche lachen, ich muss mich da jetzt ganz schön durchkämpfen.



```
class Primzahl  {
    public static void main(String[] args)  {
    
        int n,x=0,i;
        n=Integer.parseInt(args[0]);
    
        for(i=1;i<n;i++)  
    
        x=n/i;
        System.out.println(x);
        
        if (x<n)
        System.out.println("n ist keine primzahl");
    
        else
        System.out.println("n ist eine primzahl");
        }    
    }
```


----------



## SlaterB (24. Feb 2007)

welchen Sinn macht es, wenn jemand anders Aufgaben für dich löst die du nicht mal brauchst?
(falls das keine versteckte Hausaufgabe ist  )

du willst es doch können, also lerne es selber bzw. denke über die Aufgabe nach,

allein den Aufgabentext zu posten statt inhaltliche Fragen wie
"Wie liest man etwas von der Tastatur ein"
ist ja schon sehr bedenklich,
das steht übrigens auch in jedem Lehrbuch, wieso für sowas grundlegendes ein Forum zu befragen?

(sieh die drastischen Worte als konstruktive Kritik, 
sinnvolle Fragen sind mehr als willkommen)


und falls du einfach nur einen Anfang suchst:
ohne Lehrbuch kommst du nicht weit, für diese Aufgabe reichen schon die ersten wenigen Kapitel
+ vielleicht dann einige konkrete Suchen nach Extra-Funktionalität wie das Einlesen von der Konsole


----------



## johanness (24. Feb 2007)

Dein Problem ist ganz unabhängig von Java: Dein Algorithmus zur Primzahlerkennung ist, vorsichtig gesagt, unvollständig. Überleg dir doch mal, wie die Primzahlerkennung funktionieren könnte, und schreibe das auf einem Blatt Papier (oder hier im Forum) auf. Und danach (!) fängst du an, das zu programmieren.


----------



## babuschka (24. Feb 2007)

Ich hatte folgende Idee:

die eingegebene zahl sooft durch zwei teilen, wie es möglich ist.
dann durch ungerade teiler teilen. 3,5,7,9,11, bis der teiler größer ist.


ich mach mich jetzt an die arbeit.
steffen777


----------



## Marcel_Handball (24. Feb 2007)

Hallo Steffen,
wenn du prüfen möchtest, ob eine Zahl eine Primzahl ist, dann heißt das doch nichts anderes als, dass die Zahl nur durch sich selbst und durch Eins teilbar ist.

Also muss du alle Zahlen prüfen, die als Teiler in Frage kommen. Das heißt:

- Lege  eine boolesche Klassen-Variable an, die du zu Beginn auf false stellst.
- Lass eine Schleife von 2 bis zu n durchlaufen ( einer- Schritte)

-In die Schleife kommt eine if - Anweisung: Wenn n % der Schleifenzahl ==0 dann soll die Variable auf true gesetzt werden

Hinter die Schleifen kommt dann noch eine if else Anweisung. Wenn die Variable noch auf false steht, ist die Zahl eine Primzahl, ansonsten nicht!!!!

Gruß Marcel


----------



## babuschka (24. Feb 2007)

Hi Marcel!
folgendes hab ich da jetzt mal zusammengeschrieben, klappt noch nicht ganz. aber ich bleibe dran!


```
class Primzahl2  {
    public static void main(String[] args)  {
        
        boolean ergebnis=false;
        int k,n;
        n=Integer.parseInt(args[0]);
       
        
        
        for(k=2;k<=n;k++)
        
        if((n%k)==0)
        ergebnis=true;
        
        if(ergebnis=false)
        System.out.println("zahl ist eine primzahl");
        
        else
        
        System.out.println("Zahl ist keine primzahl");
        }
    }
```


----------



## Marcel_Handball (24. Feb 2007)

also das sieht schon gar nicht mal so schlecht aus.

Ein Fehler ist allerdings noch folgender

```
if(ergebnis=false)
```
in eine If-Anweisung kommen immer zwei Gleichheitszeichen (==).
Probier mal, ob es dann klappt.

Was du dir noch angewöhnen solltest ist, geschweifte Klammern zu setzen, sie sind zwar nicht nötig, solange du nur eine Anweisung benutzt, aber es ist so leichter nachzuvollziehen, wo bestimmte "Blöcke" enden (wie z.B. Schleifen oder Methoden.)

Gruß Marcel


----------



## Marcel_Handball (24. Feb 2007)

Ich sehe gerade noch folgende Fehler:

- deine Schleife darf nur *bis* zu der Zahl durchlaufen (nicht <=)
- ansonsten stimmt soweit alles, bis auf das Einlesen der Zahl, dies wird folgender Maßen "gemacht":



```
double n;
Scanner eingabe = new Scanner(System.in);
		
System.out.println(" Bitte die erste Zahl eingeben \n");
n=eingabe.nextDouble ();
```
So müsste es klappen!!


----------



## babuschka (24. Feb 2007)

funktioniert schon fast, irgendwo mit den klammern stimmt noch was nicht!
ich hatte sie jetzt an verschiedenen stellen gesetzt, bei diesem code gibt er das System.out mehrmals aus.





```
class Primzahl2  {
    public static void main(String[] args)  {
        
        boolean ergebnis=false;
        int k,n;
        n=Integer.parseInt(args[0]);
        
        for(k=2;k<=n;k++)  {
        
        if((n%k)==0)
        ergebnis=true;
        
   
        
        if(ergebnis==false)
        System.out.println("zahl ist eine primzahl");
        
        else
        
        System.out.println("zahl ist keine primzahl");
        }
    }
}
```


----------



## babuschka (24. Feb 2007)

Hey es funktioniert!
Darf ich die Eingabe so wie ich sie gestaltet habe, gar nicht machen??
Hab da vom Prof. ein Skript und der macht das mit diesen parse.

Ich danke Dir schon mal für Deine Mühe!!


----------



## Marcel_Handball (24. Feb 2007)

Schön das es geklappt hat,

zu deiner Frage, ob man die Eingabe auch mit parse durchführen kann, weiß ich leider nicht. Bin selbst noch Schüler und programmiere zurzeit mehr Applets als "Dos-Applikationen".

Hab allerdings eines vergessen, weshalb es mich ein wenig wundert, warum dein Programm schon funktioniert: Es müsste eigentlich noch folgende Anweisung fehlen: import java.util.*;


```
import java.util.*;

class prim  {
    public static void main(String[] args)  {
       
        boolean ergebnis=false;
        int k;
		double n;
		Scanner eingabe = new Scanner(System.in);
		
        System.out.println(" Bitte die erste Zahl eingeben \n");
		n=eingabe.nextDouble ();
       
       
       
        for(k=2;k<n;k++){if((n%k)==0){ergebnis=true;}}
       
        if(ergebnis==false){
        System.out.println("zahl ist eine Primzahl");}
       
        else{System.out.println("Zahl ist keine Primzahl");}
            
	} 
}
```

Das ganze Programm sehe dann folgender Maßen aus.
Wenn du demnächst, oder jetzt vielleicht noch weiter Fragen hast, kannst du sie mir ruhig stellen.  

Gruß Marcel


----------



## babuschka (24. Feb 2007)

Ich dank Dir erstmal!
Ich hab noch zwei Aufgaben auf ähnlichem Niveau, aber ich will mich ertmal selbst versuchen! Dann werde ich gerne noch mal posten!

Gruss,
Steffen


----------

