# Primzahl Prüfung durchführen



## Thiese (17. Okt 2010)

Hallo,

ich sitze gerade an meinen Hausaufgaben und bin fast am Verzweifeln.

Unsere Aufgaben war ein Strucktogramm, ein Schreibtischtest und den dazugehörigen Quellcode zu entwerfen.

Das Strucktogramm
[
	

	
	
		
		

		
			





Der Schreibtischtest sieht wie folgt aus:






Jetzt fehlt nur noch der Quellcode, hier bin ich soweit gekommen


```
public class primzahlen
{public static void main(String[] args){
  int c_Argument = 5; // zu überprüfende Zahl
   int Teiler = 2;
   int rest = c_Argument % Teiler;

   while (Teiler < c_Argument){
    //anweisung;
    //aktulisierung;}
    
    if (rest == 0){
      //anweisung;
      }else {
        //anweisung;
      }
    }


  }
}
```

Das Problem ist, dass ich es irgendwie nicht schaffe die while-Schleife mit der IF Anweisung zusammen bekomme. Kann mir da bitte jemand helfen?


----------



## XHelp (17. Okt 2010)

Naja, wenn rest == 0 ist, dann musst du "falsch" ausgeben und die Schleife beenden
Wenn der rest nicht 0 ist, dann musst du Teiler erhöhen und den Rest neuberechnen.

Dazu noch paar Sachen:
- Variablennamen werden klein geschrieben
- "rest"-Variable brauchst du nicht, das kannst du direkt in der If-Abfrage berechnen

P.S. Die Ausgabe "ist ene Primzahl" erfolgt erst nach der Schleife. Wenn die Aufgabe es so verlangt, dann ist es besser dich an dem Struktogramm zu orientieren und nicht aus der Schleife rauszugehen, sondern das Programm beenden.


----------



## Thiese (17. Okt 2010)

Vielen Dank für deine Antwort

Ich habe mal versucht das ganze umzusetzen, bekomme aber komisch Ergebnisse. Stimmt die Verschachtelung von dem IF und der WHILE Schleife?

Da kommen irgendwie komische Ergebnisse raus :-(


```
public class primzahlen{
  public static void main(String[] args){
    int c_Argument = 5; // zu überprüfende Zahl
     int teiler = 2;

   while (teiler < c_Argument){

    if (c_Argument % teiler == 0){
      System.out.println(c_Argument + " ist keine Primzahl");
      }else {
      System.out.println(c_Argument + " ist eine Primzahl");
      }
      
   teiler ++;
    }
  }
}
```


----------



## XHelp (17. Okt 2010)

Naja, "ist eine Primzahl" muss NACH der Schleife passieren und bei "keine Primzahl" musst du das Programm beenden.


----------



## Thiese (17. Okt 2010)

Ahh danke für den Hinweis.

Jetzt hab ich es fast 


```
public class primzahlen{
  public static void main(String[] args){
    int c_Argument = 5; // zu überprüfende Zahl
    int teiler = 2;

   while (teiler < c_Argument)
     {
      if (c_Argument % teiler == 0){
      System.out.println(c_Argument + " ist keine Primzahl");
      break;
     }
    teiler ++;
    }
   System.out.println(c_Argument + " ist eine Primzahl");
  }
}
```

Das Problem ist nur noch, dass wenn ich es mit 15 mache, dann kommt einmal es ist eine Primzahl und einmal es ist keine Primzahl.


----------



## XHelp (17. Okt 2010)

Statt 
	
	
	
	





```
break;
```
 solltest du 
	
	
	
	





```
System.exit(0);
```
 nehmen. So verlangt es dein Struktogramm. Dann sollte die Lösung korrekt sein.


----------



## Marco13 (17. Okt 2010)

Hm. Von System.exit steht da nichts. Und eigentlich verwendet man das auch nicht ("fast nie"). break ist schon OK


----------



## Thiese (17. Okt 2010)

Ja mit dem System.exit(0); funktioniert es perfekt.

Wenn ich es mit dem break; mache, dann kommt bei c_Argument = 15 einmal es ist eine Primzahl und einmal es ist keine Primzahl.
Und mit dem System.exit(0); funktioniert es perfekt.

Vielen Dank für die Hilfe! 

Der Vollständigkeit hier nochmal der komplette Quellcode


```
public class primzahlen{
  public static void main(String[] args){
    int c_Argument = 15; // zu überprüfende Zahl
    int teiler = 2;

   while (teiler < c_Argument)
     {
      if (c_Argument % teiler == 0){
      System.out.println(c_Argument + " ist keine Primzahl");
      System.exit(0);;
     }
    teiler ++;
    }
   System.out.println(c_Argument + " ist eine Primzahl");
  }
}
```


----------



## Marco13 (17. Okt 2010)

Alternative (ohne jetzt mit ausgefeilteren Primzahltestverfahren anfangen zu wollen) :


```
public class Primzahlen
{
    public static void main(String[] args)
    {
        for (int i=0; i<16; i++)
        {
            check(i);
        }
    }

    private static void check(int c_Argument)
    {
        if (isPrime(c_Argument))
        {
            System.out.println(c_Argument + " ist eine Primzahl");
        }
        else
        {
            System.out.println(c_Argument + " ist keine Primzahl");
        }
    }



    private static boolean isPrime(int c_Argument)
    {
       int teiler = 2;
       while (teiler < c_Argument)
       {
           if (c_Argument % teiler == 0){
               return false;
           }
           teiler ++;
       }
       return true;
    }
}
```

EDIT: Wobei ... ich gerade nicht sicher bin, ob es Lehrer gibt, die so pedantisch sind, dass sie das als "nicht zum Struktorgramm passend" bezeichnen würden. Ja, Struktogramme.... so war das, damals, in den 70ern :reflect:


----------

